SoftEther VPN Server - установка и настройка.

softether vpn server linux ubuntu centos

SoftEther VPN появился в далеком 2003 году в университете японского города Цукуба. Проект был разработан одним из студентов университета Daiyu Nobori, после того как в сети университетского кампуса перестал работать PPTP, хотя по другим данным, это был его дипломный проект.

Время шло, проект развивался, и был выкуплен японской корпорацией Mitsubishi, которая подписала десятилетний контракт на выпуск и распространение программы. Однажды SoftEther запретили, правительство Японии посчитало его вредоносной программой.

По окончанию действия контракта с Mitsubishi, в январе 2014 года SoftEther начинает распространяться под свободной GPLv2 лицензией, что делает его доступным для всех желающих.

SoftEther поддерживает почти все туннельные протоколы (L2TP, L2TP/IPsec, MS-SSTP, EtherIP и т.д.). Также у него есть собственный SSL-VPN протокол неотличимый от обычного HTTPS трафика, тут даже системы DPI (Deep Packet Inspection) не помогают, поэтому SoftEther очень популярен в Китае.

SoftEther пробивается через файрволы и NAT механизмы применяя технологии TCP NAT traversal и TCP hole punching, при этом не забывая маскировать трафик. Данные могут передаваться не только с помощью TCP/UDP протоколов, а также с помощью имитации ICMP (пинг) и DNS запросов.

SoftEther не требователен к типам виртуализации, в отличии от OpenVPN, которому для работы требуется наличие TUN/TAP устройств в ядре. Поэтому SoftEther работает на любых VPS/VDS и это еще один плюс в копилку.

Клиентское и серверное ПО существует практически для всех распространенных операционных систем. Процесс компиляции исходного кода при установке в UNIX-системах минимизирован настолько, что с ним легко справится любой пользователь.

ПО SoftEther состоит из нескольких компонентов:

  • Server - самый полный набор, включает в себя Server, Bridge и VPN Server Manager (в версии для Windows).
  • Bridge - позволяет подключать локальные сети к VPN-тоннелям.
  • VPN Server Manager - утилита с графическим интерфейсом в системе Windows. Используется для администрирования локальных и удаленных VPN-серверов. Является самым удобным средством администрирования и управления. Устанавливается отдельно.
  • vpncmd - утилита администрирования командной строки, как в  терминалах UNIX-систем, так и в командной строке Windows. В UNIX-системах ставится вместе с сервером. В Windows идет в комплекте с VPN Server Manager.
  • Client - клиент для подключения к сети VPN.

Установка SoftEther VPN Server

Установим утилиты для компилирования.

Переходим в каталог /usr/local.

Переходим на сайт SoftEther, выбираем нужное и копируем полученную ссылку.

softether vpn server linux

Скачиваем исходники SoftEther.

Распаковываем скачанный архив.

Переходим в каталог vpnserver.

Компилируем и устанавливаем.

Во время установки будет задан ряд вопросов, отвечать следует положительно.

Находясь внутри каталога vpnserver зададим права доступа для файлов.

Проведем проверку системы на совместимость с SoftEther. Чтобы провести проверку нужно попасть в консоль управления vpncmd.

"All checks passed" означает что тесты пройдены и Softether может работать в системе. Для выхода из консоли используют команды: exit, quit или сочетание клавиш Ctrl+C.

Настройка SoftEther в консоли управления

SoftEther установлен и может работать в системе. Теперь нужно провести начальную настройку, а чтобы провести настройку нужно запустить SoftEther.

Выполняем команду ./vpnserver start находясь внутри каталога /usr/local/vpnserver.

Входим в консоль управления.

Vpncmd позволяет администрировать не только локальные, но и удаленные сервера. В нашем случае нужно настроить локальный сервер, поэтому в строке Hostname of IP Address of Destination вводим localhost и нажимаем Enter.

По умолчанию соединение устанавливается на 443 порту. Если вдруг 443 порт занят другой программой, такое бывает если SoftEther установлен не на чистую систему, то войти в консоль не получится.

В таком случае к значению localhost через двоеточие добавляют нужный порт. Кроме 443-го порта SoftEther слушает еще три: 992, 1194 и 5555. Можно указать любой из них.

Нам будет предложено ввести имя виртуального хаба, но поскольку он еще не создан, то просто нажимаем Enter и оказываемся в консоли управления сервером.

Управление сервером осуществляется посредством определенных команд (205 штук). Список команд можно просмотреть через --help. Команды требовательны к регистру.

Установка пароля администратора

Первым делом установим пароль администратора (ServerPasswordSet).

Создание виртуального хаба

Виртуальный хаб представляет собой подобие сервера со своими настройками, протоколами VPN, своими пользователями и администраторами, а также со своими настройками безопасности. На одном сервере может быть создано до 4096 виртуальных хабов. Хабы не контактируют друг с другом, за исключением случаев когда их специально объединяют в мосты.

По умолчанию на сервере уже есть дефолтный хаб (DEFAULT), удалим его (HubDelete) и создадим свой. Во время выполнения будет запрошено имя хаба для удаления.

Создадим новый виртуальный хаб (HubCreate). Зададим имя нового хаба и пароль.

Список доступных хабов можно просмотреть командой HubList. Команда показывает не только хабы, но и их статистику.

Настроим созданный хаб (Hub). Через пробел указываем имя хаба для настройки.

Консоль управления хабом.

Создадим пользователя (UserCreate). Группу, полное имя и описание заполняем по желанию (можно пропустить нажав Enter).

Зададим пароль пользователя (UserPasswordSet).

Создание локального моста

Поскольку Local Bridge работает совместно с TAP устройством, то данный шаг могут пропустить те пользователи, чьи VPS/VDS не поддерживают драйвера TUN/TAP. Такие пользователи в дальнейшем будут использовать режим SecureNAT.

Использование SecureNAT рассмотрим немного позже, а пока создадим Local Bridge, те кто пропускает переходят сразу к автозапуску.

Для создания Local Bridge используется команда BridgeCreate, синтаксис выглядит следующим образом.

Например так.

Список и статус мостов можно просмотреть командой Bridgelist. Если в статусе висит значение Operating, это значит что все в порядке и мост готов к работе.

После того как Local Bridge создан, в системе должен появиться интерфейс tap_vpn.

Как можно видеть tap интерфейс пока еще не имеет IPv4 адреса, это нормально, адрес зададим позже.

Если CentOS ругается на отсутствие ifconfig, то нужно поставить. В Debian/Ubuntu пакет присутствует по умолчанию.

Автозапуск VPN Server

Запускать сервер вручную неудобно. Напишем скрипт для автозапуска сервера.

Создаем скрипт (vpnserver) в каталоге /etc/init.d.

Скрипт автозапуска для CentOS

Содержимое скрипта для CentOS.

Права доступа на файл скрипта.

Добавим скрипт в автозапуск.

Запустим vpnserver с помощью systemctl.

Проверим как работает.

Скрипт автозапуска для Ubuntu/Debian

Содержимое скрипта для Ubuntu/Debian.

Права доступа на файл скрипта.

Добавим скрипт в автозапуск.

Запустим vpnserver с помощью systemctl.

Проверим как работает.

Теперь vpnserver будет стартовать самостоятельно после включения или перезагрузки системы и управляться стандартными systemctl-командами.

Сетевые режимы SoftEther VPN Server

У SoftEther есть два механизма передачи трафика: SecureNAT и Local Bridge.

SecureNAT

SecureNAT - собственная технология SoftEther, создающая закрытую сеть и состоящая из двух частей: виртуального NAT и виртуального DHCP-сервера.

securenat softether vpn server linuxSecureNAT не требователен к типу виртуализации VPS/VDS серверов, так как работает без TUN/TAP. Для SecureNAT не нужна настройка iptables или другого фаервола, кроме открытия порта на котором будут приниматься соединения от клиентов.

Маршрутизация трафика осуществляется не затрагивая ядра системы. Все процессы полностью виртуализированы. Отсюда возникают минусы режима, повышенная нагрузка на процессор и потеря в скорости, если сравнивать с Local Bridge.

Пользователю нужно только включить режим, подключить клиент, после чего можно начинать пользоваться VPN.

Активация режима SecureNAT

Чтобы включить режим SecureNAT перейдем в консоль управления хабом и выполним команду SecureNatEnable.

Узнать текущий статус можно командой SecureNatStatusGet.

Команда показывает количество сессий, подключенных клиентов и текущий статус SecureNAT. Значения "Yes" говорят что режим SecureNAT сейчас активен.

Как я уже писал выше, SecureNAT не требует настройки фаервола для маршрутизации трафика. Достаточно просто открыть порт, на котором vpnserver будет принимать входящие соединения от клиентов.

Добавим правило iptables открывающее 443 порт (или любой другой).

Можно устанавливать клиент, подключаться к серверу, и начинать использовать VPN или немного почитать про сетевые настройки SecureNAT.

Обзор сетевых настроек SecureNAT

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

Текущие сетевые настройки можно узнать командой SecureNatHostGet.

По умолчанию SecureNAT использует подсеть 192.168.30.0/24.

Данная подсеть не относится только к SecureNAT, она также используется и в режиме Local Bridge. Это собственная подсеть виртуального хаба. Так что если возникнет необходимость в изменении подсети для моста, то это делается здесь.

Адрес подсети можно изменить командой SecureNatHostSet.

Теперь мы используем подсеть 192.168.100.0/24.

Клиент подключающийся к хабу получает ip-адрес из диапазона его подсети. Раздачей адресов управляет виртуальный DHCP-сервер. Просмотреть текущие настройки DHCP можно командой DhcpGet.

Изменим текущие настройки под новую 192.168.100.0/24 подсеть (DhcpSet).

Я задал диапазон выдаваемых адресов с 192.168.100.10 по 192.168.100.100, маску подсети, шлюз и DNS-сервера. Lease Limit (срок аренды) оставил по умолчанию.

Новые настройки DHCP теперь выглядят так.

Если сейчас подключиться к VPN, открыть командную строку Windows и выполнить команду ipconfig, то можно увидеть следующую картину.

Компьютер теперь имеет адрес 192.168.100.10, шлюзом выступает 192.168.100.1, сеть называется "myvpn". Как и было задано при настройке.

DHCP-сервер можно отключить, команда DhcpDisable.

Если забыть включить DHCP, то адреса клиентам выдаваться не будут, но клиент все равно будет подключен к серверу. При этом трафик будет идти с вашего основного адреса. Невнимательный пользователь будет уверен что скрывает свой IP, но на самом деле это не так. По умолчанию DHCP включен всегда и лучше его не трогать.

Отключение SecureNAT

Для выключения SecureNAT команда SecureNatDisable.

Отключенный SecureNAT.

Local Bridge

Local Bridge полностью отличается от SecureNAT. Этому режиму требуется поддержка TUN/TAP устройств, поэтому его можно использовать не на всех VPS/VDS, а только на имеющих возможность их загрузки. Кроме того, вся настройка Local Bridge, от начала и до конца, делается ручками.

Плюсами Local Bridge являются более высокая скорость, надежность и безопасность.

Local Bridge соединяет хаб с физическим или tap-адаптером. Маршрутизация трафика происходит в ядре системы с помощью netfilter/iptables.

DHCP для Local Bridge

Local Bridge не имеет своего DHCP сервера, поэтому приходится устанавливать еще и DHCP сервера. В CentOS устанавливают dhcp, в Ubuntu/Debian устанавливают isc-dhcp-server.

Установим dhcp для CentOS.

Установим isc-dhcp-server для Ubuntu/Debian.

Отредактируем файл настроек dhcp-сервера, он одинаков везде.

Содержимое файла dhcpd.conf.

Если вы прочитали про сетевые настройки SecureNAT, то скорее всего поняли откуда я взял значения для dhcp-сервера, так как подсеть одинакова для обоих режимов.

Исходя из адреса дефолтной подсети (192.168.30.0/24), я задал следующие значения:

  • domain-name - имя сети, может быть любым.
  • domain-name-servers - адреса DNS, можно указать адрес шлюза или прямой адрес предпочитаемого сервера. (192.168.30.1)
  • default-lease-time - срок аренды ip-адреса клиентом, если клиент самостоятельно не указывает срок аренды адреса.
  • max-lease-time - максимальный срок аренды адреса клиентом.
  • subnet - адрес подсети (192.168.30.0)
  • netmask - маска подсети (255.255.255.0)
  • range - диапазон адресов для выдачи (от 192.168.30.10 и до 192.168.30.200)
  • option routers - шлюз (192.168.30.1)

Значения "lease-time" задаются в секундах, я задал 12 и 24 часа соответственно. Если выставить маленькие значения, то по истечению срока соединение будет разрываться, что не есть хорошо при длительной работе.

Сделаем интерфейс tap_vpn шлюзом подсети, назначив ему адрес 192.168.30.1

Проверим интерфейс.

Запустим dhcp-сервер.

Проверим как работает в CentOS (systemctl status dhcpd)

Проверим как работает в Debian/Ubuntu (systemctl status isc-dhcp-server)

Автозапуск DHCP при старте vpnserver

Сделаем загрузку DHCP сервера зависящей от загрузки vpnserver. Во первых, чтобы не назначать адрес tap-интерфейса вручную, а, во вторых, чтобы не запускать вручную dhcp-сервер после каждой перезагрузки или включения машины.

Для этого добавим две команды непосредственно в скрипт автозапуска vpnserver.

Отредактируем скрипт /etc/init.d/vpnserver.

Приводим содержимое скрипта к следующему виду в CentOS.

Приводим содержимое скрипта к следующему виду в Ubuntu/Debian.

Выполняем systemctl daemon-reload, чтобы принять изменения в скриптах.

Перезагружаем vpnserver или систему.

Сразу после загрузки/перезагрузки проверяем интерфейс и dhcp.

Форвардинг пакетов и iptables

Включим форвардинг пакетов и добавим правила для маршрутизации трафика.

Форвардинг пакетов.

Правила iptables.

Если все сделано правильно, можно подключаться и начинать пользоваться собственным VPN. Установка и настройка на этом завершены.