OpenConnect
Перейти к навигации
Перейти к поиску
Обзор
- OpenConnect - это Open Source версия AnyConnect от CISCO, к серверу OpenConnect можно подключаться клиентами для AnyConnect, так же есть OpenSource клиенты для OpneConnect на Windows и Linux
Установка
# установка debian/ubuntu apt install ocserv # установка rhel/rocky dnf install ocserv # сохранение оригинала конфигурации и зачистка комментариев mv /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.orig grep -Ev '^#|^$' /etc/ocserv/ocserv.conf.orig > /etc/ocserv/ocserv.conf # что необходимо проверить/изменить в конфигурации vi /etc/ocserv/ocserv.conf #------------------------------------------------------------------------------- # задать аутентификацию по паролю auth = "plain[passwd=/etc/ocserv/passwd]" # если необходимо сменить tcp порт tcp-port = 8443 # закоментировать udp #udp-port = 443 # задать актуальные параметры для сертификата server-cert = /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem ca-cert = /etc/letsencrypt/live/vpn.yourdomain.com/chain.pem # задать интервал проверки/завершения неактивных клиентских сессий keepalive = 120 # включите PMTUD (Path MTU Discovery), для согласования MTU try-mtu-discovery = true # отключите все устаревшие протоколы SSL/TLS, чтобы работал только последний TLS1.3 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.2" # задайте домен по умолчанию по полному имени вашего хоста default-domain = vpn.yourdomain.com # задайте VPN подсеть, так чтобы она не пересекалась с вашими подсетями ipv4-network = 10.20.30.0 ipv4-netmask = 255.255.255.0 # если не задано ни одного маршрута, то VPN интерфейс станет шлюзом по умолчанию # если задан хоть один маршрут, то в VPN будут маршрутизироваться только заданные подсети #route = 10.0.0.0/8 #route = 172.16.0.0/12 #route = 192.168.0.0/16 # можно явно указать что VPN будет шлюзом по умолчанию (не проверял) route = default # исключите из маршрутизации на VPN интерфейс хост VPN сервера и все что не должно идти через VPN no-route = <IP_VPN_SERVER>/255.255.255.255 no-route = 192.168.4.0/255.255.255.0 no-route = 192.168.5.0/255.255.255.0 # (НЕ ПРОВЕРЕНО) маскировка под обычный сайт # подключение к VPN по секретному URL https://your.host.ru/***mysecretkey*** camouflage = true camouflage_secret = "***mysecretkey***" camouflage_realm = "Restricted Content" # текст, который будет отображаться при подключении браузером или сканером на корневой URL default_homepage = "https://your.site.ru" # дополнительным параметром можно перенаправлять браузер на другой URL #------------------------------------------------------------------------------- # статус сервиса systemctl status ocserv # включите, если не включен systemctl enable ocserv # перезапустите если был запущен на конфигурации по умолчанию systemctl stop ocserv systemctl start ocserv # создайте vpn польователей ocpasswd -c /etc/ocserv/ocpasswd user1 ocpasswd -c /etc/ocserv/ocpasswd user2 # удаление пользователя (если потребуется) ocpasswd -c /etc/ocserv/ocpasswd -d user2
Настройка в качестве интернет шлюза
Разрешение на передачу трафика
Debian 13
nano /etc/sysctl.d/99-sysctl.conf #------------------------------------------------------------------------------- net.ipv4.ip_forward=1 #------------------------------------------------------------------------------- # применение конфигурации без перезагрузки sysctl -p /etc/sysctl.d/99-sysctl.conf # проверка sysctl net.ipv4.ip_forward
Rocky Linux
vi /etc/sysctl.conf #------------------------------------------------------------------------------- net.ipv4.ip_forward=1 #------------------------------------------------------------------------------- sysctl -p # настройте на локальном файрволе SRC-NAT или маскарадинг
Настройка правил firewall
Пример правил для nftables
/etc/nftables.conf
#-------------------------------------------------------------------------------
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set manage_nets {
type ipv4_addr
flags interval
elements = { 1.2.3.0/24, 20.30.40.0/22 }
}
set vpn_nets {
type ipv4_addr
flags interval
elements = { 10.8.0.0/24, 10.20.30.0/24 }
}
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state established accept
tcp dport { http, https } accept comment "Allow public services"
ip saddr @manage_nets icmp type echo-request counter accept comment "Allow ping"
ip saddr @manage_nets tcp dport { ssh, 8443 } accept
iifname lo accept
ip saddr @vpn_nets ip daddr @vpn_nets accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state invalid drop
ct state established accept
ip saddr @vpn_nets ip daddr @vpn_nets accept
ip saddr @vpn_nets accept
}
chain output {
type filter hook output priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr @vpn_nets oif "ens3" masquerade
}
}
#-------------------------------------------------------------------------------
настройка на стороне клиента
# установка клиента debian/ubuntu apt install openconnect # установка клиента rhel/rocky dnf install openconnect # установка соединения # -b запуск в фоновом режиме sudo openconnect -b vpn.yourdomain.com:8443
Установка графической части (не обязательно)
dnf install NetworkManager-openconnect dnf install NetworkManager-openconnect-gnome