Как поднять свой vpn сервер linux
Настраиваем L2TP VPN-сервер на платформе Linux (Debian / Ubuntu)
L2TP - один из наиболее популярных VPN-протоколов, обладающий, благодаря IPsec, отличной безопасностью, достаточной простотой и широкой поддержкой со стороны всех современных ОС. Для работы с ним не требуется установка дополнительного ПО и какие-либо сложные настройки. Мы уже рассматривали настройку L2TP VPN-сервера на платформах Windows и Mikrotik, а теперь расскажем, как настроить аналогичный сервер в Linux, дистрибутивах основанных на Debian или Ubuntu.
Перед тем, как приступать к работе над данной статьей мы внимательно изучили русскоязычный сегмент сети на предмет освещения данной темы и были весьма сильно удивлены. Большинство находящихся на первых страницах поиска ресурсов перепечатывает одну и ту же устаревшую инструкцию, даже в достаточно свежих публикациях. Но наш сайт с самого своего основания принципиально не занимается перепечатками (кроме переводов) и мы всегда проверяем на практике то, что рекомендуем нашим читателям. В этот раз нам пришлось потратить некоторое лишнее время на чтение документации, зато теперь мы можем предложить вам актуальный материал по настройке L2TP в Linux.
В качестве систем на тестовом стенде мы использовали Debian 10 и Ubuntu 20.04, но с некоторыми изменениями данная инструкция применима к любым версиям Linux со strongSwan версии 5.0 и выше.
Настраиваем IPsec
Именно с устаревшими настройками IPsec вам придется столкнуться в большинстве опубликованных инструкций. Нет, все даже будет работать, но вот безопасность такого решения окажется довольно низкой, не соответствующей современным требованиям. Поэтому, если у вас уже имеется настроенный экземпляр L2TP-сервера мы настоятельно советуем обновить его настройки.
Для работы с IPsec мы будем использовать пакет strongSwan, установим его:
Затем откроем файл настроек /etc/ipsec.conf и добавим в его конец следующие две секции:
Первая секция задает общие параметры: включает фрагментацию IKE и настраивает протокол обнаружения мертвых узлов (Dead Peer Detection, DPD), отвечающий за обнаружение неактивных клиентов. Вторая относится уже к L2TP-соединениям, указывая использовать транспортный режим IPsec, аутентификацию по общему ключу и задает используемые шифры. Приведенные значения являются рекомендуемыми и взяты из официальной документации strongSwan.
Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:
Где mySharedKey - общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. Для этого можно воспользоваться командой:
Результатом ее выполнения станет случайная строка длинной в 18 символов.
После внесения указанных настроек перезапустим службу:
В Ubuntu имя службы несколько иное - strongswan-starter, поэтому команда будет иметь вид:
Настраиваем L2TP
Для реализации функций L2TP-сервера предназначен пакет xl2tpd, для его установки выполните:
Затем откройте файл настроек /etc/xl2tpd/xl2tpd.conf, раскомментируйте и приведите к следующему виду опции:
Большая часть опций относится к настройке протокола L2TP и требует понимания его работы, поэтому мы на них останавливаться не будем. Разберем те опции, которые имеют существенное значение. Параметр auth file указывает на файл с данными для аутентификации, а pppoptfile - набор опций для PPP-соединения, которое используется внутри L2TP-туннеля, name - имя сервера, которое будет использоваться для поиска аутентификационных данных в файле chap-secrets.
Опции local ip и ip range отвечают за локальный адрес сервера в VPN-сети и диапазон адресов для выдачи удаленным клиентам. Здесь можно использовать два подхода: выдавать клиентам адреса из диапазона локальной сети офиса и включить ProxyARP, в этом случае настраивать маршрутизацию на клиентах не требуется, они будут как-бы включены в общую сеть офиса на канальном уровне (L2), либо выдавать адреса из непересекающегося диапазона и использовать маршрутизацию. Автоматизировать создание маршрутов для Windows-клиентов можно с использованием PowerShell.
Для настройки PPP перейдем в /etc/ppp и скопируем стандартный файл настроек:
Затем открываем файл /etc/ppp/options.xl2tpd на редактирование и приводим к следующему виду. Опции перечислены в порядке их следования, нужно раскомментировать их и указать нужное значение, если опция отсутствует, то ее следует добавить в конце файла.
Если вы будете использовать ProxyARP то дополнительно раскомментируйте опцию:
Также для Windows-клиентов можно передать настройку DNS-серверов, для этого добавьте опции:
Это позволит настроить первичный и альтернативный DNS-сервера в системе.
Сохраним все внесенные изменения и перезапустим службу L2TP-сервера:
Заключительным этапом настройки будет создание учетных записей для удаленных клиентов, для этого откроем файл /etc/ppp/chap-secrets и внесем следующую строку:
Первым указываем логин, затем имя службы, оно должно совпадать с тем, которое мы указали в опции name в xl2tpd.conf, после него идет пароль и IP-адрес клиента, символ * обозначает что можно присвоить любой адрес из выбранного диапазона. Если же требуется выдать клиенту постоянный адрес, то его следует указать явно, и он не должен входить в динамический диапазон указанный в ip range, например:
Для доступа к L2TP-серверу следует разрешить в брандмауэре входящие подключения к портам 500 UDP и 4500 UDP, подключение к 1701 UDP, вопреки распространенному заблуждению, разрешать не следует.
Сегодня я расскажу вам, как создать VPN на собственном сервере за 15 минут.
Чем хорош собственный VPN?
Давайте сначала разберемся, зачем нужен VPN. Простым языком, это технология, которая защищает ваш выход в интернет от взлома. С помощью VPN вы можете не бояться, что ваши данные получат злоумышленники, когда вы пользуетесь общественными сетями, а также его можно использовать при обходе блокировок вашего IP различными сайтами и сервисами.
Большинство известных VPN-сервисов имеют низкую скорость передачи данных и не самое стабильное подключение, потому лучше всего обзавестись собственным VPN. Далее я расскажу, как его создать и настроить. Говоря современно, поднять.
Мы будем отправлять трафик с устройств на собственный VPN-сервер с помощью программы OpenVPN, за счет чего скорость передачи данных будет ограничиваться только скоростью нашего интернета и сервера. Нам будет нужен VPS/VDS (виртуальный сервер), так как для работы репозитория OpenVPN подходят только такие типы серверов. VDS/VPS эмулирует работу реального физического сервера, у которого есть возможность установки своих операционных систем и ПО.
Теперь, когда разобрались с теорией, можем приступать к аренде VPS/VDS.
Арендуем сервер
Для стабильного соединения нам нужен сервер с хорошим интернетом. Я использую самую простую конфигурацию «Danny» с системой Ubuntu 20.04, арендованную на Timeweb.
Скорость интернета при данной конфигурации составляет 200 Мбит/с. Этого более чем достаточно для работы VPN на нем.
Для того чтобы взять такой же сервер, нужно зайти на главную страницу Timeweb, перейти во вкладку «VPS/VDS» и нажать кнопку «Заказать» под конфигурацией «Danny». Далее нужно заполнить все поля, выбрать желаемый период оплаты и систему Ubuntu 20.04, а затем нажать кнопку «Заказать».
Если вы хотите повысить конфиденциальность и избежать передачи данных в руки поставщика услуг VPN , то вы можете создать свой собственный VPN . Для этого вам не нужно быть программистом, но он немного технический и потребует некоторых усилий.
В конце концов, это будет того стоить, и вы получите безопасный и частный VPN, который вы сможете использовать в любую минуту.
Примечание. Этот процесс включает в себя настройку собственного экземпляра сервера в DigitalOcean , который, как и любая другая служба хостинга, будет взимать плату за использование полосы пропускания.
Быстрая навигация:
Шаг 1: Получить удаленный сервер, на котором работает Ubuntu
Это включает в себя создание сервера в облаке.
Существует множество услуг хостинга, из которых вы можете выбирать, но наиболее удобным для пользователей является DigitalOcean , и он также является самым доступным.
Чтобы помочь создать экземпляр вашего сервера, у них есть фантастическое руководство по настройке вашего собственного сервера в Ubuntu 16.04 . Как только ваш экземпляр сервера будет завершен, вы будете готовы к работе.
Шаг 2: Установите OpenVPN
Теперь, когда ваш сервер запущен и нам нужно установить на него OpenVPN . Первое, что вам нужно сделать, это войти на сервер, указав свои учетные данные через командную строку.
После этого выполните команды ниже. Вы можете напечатать или скопировать / вставить их .
$ sudo apt-get update
$ sudo apt-get установить openvpn easy-rsa
Теперь вы установили OpenVPN и easy-rsa, пакет, необходимый для шага 3.
Шаг 3. Настройте каталог центра сертификации
Доверенные сертификаты важны, поскольку они обеспечивают шифрование исходящего трафика. Обычно эти сертификаты поступают из центра сертификации (ЦС) , но, поскольку мы работаем и управляем собственным сервером, мы можем настроить простой каталог ЦС на нашем сервере.
Выполните команду ниже:
Теперь перейдите к папке, которую мы только что создали, введя следующую команду:
Шаг 4. Настройка центра сертификации
Теперь нам нужно отредактировать наш CA. Чтобы открыть текстовый редактор, отображающий файл vars, введите:
Теперь найдите следующие строки:
Отредактируйте цитируемые строки, чтобы отразить ваши данные. Убедитесь, что вы не оставили ни одного из них пустым.
После этого прокрутите вниз, чтобы найти строку KEY_NAME . Отредактируйте его так, чтобы оно соответствовало приведенному ниже:
export KEY_NAME = ”сервер”
Теперь вы можете сохранить и закрыть файл.
Шаг 5: Создайте центр сертификации
Теперь, когда у нас есть правильная информация, мы можем пойти дальше и создать центр сертификации. Убедитесь, что вы все еще находитесь в каталоге CA.
Введите команду ниже:
Если процесс выполнен правильно, на экране должно появиться следующее:
ПРИМЕЧАНИЕ. Если вы запустите ./clean-all, я буду выполнять команду rm -rf для / home / sammy / openvpn-ca / keys
Очистите среду, введя следующее:
Теперь создайте корневой CA:
Вы должны получить серию запросов, поскольку ваш сервер выполняет только что предоставленные инструкции. Просто нажмите enterна каждый из них, пока процесс не завершится.
Шаг 6: Создание файлов шифрования сервера
Теперь, когда мы создали наш центр сертификации, мы можем начать генерировать фактические ключи шифрования . Первое, что нам нужно сделать, это создать сертификат сервера OpenVPN вместе с его парой ключей:
Сервер предложит некоторые значения. Примите их все, набрав « у ». Обязательно сделайте то же самое, когда вас спросят о создании сертификата.
Далее мы создадим несколько других файлов, которые OpenVPN должен использовать. Используйте следующую команду:
Это может занять некоторое время, но подождите, пока это не будет сделано. После этого введите следующую команду, чтобы создать подпись для усиления процесса проверки.
$ openvpn –genkey –secret keys / ta.key
Шаг 7: Создание сертификата клиента
Здесь мы создадим пару сертификатов и ключей для подключения вашего компьютера с Linux. Используйте следующие команды:
/ openvpn-ca
$ source vars
$ ./build-key client1
Используйте предложенные значения по умолчанию, нажав enterна подсказки.
Шаг 8: Настройте OpenVPN
Теперь, когда у нас есть все необходимые сертификаты и пары ключей, мы наконец можем приступить к настройке OpenVPN.
Первое, что нам нужно сделать, это переместить некоторые файлы, которые мы только что создали, в папку «openvpn» :
/ openvpn-ca / keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem / etc / openvpn
Теперь мы добавим пример файла конфигурации, чтобы мы могли открыть и отредактировать его самостоятельно:
$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
После распаковки введите следующее, чтобы открыть файл конфигурации:
$ sudo nano /etc/openvpn/server.conf
С server.conf файла , открытого в редакторе нано , обратите внимание на строку ниже:
Раскомментируйте строку, удалив точку с запятой в начале.
В строке прямо под ней добавьте следующее :
направление клавиш 0
Теперь прокрутите, чтобы найти раздел, заполненный шифрами (ключами). Здесь нам нужно выбрать силу безопасности, которая нам нужна. Выберите 128 бит AES , найдя строку ниже и раскомментировав ее (удалив точку с запятой).
Чуть ниже этой строки добавьте следующее:
Далее раскомментируйте настройки пользователя и группы. Это строки ниже:
пользователь nobody
группа nogroup
Для этого нам нужно раскомментировать перечисленные ниже директивы. Найдите их и удалите точку с запятой.
нажмите «redirect-gateway def1 bypass-dhcp»
Прямо под этой строкой найдите раздел с dhcp-option . Снова, раскомментируйте две строки
нажмите «dhcp-опция DNS 208.67.222.222»
нажмите «dhcp-опция DNS 208.67.220.220»
Эти настройки заставят клиентов перенастроить свои настройки DNS, чтобы всегда использовать VPN-туннель в качестве шлюза по умолчанию.
Настройте порт и протокол
После этого измените протокол с UDP на TCP
После этого сохраните и закройте файл.
Шаг 9: Настройка параметров сети
Чтобы убедиться, что OpenVPN правильно маршрутизирует трафик, нам нужно внести некоторые изменения.
Во-первых, разрешить пересылку IP . Это можно сделать, изменив файл /etc/sysctl.conf . Открой это.
$ sudo nano /etc/sysctl.conf
Сохраните и закройте файл.
Теперь запустите эту команду, чтобы скорректировать значения.
Теперь нам нужно настроить брандмауэр нашего сервера, чтобы он мог правильно управлять трафиком. Давайте начнем с поиска общедоступного сетевого интерфейса нашего сервера.
$ ip route | grep default
В какой-то момент полученная строка будет содержать слово « dev ». Далее следует имя вашего интерфейса. Например, в строке ниже w1p11s0 – это имя интерфейса.
по умолчанию через 203.0.113.1 dev wlp11s0 proto static metric 600
Теперь нам нужно добавить указанное выше имя в соответствующее место, отредактировав файл правил . Введите команду ниже:
Ищите блок текста, который начинается со следующей фразы, которая была закомментирована:
Ниже вы увидите строку, которая начинается с « -A POSTROUTING ». Здесь вам нужно добавить имя интерфейса. Замените ХХХХ этим.
-A POSTROUTING -s 10.8.0.0/8 -o XXXX -j MASQUERADE
Теперь сохраните и закройте файл.
$ sudo nano / etc / default / ufw
После этого найдите строку с пометкой « DEFAULT_FORWARD_POLICY ». Измените «DROP» на « ACCEPT ». После этого это должно выглядеть следующим образом:
Сохраните и закройте файл.
Наконец, настройте параметры брандмауэра, чтобы разрешить трафик в OpenVPN . Используйте команды ниже:
$ sudo ufw allow 443 / tcp
$ sudo ufw allow OpenSSH
Чтобы загрузить изменения , отключите, а затем снова включите брандмауэр.
$ sudo uwf отключить
$ sudo uwf enable
Ваш сервер теперь настроен для обработки вашего VPN трафика. Вы почти там!
Шаг 10: Запуск службы OpenVPN
Поскольку вы уже настроили основные конфигурации, теперь вы можете запустить OpenVPN, чтобы ваш сервер заработал.
$ sudo systemctl start openvpn @ server
Чтобы OpenVPN всегда запускался при каждой загрузке сервера, введите следующую команду:
$ sudo systemctl включить openvpn @ server
Шаг 11: Конфигурации клиента
Нам нужно подготовить сервер для приема любых устройств, которые вы хотите подключить. Сначала нам нужно создать каталог для хранения файлов, связанных с клиентом, а затем изменить разрешения для его блокировки.
/ client-configs / files
$ chmod 700
Теперь мы скопируем пример файла конфигурации и затем отредактируем его:
Откройте файл в текстовом редакторе:
Прокрутите, чтобы найти строку, начинающуюся с директивы « remote ». Отредактируйте его, чтобы отразить порт 443, который мы используем:
удаленный сервер_IP_адрес 443
Ниже измените строку с надписью « proto » с UDP на TCP
Удалите точки с запятой из строк «user» и «group», чтобы раскомментировать их:
пользователь nobody
группа nogroup
Найдите строки ca, cert и key и закомментируйте их, добавив хеш в начале. Они должны выглядеть так:
Измените настройки « шифр » и « аутентификация », чтобы они соответствовали тем, которые мы установили выше. Они должны выглядеть так:
Теперь добавьте строку в любом месте файла и введите:
Наконец, скопируйте и вставьте следующие закомментированные строки в конец файла:
Сохраните изменения и выйдите из редактора.
Последнее, что нам нужно сделать, – это создать скрипт , который скомпилирует все, что мы сделали. Начните с создания файла в каталоге
/ client-configs с именем « make_config.sh », затем откройте его с помощью nano. Вставьте следующий код в скрипт:
/ openvpn-ca / keys
OUTPUT_DIR =
/ client-configs / files
BASE_CONFIG =
Сохраните файл и выйдите. Теперь сделайте его исполняемым с помощью этой команды:
Шаг 12. Настройте VPN на Linux
Чтобы использовать только что настроенную VPN, установите OpenVPN на свой компьютер с помощью следующих команд:
$ sudo apt-get update
$ sudo apt-get установить openvpn
Теперь нам нужно открыть и отредактировать файл конфигурации, который мы только что скачали:
Раскомментируйте следующие три строки:
скрипт-безопасность 2
вверх / etc / openvpn / update-resolv-conf
вниз / etc / openvpn / update-resolv-conf
Сохраните и закройте файл. Теперь вы настроили свой компьютер Linux для подключения к VPN.
Как уже писалось на хабре, буквально в начале января сего года под лицензию GPL2 перешел очень интересный и, в своем роде, уникальный проект — SoftEther VPN. Написали его студенты японского University of Tsukuba. Данный продукт позиционирует себя как VPN-сервер с поддержкой огромного количества туннельных протоколов: L2TP, L2TP/IPsec, L2TPv3/IPsec, MS-SSTP, EtherIP/IPsec, OpenVPN, SSL-VPN (собственной разработки), L2VPN, а также такие хитрые штуки как туннелирование через ICMP и DNS. Поддерживает туннелирование как на третьем, так и на втором уровне, умеет VLAN и IPv6. Работает практически на всех известных платформах (даже ARM и MIPS) и к тому же не требует рутовых прав. С полной спецификацией можно ознакомиться вот тут. Если честно, когда я увидел список возможностей этой проги — я просто не поверил своим глазам и подумал: «Если ЭТО работает, то я ДОЛЖЕН это потестить!»
Эта статья будет описывать процесс установки и настройки SoftEther VPN Server под Линукс. В следующей статье постараюсь нарисовать красивые сравнительные графики производительности.
Данная софтина обладает на редкость приятным интерфейсом под Винду, однако под Линуксом вся настройка осуществляется через CLI. Мануал безусловно хорош, но мне например показался чересчур подробным, и к тому же с перекосом в сторону графического интерфейса и излишне красочных японских картинок. Поэтому решил выложить основные команды CLI для тех, кому лень лопатить много английских букв.
Для начала — установим это чудо. У меня под рукой был VPS с 64-битным Дебиан 7 на борту, поэтому выбор был очевиден. Сразу предупреждаю: устанавливать нужно только с GitHub'a (на текущий момент версия релиза 4.04 build 9412)! На оффициальном сайте можно скачать исходники под разные платформы, однако засада в том, что makefile'ы там сгенерированы каким-то садистки-западлистским способом, и на выходе вы получаете всего два файла — сам бинарник сервера и его CLI-шка. Никакого копирования в /usr/bin/ и прочих цивилизованных вещей там не прописано. В отличие от этого, makefile на Гитхабе ведет себя гораздо более дружелюбно (хотя инит-скрипт все равно не делает, зараза).
Прежде чем поставить прогу, рекомендую сходить сюда и узнать, что ей нужно для установки. Мне, например, понадобилось поставить ряд библиотек (потом их можно снести):
В процессе установщик попросит вас прочитать Лицензионное соглашение, а также указать вашу платформу и разрядность ОС. Кстати, прогу он поставит по-любому в /usr/vpnserver/, а бинарники в /usr/bin/, имейте ввиду. Если путь установки не нравится, это можно руками поменять в makefile'е. В конце установки он скажет:
— Installation completed successfully.
Execute 'vpnserver start' to run the SoftEther VPN Server background service.
Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.
Execute 'vpnclient start' to run the SoftEther VPN Client background service.
Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure VPN Server, VPN Bridge or VPN Client.
--------------------------------------------------------------------
Отсюда можно логически понять, как это волшебство запускается и останавливается. Можно оставить и так, а можно взять с офф. сайта простенький init-скрипт, который будет более привычным нам способом делать то же самое.
Итак, VPN-сервер установлен и его можно запустить:
Приступаем к конфигурированию. Вообще, мануал предлагает нам два способа это сделать: через его собственную командную строку vpncmd или через конфигурационный файл vpn_server.config, причем огромное предпочтение отдается первому способу. Операции с конфигурационным файлом производитель считает рискованным занятием и всячески пытается нас от этого отговорить. Дело в том, что сервер непрерывно читает этот файл и любые изменения в нем мгновенно отражаются на работе сервера. Единственный случай, когда настройка из конфиг-файла оправдана — это когда VPN-сервер выключен. Не знаю, зачем так сделано, но автору, в любом случае, виднее. Да и вообще, у проги хорошая CLI, после работы с которой о существовании конфиг-файла просто забываешь за ненадобностью.
Итак, сразу после запуска VPN-сервер уже работает и принимает подключения на порты TCP 443 (SSL VPN), 992, 1194 (OpenVPN) и 5555 (номера портов можно поменять командами ListenerCreate и ListenerDelete), однако чтобы начать использовать его необходимо сделать ряд простых настроек. Заходим в CLI командой vpncmd:
By using vpncmd program, the following can be achieved.
1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
Выбор 1 перенесет нас в режим редактирования сервера, выбор 2 — в режим редактирования свойств клиента, а выбор 3 — режим тестирования и создания сертификатов сервера. Выбираем 1, сервер предложит ввести айпи адрес сервера, к которому мы хотим подключиться (Hostname of IP Address of Destination:), просто нажимаем Enter, т.к. собираемся редактировать локальный сервер. В третий и последний раз прога спросит нас имя виртуального хаба (Specify Virtual Hub Name:), с которым мы будем работать. Мы пока что не собираемся работать с виртуальными хабами, поэтому снова нажимаем Enter и попадаем в командную строку самого сервера.
Необходимо пояснить, что такое виртуальные хабы в терминологии разработчика. Виртуальный хаб — это некая довольно самостоятельная инстанция VPN-сервера, обладающая собственным набором настроек виртуальных интерфейсов, политик безопасности и протоколов VPN. Всего можно создать до 4096 виртуальных хабов, при этом они никак не будут пересекаться друг с другом ни на 2-ом, ни на 3-ем уровне — то есть будут полностью изолированы друг от друга. Каждый виртуальный хаб работает со своим набором пользователей и ничего не знает про пользователей другого виртуального хаба, хоть они и находятся на одном физическом сервере. С другой стороны, если мы захотим, мы можем настроить их взаимодействие друг с другом, в терминологии автора это называется Virtual bridge/router. Таким образом, виртуальный хаб — это и есть то, с чем мы будем работать после указания определенных глобальных настроек сервера.
После входа в vpncmd перед нами возникнет приглашение:
Connection has been established with VPN Server "localhost" (port 443).
You have administrator privileges for the entire VPN Server.
Можно ввести help и почитать список команд.Первое, что мы должны сделать — это задать рутовый пароль сервера. Делается это командой ServerPasswordSet. Далее, как я уже писал командой KeepDisable отключаем keepalive-пакеты.
Далее, создаем виртуальный хаб командой HubCreate <имя виртуального хаба>, например
VPN Server>hubcreate vpn
HubCreate command - Create New Virtual Hub
Please enter the password. To cancel press the Ctrl+D key.
Можно задать админский пароль для нового хаба, тогда можно будет делегировать администрирование этого хаба другому человеку. А можно для простоты нажать Enter и не делать этого (для этого в дальнейшем есть команда SetHubPassword). После создания хаба мы должны перейти в режим администрирования этого хаба командой Hub vpn. Посмотреть статус хаба можно командой StatusGet. Не буду приводить здесь вывод этой команды, т.к. он длинный и довольно понятный. Хаб можно выключить командой Offline и вернуть обратно командой Online.
Мне понравилась команда SetEnumDeny. Дело в том, что когда в VPN-клиенте вводишь адрес VPN-сервера, он сразу же сдает тебе имена всех виртуальных хабов, зарегенных на сервере, как на картинке. Эта команда запрещает выводить имя данного хаба в списке. Типа небольшой, но бонус к безопасности.
Вот в принципе и все, минимальная установка завершена и мы можем прицепиться к нашему серверу, указав его IP-адрес и любой из портов списка ListenerList. Автор рекомендует порт 5555, поскольку данный порт не требует рутовых прав в системе. Окно VPN клиента я уже приводил выше, там все интуитивно понятно и очень красиво. Аутентификация проходит и устанавливается VPN-туннель. Однако, в таком виде пользы от туннеля мало, т.к. он позволяет обращаться только к самому серверу и больше никуда.
Допустим, наша задача более широка, и мы хотим использовать VPN-сервер для доступа в корпоративную сеть. Для этого нам понадобиться настроить NAT. Делается это довольно просто командой SecureNATEnable. Автоматом вместе с NAT включается и DHCP.
Вообще, SecureNAT — это довольно интересная технология от авторов SoftEtherVPN. Как мы знаем, трансляция сетевых адресов в *NIX-системах осуществляется в ядре, соответственно для настройки NAT нужно иметь права суперпользователя. Создатели SoftEtherVPN решили, что это слишком излишне и написали свой собственный кастомный стек TCP/IP для того, чтобы фильтрация и натирование осуществлялось в userspace. Прикольная задумка, не знаю стоило ли оно того, но работает — это факт!
Сменить адрес интерфейса SecureNAT'a можно командой SecureNatHostSet (по умолчанию 192.168.30.1/24), а диапазон выдаваемых адресов и другие опции DHCP (например, основной шлюз и DNS-сервера) — командой DhcpSet. Не правда ли, дружелюбная CLI? Например если ввести «secure?» и нажать Enter, то выведется список возможных автодополнений:
VPN Server/vpn>secure?
"secure": The command-name is ambiguous.
The specified command name matches the following multiple commands.
SecureNatDisable - Disable the Virtual NAT and DHCP Server Function (SecureNat Function)
SecureNatEnable - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
SecureNatHostGet - Get Network Interface Setting of Virtual Host of SecureNAT Function
SecureNatHostSet - Change Network Interface Setting of Virtual Host of SecureNAT Function
SecureNatStatusGet - Get the Operating Status of the Virtual NAT and DHCP Server Function (SecureNat Function)
Please re-specify the command name more strictly.
По умолчанию никакая фильтрация пакетов не применяется, т.е. впн-клиенты могут неограниченно ходить в корпоративную подсеть и пользоваться корпоративным Интернетом, если таковой имеется. При желании можно добавить правила файрволла командой AccessAdd. В качестве критериев файрволла можно указать имя пользователя, MAC и IP адреса источника и назначения, порты, протоколы и флаги TCP. И самое главное, что это работает, я проверял! Учтите еще, что правила фильтрации разных виртуальных хабов никак не влияют друг на друга, что позволяет гибко управлять доступом к корпоративной среде.
Поговорим о протоколах VPN. Я протестил L2TP/IPsec и OpenVPN. Настройка двух, казалось бы, таких разных протоколов оказалась довольно простой. OpenVPN включен изначально на порту 1194 UDP, но чтобы оно заработало нужно в режиме глобального сервера (команда Hub без параметров) ввести IPsecEnable, после чего ответить на ряд вопросов на предмет того, хотим ли мы включить голый L2TP, шифрованный L2TP/IPsec, а также L2TPv3/IPsec. Самые главные вопросы — это Pre-shared key (PSK) для IPsec и Default Hub. С PSK все понятно, это ключ, который необходимо ввести на клиентском устройстве, а вот про Default Hub расскажу поподробнее.
Дело в том, что тот же OpenVPN работает не через IPsec, но наследует политику учетных записей из IPsec. Поэтому при попытке коннекта по протоколу OpenVPN будет запрошено имя пользователя и пароль. Имя пользователя обязательно нужно вводить в формате «пользователь@хаб», но если мы указываем, какой хаб использовать по умолчанию, то "@хаб" можно опустить.
Сгенерировать конфиг-файл для OpenVPN можно командой OpenVpnMakeConfig, после чего указать местоположение, куда сохранить сгенереный файл. Этот файл можно тут же скормить OpenVPN клиенту и коннект пойдет. Файл предоставляется сразу в двух вариантах — Layer2VPN и Layer3VPN, то бишь VPN-сервер как свич, и VPN-сервер как роутер. И то, и другое прекрасно работает. Удобно!
Настройка L2TP/IPsec оказалась вообще тривиальной: на сервере после команды IPsecEnable ничего менять уже не надо, а в настройках например виндового встроенного VPN-клиента нужно указать протокол «L2TP IPsec VPN», в дополнительных параметрах указать предварительный ключ (PSK), который мы уже устанавливали, ну и, само собой, ввести учетные данные в формате, о котором я упоминал выше.
Аналогичным образом все настраивается на Андроиде. Было проверено на 4.2.1, все работает с использованием только стандартных инструментов.
Вывод: SoftEtherVPN — очень мощное и, самое главное, удобное средство построения VPN-туннелей. Конечно, я протестировал далеко не все возможности, но в большинстве случаев хватает и тех, что я написал. В ближайшем будущем постараюсь выложить сравнительные тесты производительности, а также тесты таких смешных штук как VPN over ICMP и DNS. С протоколами SSL VPN и MS SSTP пока связываться не хочу, т.к. неохота возиться с сертификатами, к тому же надо еще посмотреть на такие фичи проги, как Load Balancing aka кластеризация, отказоустойчивость, авторизация из RADIUS и AD и Layer2 VPN, включая VLAN-транкинг!
Так что, мне кажется, софтина стоит, как минимум, того, чтобы приглядеться к ней повнимательнее. Производитель позиционирует свой продукт, как во всем превосходящий OpenVPN, даже обещает throughput под гигабит. В общем, надо тестить! На данном этапе мне эта штукенция очень даже нравится.
Читайте также: