Содержание страницы
Сервер OpenConnect VPN (ocserv) — это сервер Linux SSL VPN с открытым исходным кодом, разработанный для организаций, которым требуется VPN с удаленным доступом и возможностью управления и контроля корпоративных пользователей.
Подготовка
Подготовка сервера для работы это личные предпочтения, у каждого они свои, например вот
Важна установка корректного имени сервера
hostname -f
#vpn.notdev.ru
Клиентские приложения
- Cisco AnyConnect: Microsoft Store, Windows, Google Play, App Store
- OpenConnect: Linux, Windows
- Clavister OpenConnect: Microsoft Store, Google Play, App Store
Установка OpenConnect VPN Server
В стандартном репозитории Debian на текущий момент, есть только версия 1.1.6, если вам нужна функция camouflage, то придется включить тестовый репозиторий и установить версию 1.2.4 и выше либо скомпилировать из исходников самостоятельно.
apt install -y ocserv certbot
Делаем резервную копию конфигурации, создаем рабочий конфиг из дефолтного без комментариев и пустых строк
cp /etc/ocserv/ocserv.conf{,.bak} cat /etc/ocserv/ocserv.conf.bak | grep -v '^#' | sed '/^$/d' > /etc/ocserv/ocserv.conf
Выпуск SSL сертификата
При первом запуске вам потребуется ввести рабочий адрес электронной почты, открыты порт 80 TCP. Все сертификаты Let’s Encrypt выдаются сроком на 90 дней и certbot будет их автоматически продлять.
certbot certonly --standalone --post-hook "service ocserv restart" --preferred-challenges http --agree-tos --email [email protected] -d vpn.notdev.ru
Настроить перезапуск сервера OpenConnect после получения нового сертификата. Для этого откроем /etc/letsencrypt/renewal/vpn.notdev.ru.conf добавим post_hook в секцию [renewalparams], либо при первом запуске указать –post-hook “service ocserv restart”
nano /etc/letsencrypt/renewal/vpn.notdev.ru.conf
post_hook = systemctl restart ocserv
Отредактируйте nano /etc/ocserv/ocserv.conf
Укажите SSL сертификат и приватный ключ, а так же перечень доменных имен используемых VPN сервером
server-cert = /etc/letsencrypt/live/vpn.notdev.ru/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.notdev.ru/privkey.pem
default-domain = vpn.notdev.ru
Можно использовать несколько доменных имен одновременно, default-domain = “vpn.notdev.ru ocserv.notdev.ru”, ко всем доменным именам должны быть выпущены соответствующие SSL сертификаты
Проверка авторизации пользователя
Воспользуемся базовой авторизацией PAM, создайте учетную запись user-vpn-test
ocpasswd -c /etc/ocserv/passwd user-vpn-test
Отредактируйте nano /etc/ocserv/ocserv.conf
auth = "plain[passwd=/etc/ocserv/passwd]"
Одновременно может быть указана только одна строка с аутентификацией, но в ней можно перечислить несколько источников, а так же использовать 2FA
Перезапустите OCServ
service ocserv restart
service ocserv status
Настройка завершена и в текущей конфигурации уже можно пользоваться.
Настройка сети
- Сеть 192.169.100.0/24 (маска сети 255.255.255.0)
- IP адрес VPN сервера 192.168.100.1
- DNS 192.168.10.11 192.168.10.12
ipv4-network = 192.168.100.1
ipv4-netmask = 255.255.255.0
dns = 192.168.10.11
dns = 192.168.10.12
Для отправки всех DNS-запросов в VPN туннель. Это значение по умолчанию когда установлен маршрут по умолчанию
tunnel-all-dns = true
Для раздельной отправки DNS-запросов в VPN туннель, необходимо для доменов в которых следует использовать предоставленный DNS
split-dns = notdev.local
Маршруты для пересылки клиенту
route = 192.168.10.0/255.255.255.0
route = 192.168.11.0/255.255.255.0
Есть несколько вариантов
- Default – Весь трафик идет через VPN соединение
- Split VPN – только указанные подсети или отдельные IP адреса будут перенаправляться через VPN соединение
- NO route – указанные подсети или отдельные IP адреса будут НЕ перенаправляться через VPN соединение
route = default
route = 192.168.10.11/255.255.255.254
route = 192.168.10.12/255.255.255.254
route = 192.168.11.0/255.255.255.0
no-route = 192.168.1.0/255.255.255.0
no-route = 192.168.1.1/255.255.255.254
Текущая конфигурация
Итоговый конфигурационный файл ocserv.conf должен выглядеть примерно так
auth = "plain[passwd=/etc/ocserv/passwd]"
tcp-port = 443
udp-port = 443
run-as-user = ocserv
run-as-group = ocserv
socket-file = /run/ocserv-socket
chroot-dir = /var/lib/ocserv
server-cert = /etc/letsencrypt/live/vpn.notdev.ru/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.notdev.ru/privkey.pem
isolate-workers = true
max-clients = 16
max-same-clients = 2
rate-limit-ms = 100
server-stats-reset-time = 604800
keepalive = 32400
dpd = 90
mobile-dpd = 1800
switch-to-tcp-timeout = 25
try-mtu-discovery = false
cert-user-oid = 0.9.2342.19200300.100.1.1
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.3"
auth-timeout = 240
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /run/ocserv.pid
log-level = 1
device = vpns
predictable-ips = true
default-domain = vpn.notdev.ru
ipv4-network = 192.168.100.1
ipv4-netmask = 255.255.255.0
dns = 192.168.10.11
dns = 192.168.10.12
split-dns = notdev.local
ping-leases = false
route = 192.168.10.0/255.255.255.0
route = 192.168.11.0/255.255.255.0
cisco-client-compat = true
dtls-legacy = true
client-bypass-protocol = false
Включаем возможность пересылки трафика
echo "#forwarding" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.d/99-xtune.conf
sysctl -p /etc/sysctl.d/99-xtune.conf
Дополнительные настройки для сетевого интерфейса
Выключаем IPv6 и увеличиваем пропускную способность канала передачи данных.
BBR (Bottleneck Bandwidth and RTT) — алгоритма контроля перегрузки TCP, патчи с которым ещё в 2016 году были опубликованы компанией Google и приняты в основное ядро Linux. Применение этой технологии в некоторых конфигурациях позволяет увеличить пропускную способность канала передачи данных.
echo "#disable IPv6" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" | tee -a /etc/sysctl.d/99-xtune.conf
echo "#tune TCP" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.core.default_qdisc=fq" | tee -a /etc/sysctl.d/99-xtune.conf
echo "net.ipv4.tcp_congestion_control=bbr" | tee -a /etc/sysctl.d/99-xtune.conf
sysctl -p /etc/sysctl.d/99-xtune.conf
Настройка Firewall
iptables
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
nftables
nft add table nat
nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule nat postrouting oifname "eth0" masquerade
Более полный конфиг смотрите в статье о безопасности OpenConnect
Возможные проблемы
- –
Дополнительные настройки
- Как установить и настроить OpenConnect VPN Server с поддержкой Let’s Encrypt
- Аутентификация пользователей в OpenConnect VPN Server – AD, Kerberos
- Безопасность OpenConnect VPN Server
- Мониторинг пользовательской активности OpenConnect VPN Server
Дополнительная информация