Настройка SoftEther VPN Client на Linux в CLI: пошаговое руководство с решением проблем маршрутизации
При работе с корпоративными сетями часто возникает необходимость подключиться к VPN-серверу SoftEther. На Windows это делается в пару кликов через графический клиент, но на Linux-серверах или рабочих станциях без GUI (графического интерфейса) настройка выполняется через консольную утилиту vpncmd.
В этой статье мы разберем весь процесс настройки SoftEther VPN Client на Linux с нуля, а также решим две классические проблемы: автоматическое получение IP-адреса по DHCP и обход конфликта локальных подсетей (когда домашняя сеть и сеть офиса совпадают).
Шаг 1. Установка SoftEther VPN Client
Скачайте клиент с официального сайта SoftEther или соберите его из исходников. Обычно файлы распаковываются в директорию /usr/vpnclient/ или /opt/vpnclient/.
Для сборки и запуска потребуются права root (или sudo), так как программа создает виртуальный сетевой интерфейс в системе.
Убедитесь, что файлы имеют права на исполнение:
chmod +x vpnclient vpncmd
Шаг 2. Запуск демона VPN-клиента
SoftEther VPN Client работает как фоновый демон. Запустите его командой:
sudo ./vpnclient start
Чтобы проверить статус службы:
ps aux | grep vpnclient
Шаг 3. Создание виртуального адаптера
Все дальнейшие настройки выполняются через утилиту командной строки vpncmd. Запустите её в режиме управления локальным клиентом:
./vpncmd localhost /CLIENT /CMD NicCreate vpn
Здесь vpn — имя нового виртуального адаптера, который будет создан в операционной системе (как интерфейс vpn_vpn).
Убедиться, что адаптер создан и включен, можно командой:
./vpncmd localhost /CLIENT /CMD NicList
Шаг 4. Настройка VPN-подключения
Создадим профиль подключения (например, с именем MyCorporateVPN), указав адрес сервера, порт и имя виртуального хаба:
./vpncmd localhost /CLIENT /CMD AccountCreate MyCorporateVPN /SERVER:ns3.example.com:443 /HUB:CorporateHub /DEVICE:vpn
Задайте тип аутентификации (стандартный пароль) и логин с паролем:
# Установка имени пользователя
./vpncmd localhost /CLIENT /CMD AccountUsernameSet MyCorporateVPN /USER:username
# Установка пароля
./vpncmd localhost /CLIENT /CMD AccountPasswordSet MyCorporateVPN /PASSWORD:your_password /TYPE:standard
Шаг 5. Подключение и запуск DHCP-клиента
Запустите подключение:
./vpncmd localhost /CLIENT /CMD AccountConnect MyCorporateVPN
Проверьте статус подключения:
./vpncmd localhost /CLIENT /CMD AccountList
Вы должны увидеть статус Connected.
[!IMPORTANT] Главное отличие Linux-версии от Windows: Linux-клиент SoftEther сам не запускает DHCP-клиент на созданном интерфейсе. Интерфейс
vpn_vpnподнимется, но не получит IP-адрес автоматически.
Запустите DHCP-клиент вручную:
sudo dhclient vpn_vpn
После этого проверьте появление IP-адреса:
ip addr show dev vpn_vpn
Шаг 6. Решение конфликта подсетей (Subnet Conflict)
Очень частая ситуация: ваша домашняя сеть (или сеть Wi-Fi) работает в диапазоне 192.168.0.0/24. Офисная сеть за VPN-туннелем использует тот же диапазон 192.168.0.0/24.
Если вы попытаетесь подключиться к серверу внутри туннеля (например, 192.168.0.241), компьютер отправит запрос в ваш домашний роутер по Wi-Fi, а не в VPN.
Решение: Добавление точечного маршрута (Host Route)
Вместо перенаправления всего трафика, направьте трафик до конкретного сервера через шлюз VPN:
sudo ip route add 192.168.0.241 via 192.168.100.1 dev vpn_vpn
Где 192.168.100.1 — это IP-адрес шлюза внутри VPN-сети (его можно посмотреть в файле /var/lib/dhcp/dhclient.leases или узнать у администратора).
Теперь трафик к целевому серверу 192.168.0.241 гарантированно пойдет через туннель, а остальной домашний интернет продолжит работать без изменений.
Шаг 7. Скрипты автоматизации (Connect / Disconnect)
Чтобы не вводить команды вручную каждый раз, создайте два простых скрипта.
Скрипт подключения (vpn-connect.sh):
#!/bin/bash
echo "Запуск VPN..."
sudo /opt/vpnclient/vpnclient start
/opt/vpnclient/vpncmd localhost /CLIENT /CMD AccountConnect MyCorporateVPN
sudo dhclient vpn_vpn
sudo ip route add 192.168.0.241 via 192.168.100.1 dev vpn_vpn
echo "VPN готов!"
Скрипт отключения (vpn-disconnect.sh):
#!/bin/bash
echo "Отключение VPN..."
/opt/vpnclient/vpncmd localhost /CLIENT /CMD AccountDisconnect MyCorporateVPN
sudo dhclient -r vpn_vpn
sudo ip route del 192.168.0.241 2>/dev/null
sudo /opt/vpnclient/vpnclient stop
echo "VPN отключен."
Сделайте их исполняемыми:
chmod +x vpn-connect.sh vpn-disconnect.sh
Часто задаваемые вопросы (FAQ)
1. Можно ли использовать SoftEther одновременно с другими VPN (например, Amnezia VPN / WireGuard)?
Да, можно. Однако помните, что другие VPN могут перехватывать DNS-запросы или устанавливать глобальные маршруты (например, 0.0.0.0/0 или ~.). Если возникают проблемы с доступностью хостов, временно отключите другой VPN или настройте таблицы маршрутизации (ip route) вручную.
2. Почему после подключения к VPN пропадает интернет?
Это происходит, если DHCP-сервер VPN назначает себя в качестве шлюза по умолчанию (default gateway).
Чтобы этого не происходило, запускайте dhclient с флагом, игнорирующим шлюз по умолчанию, либо удаляйте лишний маршрут:
sudo ip route del default dev vpn_vpn
3. Как узнать, через какой интерфейс идет трафик к серверу?
Используйте команду ip route get:
ip route get 192.168.0.241
В выводе вы должны увидеть dev vpn_vpn. Если указан ваш беспроводной или проводной физический адаптер (например, wlan0 или eth0), значит маршрутизация настроена неверно.
4. Почему DNS-имена серверов внутри VPN не разрешаются?
По умолчанию Linux использует глобальный DNS вашей основной сети. Чтобы использовать DNS-сервер из VPN-сети, добавьте его адрес (например, 192.168.0.3) в настройки резолвера вашей системы или укажите точечный маршрут до DNS-сервера через интерфейс vpn_vpn:
sudo ip route add 192.168.0.3 via 192.168.100.1 dev vpn_vpn
И пропишите его в /etc/resolv.conf или настройте DNS-фильтрацию в systemd-resolved.