Установка и подключение SoftEther VPN на OpenWrt

1. Установка SoftEther VPN-клиента в OpenWrt
1.1. Включение SSH в OpenWrt
1.2. Установка SoftEther VPN через SSH
2. Настройка SoftEther VPN-клиента в OpenWrt и подключение
2.1. Импорт конфигураций
2.2. Подключение
3. Настройка маршрутизации SoftEther VPN в OpenWrt
3.1. Добавление интерфейса SoftEther VPN
3.2. Изменение шлюза по умолчанию
4. Добавление подключения к SoftEther VPN в автозагрузку
Данная справка описана на основе ОС OpenWrt 22.03.2. Доступность SoftEther-пакетов для более ранних версий OpenWrt уточняйте на официальном сайте.
Устройство с OpenWrt должно иметь выход в интернет.

1. Установка

Для установки SoftEther VPN-клиента необходимо подключиться к устройству с ОС OpenWrt по SSH. В OpenWrt по умолчанию SSH отключен, чтобы его включить следует установить пароль администратора и разрешить доступ по SSH.

1.1. Включение SSH на OpenWrt

Все действия описанные в текущем подпункте производятся в Web-интерфейсе OpenWrt.
Установка пароля администратора в OpenWrt производится в меню System -> Administration -> Router Password. Необходимо ввести пароль в поля Password и Confirmation, после чего сохранить изменения нажав Save.
Далее в меню System -> Administration -> SSH Access следует включить Password authentication и Allow root logins with password, после чего сохранить и применить изменения нажав Save & Apply.

1.2. Установка SoftEther VPN-клиента

Все действия описанные в текущем подпункте производятся только в SSH-сессии OpenWrt.
Команды начинающиеся с приглашения # выполняются от root-пользователя, приглашение $ означает выполнение от обычного пользователя.
Подключившись к устройству с OpenWrt с root-правами по SSH на первом этапе следует обновить список доступных для установки пакетов.
# opkg update
Следующим шагом необходимо установить пакеты softethervpn5-libs и softethervpn5-client.
# opkg install softethervpn5-libs softethervpn5-client

2. Настройка и подключение

Все действия описанные в текущем пункте производятся только в SSH-сессии OpenWrt.
В общем виде импорт конфигураций и задание имени пользователя и пароля в OpenWrt аналогично настройке в Linux за небольшими исключениями накладываемыми из-за особенностей установки SoftEther и архитектуры устройства под управлением OpenWrt.

2.1. Импорт конфигураций

Для того чтобы скачать ZIP-архив с конфигурациями и воспользоваться им сначала потребуется установить утилиту unzip (по умолчанию она отсутствует в OpenWrt).
# opkg install unzip
После чего перейти в директорию /tmp, загрузить туда архив и распаковать его.
# cd /tmp
# wget https://data.dwv.one/net-XXX-XXXXXXXXXXXXXXXXXXX/softether/all.zip
Ссылку, указанную в примере выше в качестве аргумента утилиты wget, следует заменить на актуальную. Это возможно сделать через браузер (не в OpenWrt): пройти по ссылке, выбрать файл, скопировать ссылку на него и вставить ее в окно SSH-сессии.
Используя команду ниже следует распаковать архив.
# unzip all.zip
Не обязательно скачивать архив со всеми конфигурациями SoftEther VPN, возможно также выбрать и скачать конкретные файлы конфигурации (Single-цепи и Double-цепи).
Один или несколько выбранных конфигураций следует импортировать в VPN-клиент. В листинге ниже пример для импорта конфигурации цепи DoubleSSL_PL1_RU1, в случае когда текущая директория /tmp, а файл конфигурации DoubleSSL_PL1_RU1.vpn расположен в /tmp/double/.
# vpncmd localhost /CLIENT /CMD AccountImport double/DoubleSSL_PL1_RU1.vpn
Посмотреть все импортированные конфигурации (аккаунты) и их статус можно командой ниже.
vpncmd localhost /CLIENT /CMD AccountList
После успешного импорта конфигурации следует задать имя пользователя и пароль, который будет использоваться при авторизации VPN-сервером. В примере ниже urusername и urpassword следует заменить на, соответственно, ваше имя пользователя и ваш пароль.
Имя пользователя и пароль полностью совпадают с именем пользователя и паролем от Кабинета DeepWebVPN.
# vpncmd localhost /CLIENT /CMD AccountUsernameSet double-ssl-pl1-ru1 /USERNAME:urusername
# vpncmd localhost /CLIENT /CMD AccountPassword double-ssl-pl1-ru1 /PASSWORD:urpassword /TYPE:radius
Заново использовав эти команды с новым именем пользователя и/или паролем можно изменить имя пользователя или пароль для соответствующей VPN-цепи.

2.2. Подключение

Для подключения к VPN-цепи необходимо использовать следующую команду.
# vpncmd localhost /CLIENT /CMD AccountConnect double-ssl-pl1-ru1
Через несколько секунд следует проверить завершилось ли подключение к VPN-цепи, успешное соединение изменит статус на Connected.
# vpncmd localhost /CLIENT /CMD AccountList
vpncmd command - SoftEther VPN Command Line Management Utility Developer Edition
SoftEther VPN Command Line Management Utility (vpncmd command)
Developer Edition
Version 5.02 Build 5180 (English)
Compiled 2022/12/01 13:53:20 by at
Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All rights reserved.
Connected to VPN Client "localhost".
VPN Client>AccountList
AccountList command - Get List of VPN Connection Settings
Item |Value
----------------------------+---------------------------------------------------------------------------------
VPN Connection Setting Name |double-ssl-pl1-ru1
Status |Connected
VPN Server Hostname |XX.XX.XX.XX/tcp:443 (Direct TCP/IP Connection)
Virtual Hub |double-ssl-pl1-ru1
Virtual Network Adapter Name|VPN
The command completed successfully.

3. Настройка маршрутизации

3.1. Добавление интерфейса

Все действия описанные в текущем подпункте производятся в Web-интерфейсе OpenWrt.
После успешного выполнения предыдущего пункта следует создать новый интерфейс в OpenWrt. Для этого необходимо перейти в меню Network -> Interfaces. После нажатия кнопки Add new interface... всплывет окно, в котором в поле Name потребуется ввести название интерфейса (например SEVPN), в Protocol указать DHCP Client, на место Device назначить vpn_vpn.
Нажатие на кнопку Create interface откроет новое окно, в котором необходимо перейти во вкладку Advanced Settings. В окне следует убрать галочки с полей Use default gateway и Delegate IPv6 prefixes.
После Advanced Settings необходимо перейти во вкладку Firewall Setting, где в поле Create / Assign firewall-zone выбрать wan. Нажатие кнопки Save сохранит изменение и закончит создание интерфейса.
Затем в меню Network -> Interfaces следует перейти во вкладку Devices, выбрать строку с vpn_vpn и нажать Configure. В открывшемся окне необходимо убрать галочку с поля Enable IPv6 и сохранить изменения (кнопка Save).
После закрытия окна, внизу вкладки Devices кнопка Save & Apply применит введенные изменения.
Для сети, которую устройство с OpenWrt планирует раздавать под VPN, необходимо разрешить Masquerading в меню Network -> Firewall.

3.2. Изменение шлюза

Все действия описанные в текущем подпункте производятся только в SSH-сессии OpenWrt.
Для дальнейших действий необходимо узнать текущий шлюз по умолчанию. Текущий шлюз по умолчанию обычно принадлежит интерфейсу соединения с внешней сетью (интернетом), в примере это lan0.
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.100.1 0.0.0.0 UG 0 0 0 lan0
Убедившись, что SoftEther-соединение подключено (имеет статус Connected, см. п. 2.2) и интерфейс vpn_vpn имеет IP, назначенный ему VPN-сервером, следует добавить IP-адрес входящего сервера VPN-цепи как шлюз.
Подсеть для SoftEther Single-цепей 192.168.234.0/24, для Double-цепей 192.168.244.0/24. Соответственно шлюзом в VPN-соединении (не внешним!) Single-цепи будет 192.168.234.1, в Double-цепи 192.168.244.1.
В примере ниже XX.XX.XX.XX – внешний IP-адрес первого сервера в VPN-цепи (см. Определение IP-адреса входящего сервера VPN-цепи), а 192.168.100.1 – текущий шлюз по умолчанию.
# ip route add XX.XX.XX.XX via 192.168.100.1
Следующей командой будет удален текущий шлюз по умолчанию и шлюз VPN-соединения (ниже это 192.168.244.1, так как рассматривается пример с Double-цепью) будет назначен шлюзом по умолчанию.
# ip route del default via 192.168.100.1 && ip route add default via 192.168.244.1 dev vpn_vpn

4. Добавление в автозагрузку

Все действия описанные в текущем пункте производятся в Web-интерфейсе OpenWrt.
Добавление скрипта в автозагрузку в OpenWrt производится в меню System -> Startup, далее следует выбрать вкладку Local Startup, где будет форма с текстовым полем, содержащее скрипт автозапуска (файл /etc/rc.local). В скрипт необходимо записать команды подключения к VPN-цепи и настройки маршрутизации и, нажав кнопку Save, сохранить изменения. Пример ниже содержит скрипт для автоматического подключения к VPN-цепи double-ssl-pl1-ru1, где XX.XX.XX.XX – внешний IP-адрес первого сервера в VPN-цепи (см. Определение IP-адреса входящего сервера VPN-цепи), а 192.168.100.1 – текущий шлюз по умолчанию.
sleep 10
vpncmd localhost /CLIENT /CMD AccountConnect double-ssl-pl1-ru1
sleep 10
ip route add XX.XX.XX.XX via 192.168.100.1
ip route del default via 192.168.100.1 && ip route add default via 192.168.244.1 dev vpn_vpn