Хостинг

Настройка SoftEther VPN Client на Linux в CLI: пошаговое руководство с решением проблем маршрутизации

Настройка SoftEther VPN Client на Linux в CLI: пошаговое руководство с решением проблем маршрутизации

Настройка 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.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →