Здесь рассматривается, как настроить роутер с OpenWrt в качестве клиента сервера OpenConnect.

  • Всё проделывается на OpenWrt 23.05.0. На других версиях настройка не отличается
  • На сервере используется общедоступный TLS-сертификат
  • Туннель можно настроить через консоль и через LuCI

Установка пакета

opkg update && opkg install openconnect

Настройка состоит из конфига (url, login, pass), создания зоны для OpenConnect и разрешения на передачу трафика из зоны lan в зону oc.

Камуфляж и нестандартный порт

На текущий момент у вас не получится использовать openconnect с камуфляжем, который будет расположен не на 443 порту. Обязательно используйте 443 порт.

Подробности описаны в issue .

Настройка через консоль

Первый способ через вставку в конфиг

Подставляем значения URL своего сервера, логин и пароль

config interface 'oc0'
	option proto 'openconnect'
	option server 'domain.com/?FUzTeWmXC2Fc2fyv'
	option username 'test'
	option password 'hGTWLIzox9RNHDL'
	option vpn_protocol 'anyconnect'
	option defaultroute '0'

и вставляем в /etc/config/network.

Рестартуем сеть

service network restart

Проверяем, что интерфейс поднялся. Мы указали имя oc0, поэтому интерфейс будет называться vpn-oc0

root@OpenWrt:/etc/openvpn# ip a
...
18: vpn-oc0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN qlen 500
    link/[65534] 
    inet 192.168.200.190/32 brd 255.255.255.255 scope global vpn-oc0
       valid_lft forever preferred_lft forever
...

Проверить, что туннель работает, можно простым пингом с указанием интерфейса

ping -I vpn-oc0 itdog.info

Если интерфейс не поднялся, смотрите логи

logread -f

Второй способ через UCI

uci set network.oc0=interface
uci set network.oc0.proto='openconnect'
uci set network.oc0.server='domain.com/?FUzTeWmXC2Fc2fyv'
uci set network.oc0.username='test'
uci set network.oc0.password='hGTWLIzox9RNHDL'
uci set network.oc0.vpn_protocol='anyconnect'
uci set network.oc0.defaultroute='0'
uci commit network

Далее всё так же. Рестарт сети и посмотреть, работает ли. Этот конфиг будет также лежать в /etc/config/network.

Настройка зоны

Для того чтобы клиенты роутера могли ходить через туннель, необходимо добавить зону для интерфейса OpenConnect и разрешить forwarding из lan зоны в /etc/config/firewall

config zone
        option name 'oc'
        option forward 'REJECT'
        option output 'ACCEPT'
        option input 'REJECT'
        option masq '1'
        option mtu_fix '1'
        option device 'vpn-oc0'
        option family 'ipv4'

config forwarding
        option name 'lan-oc'
        option dest 'oc'
        option src 'lan'
        option family 'ipv4'

Здесь, так же как и для openvpn, нужно указывать device.

После этого нужно перезапустить firewall

service firewall restart

Настройка через LuCI

Для настройки через LuCI потребуется пакет

opkg install luci-proto-openconnect

Чтоб установить через LuCI, надо зайти в System - Software. В поле Download and install package ввести имя пакета luci-proto-openconnect и нажать кнопку Install

И если у вас не установлен основной пакет, то его тоже нужно установить.

Зайти в Network - Interfaces. Нажимаем кнопку Add new interface…, в протоколе выбираем OpenConnect. Имя можно вести любое, для совместимости с инструкцией задайте oc0. Далее Create Interface.

В следующем окне задайте VPN Server, Username и Password. На вкладке Advanced Settings снимите флажок с Use default gateway.

openconnect-interface

Save, потом Save & Apply.

Чтоб редактировать интерфейс, нужно нажать Edit, внести изменения и нажать Save.

Добавление zone и forwarding через LuCI

Зайти в Network - Firewall, промотать до Zones. Нажать кнопку Add

openconnect-zone

Заполнить вкладку:

Name - oc

Input - reject

Output - accept

Forward - reject

Masquerading - проставить галочку

MSS clamping - проставить галочку

Allow forward from source zones - lan

Save - Save & Apply

Перенаправление всего трафика в туннель

Параметр OpenConnect Use default gateway у меня на OpenWrt не работает как нужно. Возможно, требуется что-то подкрутить.

Перенаправление трафика можно настроить с помощью маркировки, как описано здесь

Переключение роутинга на OpenConnect

Речь идёт про мой способ точечного роутинга .

В файле /etc/hotplug.d/iface/30-vpnroute меняем интерфейс с wg0 на vpn-oc0.

После этого рестартуем сеть, и роутинг теперь осуществляется через openconnect

/etc/init.d/network restart

Документация OpenWrt:

Нашли ошибку, неточность или знаете как лучше? Пишите в комментарии

Все обновления и новые статьи публикую в моём телеграм-канале .