Бесплатный аналог AnyConnect VPN Server

У одного заказчика столкнулся с проблемой, когда локальный DPI (Deep Packet Inspection — технология накопления статистических данных, проверки и фильтрации сетевых пакетов по их содержимому) не пропускал SSH протокол. В результате не было возможности подключиться к необходимой мне инфраструктуре используя ssh туннели.

Достаточно часто по работе я использую другую технологию туннелирования — Cisco AnyConnect, но ставить физическую железку Cisco ASA для туннелирования в своей инфраструктуре дорого и нерентабельно, а виртуальная ASA в моем виртуальном окружении не поднимается по архитектурным особенностям.

Оказывается есть opensource аналог AnyConnect VPN Server — OpenConnect VPN Server или ocserv.

Установка проходит в 5 простых шагов:

1. Установка пакета ocserv.

Данный пакет находится в репозитарии epel

yum install ocserv

2. Подготовка сертификатов.

Сертификат можно выпустить и самоподписанный, но я воспользовался бесплатными сертификатами от Let’s Encrypt, для того чтобы при подключении клиент на него не ругался.

3. Настройка конфигурационного файла.

# grep -Ev '^\s*(;|#|$)' ocserv.conf
auth = "plain[/etc/ocserv/ocpasswd]"
tcp-port = 444
udp-port = 444
run-as-user = ocserv
run-as-group = ocserv
socket-file = ocserv.sock
chroot-dir = /var/lib/ocserv
isolate-workers = false
max-clients = 16
max-same-clients = 2
keepalive = 32400
dpd = 90
mobile-dpd = 1800
switch-to-tcp-timeout = 25
try-mtu-discovery = false
server-cert = /etc/letsencrypt/live/shurshun.ru/fullchain.pem
server-key = /etc/letsencrypt/live/shurshun.ru/privkey.pem
ca-cert = /etc/letsencrypt/live/shurshun.ru/chain.pem
cert-user-oid = 0.9.2342.19200300.100.1.1
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
auth-timeout = 240
min-reauth-time = 300
max-ban-score = 50
ban-reset-time = 300
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /var/run/ocserv.pid
device = vpns
predictable-ips = true
default-domain = my.domain.ru
ipv4-network = 192.168.2.192
ipv4-netmask = 255.255.255.240
tunnel-all-dns = true
dns = 192.168.1.1
ping-leases = false
route = 192.168.1.0/255.255.255.0
cisco-client-compat = true
dtls-legacy = true
user-profile = profile.xml

Вам следует обратить внимание и заполнить своими данными следующие параметры:

Тип аторизации: auth
Порты: tcp-port, udp-port (обычно пор 443, но у меня один ip и данный порт уже занят)
Сертификаты: server-cert, server-key, ca-cert
Домен по умолчанию: default-domain
Настройка сети: ipv4-network,ipv4-netmask, dns, route

4. Включение Forwarding IP и настройка маршрутизации.

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sudo sysctl -p

В моем случае роутер (192.168.1.1) и VPN сервер (192.168.1.7) разные машины. VPN отдает сеть 192.168.2.* и для того чтобы подключенный клиент мог видеть локальную сеть 192.168.1.* на роутере (192.168.1.1) необходимо прописать статически маршрут для сети 192.168.2.* на VPN сервер(192.168.1.7).

Данный момент многие забывают, что приводит к различным проблемам при первичной настройке.

5. Задание пользователя и пароля для подключения.

sudo ocpasswd -c /etc/ocserv/ocpasswd username

Проверить работу сервера можно при помощи любого клиента Cisco AnyConnect или установив консольный клиент:

yum install openconnect
sudo openconnect -b vpn.example.com:port-number

Итоги:

В целом решение себя оправдало.

Хочется отметить, что я рассмотрел простейшую конфигурацию, но также как и железное решение, ocserv поддерживает множество различных настроек, например двухфакторную аутентификацию — достаточно популярный и важный в наше время функционал.

По материалам:
https://pupli.net/2017/12/22/set-up-openconnect-vpn-server-ocserv-on-ubuntu-16-04-17-10-with-lets-encrypt/

Вы можете оставить комментарий ниже.