Защита данных сегодня волнует все больше людей. Тенденции не только не радуют, они просто ужасают — следить за нами начинают даже телевизоры. Самый верный способ — всегда предполагать, что нас кто-то слушает, и превентивно обороняться. Можно поднимать SSH-туннели и SOCKS’ифицировать через них нужный трафик, можно везде, где получится, использовать HTTPS, устанавливая для этого плагины. Однако наиболее подходящей для этого технологией был, есть и еще долгое время будет VPN.
Где взять VPN, чтобы безопасно подключаться с различных устройств «на ходу» и в публичных местах? Простой и быстрый способ — воспользоваться одним из многочисленных сервисов. Но с точки зрения безопасности этот метод вызывает вопросы. Добровольно пускать свой трафик через «дядю», да еще и приплачивать за это не слишком секурно. Да и с анонимностью не так все хорошо, крупный сервис сдаст тебя с потрохами по первому запросу, достаточно вспомнить историю HideMyAss и LulzSec. Мелкие мутные конторы невозбранно могут снифать тебя сами. Проверить внутреннюю кухню VPN-сервиса невозможно, и полагаться на заверения, что никаких логов не ведется, наивно.
Что остается бедному параноику? Поднимать VPN-сервер самостоятельно, благо не так уж и много для этого нужно. Наиболее подходящей реализацией для собственного сервера до недавнего времени был OpenVPN. Ощутимым его минусом является довольно сложная настройка и недружелюбность к обычному пользователю. Установить и настроить его самому под силу лишь искушенному в сетевых делах человеку. Наличие в Сети большого количества step-by-step мануалов не сильно помогает ситуации. Кроме того, OpenVPN требует наличия на сервере доступа к TUN/TAP-устройствам, поэтому для него подходят не все VDS/VPS-хостинги. Однако с недавнего времени под лицензией GPLv2 открылся мощный мультипротокольный VPN-сервер — SoftEther VPN. На первый, да и на второй взгляд этот сервер поражает возможностями.
Он имеет собственный протокол SSL-VPN, который неотличим от обычного HTTPS-трафика (трафик OpenVPN все же возможно выделить при помощи DPI). Заявлена поддержка L2TP/IPsec, MS-SSTP, OpenVPN, L2TPv3 и EtherIP, причем для L2TP указана строгая совместимость со встроенными клиентами в iOS и Android. Сам сервер имеет версии под Windows, Linux, OS X, FreeBSD и Solaris и, как утверждается на сайте, является оптимальной альтернативой OpenVPN, причем работает быстрее его.
Полный список всех вкусностей можно найти на официальном сайте. Отмечу лишь основные фишки. VPN-сервер может целиком управляться через весьма продуманный графический интерфейс, причем делать это можно удаленно. Да-да, теперь возможно распихать серверную часть по вдскам на линуксе и удаленно рулить ими из няшной GUI-версии для Windows. SoftEther VPN имеет встроенный NAT и DHCP-сервер, то есть под Linux и FreeBSD больше не нужно возиться с настройками iptables и natd. На мой взгляд, еще никогда создание собственной VPN-сети не было таким легкореализуемым. Собственный протокол SSL-VPN может работать через TCP, причем поддерживаются множественные TCP-сессии, UDP и даже ICMP.
Пробуем
Рассмотрим эту прелесть с практической точки зрения. Для установки нам понадобится дедик или VDS/VPS, SoftEther VPN не требует для работы TUN/TAP-устройств, поэтому подойдут даже хилые варианты с любым типом виртуализации. Установка серверной части довольна проста. На странице www.softether-download.com выбираем дистрибутив SoftEther VPN Server под нужную операционную систему и архитектуру (в *nix архитектуру ОС можно узнать по команде uname -m
). Для примера рассмотрим Linux, как самый частый вариант на VDS. Скачиваем дистрибутив на сервер любым доступным способом, после чего распаковываем и устанавливаем:
tar xzvf softether-vpnserver-v4.05-9416.tar.gz && cd vpnserver && make
Нас попросят подтвердить, что мы прочли License Agreement и с ним согласны. После чего наш SoftEther VPN Server будет установлен в этом каталоге и готов к запуску. В документации опционально советуют переместить его в /usr/local/vpnserver
, однако никакой разницы нет, запускать его можно хоть из /var/tmp
. Чуешь, куда клоню? 🙂 Запускаем
./vpnserver start
Все, наш собственный VPN-сервер готов и по умолчанию ожидает нашего подключения на портах 443, 992, 1194 и 5555. Управлять сервером можно через его конфигурационный файл или, что намного удобнее, с помощью утилит управления. Подключиться к нему для управления можно с помощью консольной утилиты vpncmd, находящейся в этом же каталоге, либо с помощью GUI для Windows, называющегося SoftEther VPN Server Manager for Windows. Он входит в состав SoftEther VPN Server для Windows, но можно установить его отдельно путем выбора нужных галочек в инсталляторе или же скачать отдельный ZIP-архив со страницы загрузки. Рассмотрим его, как наиболее дружелюбный.

Для подключения в Server Manager указываем хост и порт (любой из слушаемых) нашего сервера. При первом подключении нас попросят установить администраторский пароль. Задаем свой пароль и приступаем к настройке. Имеет смысл отредактировать список портов, дабы явно не палить присутствие VPN на сервере. Я оставляю только 443, а ты выбери себе по вкусу. SoftEther VPN поддерживает так называемые виртуальные хабы (Virtual Hubs), по сути отдельные виртуальные VPN-серверы, каждый со своими администраторами, VPN-пользователями, настройками и ACL-политиками. Создаем такой хаб, если его не было по умолчанию, и переходим в его настройки, где нам нужно создать пользователя в Manage Users
. SoftEther VPN поддерживает различные методы аутентификации, включая авторизацию по сертификату, RADIUS и NT Domain. Нам для начала достаточно обычной Password Authentication, поэтому просто задаем логин и пароль пользователя. Также можно заглянуть в Security Policy
, где можно ограничить юзеру ширину канала и запретить прочие радости.

Для того чтобы у подключившихся к VPN пользователей был доступ в интернет, задействуем NAT. Все настройки находятся по соответствующей кнопке в контексте хаба, нам достаточно просто включить NAT, оставив все остальное по дефолту. На этом этапе уже можно подключаться к серверу с помощью клиента SoftEther VPN, который работает по собственному протоколу SSL-VPN, настройка тривиальна и затруднений не вызовет. Для подключения по L2TP и L2TP/IPsec нужно задействовать их на сервере, соответствующие опции находятся в IPsec / L2TP Settings
. Аналогично включается и поддержка OpenVPN-клиентов, причем в этом случае SoftEther даже предложит сгенерировать конфигурационный файл .ovpn для OpenVPN.

Вот теперь можно подключаться к VPN как с настольных операционных систем, так и с мобильных девайсов, инструкции по настройке подключения можно найти в сети, они ничем не отличаются от обычных. На сайте www.softether.org тоже доступны мануалы с иллюстрациями. Самое время ощущать себя гордым владельцем VPN-сервера или даже, купив с десяток серверов в разных странах, открывать собственный VPN-сервис :).
Нетрадиционный VPN
Иногда бывает, что прямое соединение между клиентом и VPN-сервером затруднено или невозможно по каким-то причинам (локальная сеть, выход из которой строго файрволится на граничном роутере, или же сервер не имеет внешнего IP и находится за NAT или имеет динамический адрес). Распространенный случай — мы установили дома VPN-сервер и хотим попадать домой по защищенному каналу, но вот беда, домашний провайдер не выдает нам валидного айпишника. Да мало ли по каким причинам может не быть прямой видимости до сервера. И тут SoftEther VPN есть что показать нам. Собственный протокол SSL-VPN обладает рядом интересных техник для преодоления сетевых барьеров. Причем они не потребуют от нас никаких усилий, все работает буквально на автомате. Помимо обычной поддержки SOCKS/proxy, которой уже не удивить после OpenVPN, SoftEther VPN умеет:
- DDNS сервис;
- NAT Traversal;
- VPN over ICMP;
- VPN over DNS;
- VPN Azure Cloud.
Если сервер не имеет постоянного айпи или мы просто хотим удобства, SoftEther VPN любезно предоставит нам домен третьего уровня в домене *.softether.net
. Не нужно даже регистрироваться, все, что требуется, — это выбрать себе поддомен по вкусу, а работать и обновляться он будет самостоятельно. Функции пробива NAT, ICMP- и DNS-туннелирования пока плохо документированы и никак не настраиваются. Поэтому, чтобы убедиться в их работе, может понадобиться Wireshark. Однако и по дефолту все работает более чем прекрасно. Техника обхода NAT Traversal успешно пробила мой файрвол на роутере, на котором я для теста правилом заблокировал исходящие пакеты к VPN-серверу, и не менее успешно сумела соединиться с VPN-сервером, который был размещен за Full-Cone NAT. Проблема соединения с домашним сервером для меня решена навсегда :). Стоит учитывать, что для NAT Traversal требуется третий хост, который пока что предоставляет SoftEther VPN.

Влиять на то, какая техника будет использована, в текущей версии нельзя. SoftEther VPN Client пробует их поочередно, если прямое соединение «в лоб» не удалось. Пробуются соединения на 137-й и 53-й порт сервера, задействуется NAT Traversal, посылаются ICMP-пакеты. Для VPN over ICMP используются ICMP ECHO, или, проще говоря, обычный пинг.

Если ничего из этого не удалось, SoftEther VPN предлагает нам соединение через VPN Azure Cloud. Эту функцию надо включать в настройках сервера, по умолчанию она выключена. В этом случае обе стороны инициируют соединения с третьей стороной в виде облачного сервиса, хост выделяется при включении этой опции. В качестве клиента можно использовать как SoftEther VPN Client, так и Microsoft SSTP, имеющийся в современных версиях Windows. Следует понимать, что данные будут идти через неподконтрольный нам узел, то есть пресловутого дядю, однако, по заверениям разработчика, аутентификация осуществляется на стороне нашего VPN-сервера, следовательно, через облако данные идут зашифрованными. Подробнее можно ознакомиться на www.vpnazure.net.

Заключение
SoftEther VPN очень динамично развивается, и к тому времени, как ты будешь читать эту статью, функционал может стать еще более вкусным. Столь мощного и одновременно с этим дружественного опенсорсного решения доселе еще не было. Проект однозначно заслуживает внимания.
[authors tempalte="default"]