Корпоративный VPN обеспечивает защиту сетевого трафика, как от конкурентов, так и от организаций использующие системы DPI. Сетевой трафик в сети Интернет проходит через различные системы DPI которые распознают пакеты идущие от WireGuard/SoftEther VPN. Фильтры DPI либо полностью блокируют VPN трафик, либо существенно ограничивают скорость. Многие компании предпочитают решать подобную задачу не организационным, а техническим путем. Поэтому сетевой трафик приходиться дополнительно «оборачивать» в туннель, например, используя Shadowsocks. В руководстве подробно рассматривается пошаговое развертывание SoftEther VPN/WireGuard сервера и Shadowsocks туннеля на корпоративном VPS сервере на базе Docker-контейнеров. Платформы клиентов: Windows, Ubuntu, Android.
Оглавление
- Постановка задачи
- Архитектура
- SoftEther VPN
- WireGuard VPN
- Shadowsocks прокси
- Установка серверной части
- Шаг 1 — Развертывание Docker и создание внутренней сети для docker-контейнеров на сontoso-server
- Шаг 2 — Развертывание docker-контейнера с сервером SoftEther VPN на сontoso-server
- Шаг 3 — Развертывание docker-контейнера с сервером WireGuard VPN на сontoso-server
- Шаг 4 — Развертывание docker-контейнера с Shadowsocks прокси
- Установка и настройка клиентов на Windows
- Установка и настройка клиентов на Ubuntu
- Установка и настройка клиентов на Android
- Переход на протокол Shadowsocks-2022 AEAD-2022
- Мульти инстанс сервера Shadowsocks прокси
- Тесты
- Ресурсы
Постановка задачи
Обеспечить защищенный доступ к корпоративному порталу Contoso Corporation удаленным сотрудникам используя технологии VPN (virtual private network — «виртуальная частная сеть»), а так же доступ к ресурсам сети Интернет. Развернуть на корпоративном VPS сервере следующие сервисы: WireGuard, SoftEther VPN, Shadowsocks прокси. Сетевой трафик на сервере от Shadowsocks прокси должен перенаправляться в серверное приложение WireGuard и SoftEther VPN. WireGuard и SoftEther VPN должны быть развернуты на сервере с учетом прямого доступа к ним без использования Shadowsocks прокси. Авторизация пользователей во всех сервисах должна быть настроена по связке логин/пароль или ключевой фразе.
- Облачный VPS сервер сontoso-server должен работать на ОС версии не ниже Ubuntu 22.04.3 LTS (Jammy Jellyfish);
- Клиенты VPN сервера и Shadowsocks прокси устанавливаются на ОС Windows 10, Ubuntu 22.04, Android 11;
Архитектура
Стартовая позиция это уже развернутый облачный сервер сontoso-server вместе с Docker. Все сетевые сервисы на сервере сontoso-server размещаются в docker-контейнерах. VPN сервисы развертываются с учетом прямого доступа, т.е. без использования Shadowsocks прокси. Все docker-контейнеры подключаются к внутренней сети Docker, которая изолированная от сети хоста.
На сервере сontoso-server развертываются контейнеры на основе образов:
- Сервис WireGuard VPN — образ linuxserver/wireguard;
- Сервис SoftEther VPN — образ siomiz/softethervpn;
- Сервис Shadowsocks прокси — образ ghcr.io/shadowsocks/ssserver-rust.
Использование VPN в связке с корпоративным сервером аутентификации RADIUS и Active Directory будет рассмотрено в следующих публикациях.
На клиентском устройстве устанавливаются клиенты WireGuard/SoftEther VPN и Shadowsocks прокси. Локальный сетевой трафик на клиенте от WireGuard/SoftEther VPN перенаправляется в локальный клиент Shadowsocks прокси по протоколу SOCKS5. Далее, через сеть Интернет передается в серверный Shadowsocks прокси, откуда выходит и перенаправляется на порты VPN серверов.
Клиенты:
- WireGuard — штатный WireGuard клиент;
- SoftEther VPN — штатный SoftEther VPN клиент, вариант Developer Edition;
- Shadowsocks прокси — реализация от проекта GitHub shadowsocks/shadowsocks-rust.
Схема корпоративной сети Contoso Corporation с WireGuard, SoftEther VPN, Shadowsocks прокси (в формате Visio)
SoftEther VPN
SoftEther VPN — мультипротокольный VPN-сервер с возможностью администрирования используя графический интерфейс под Windows. Команда проекта SoftEther VPN разрабатывает и распространяет, бесплатную кросс-платформенную программу для создания VPN туннелей с несколькими протоколами и открытым исходным кодом. Разработка ведется в виде академического проекта Университета Цукубы, под лицензией Apache 2.0.
SoftEther VPN («SoftEther» означает «программное обеспечение Ethernet») является одним из самых функциональных и простых в использовании программного обеспечения VPN с несколькими протоколами в мире. Работает на Windows, Linux, Mac. SoftEther VPN это открытый проект с предоставлением исходного кода и вы можете бесплатно использовать его для любого личного или коммерческого использования.
SoftEther помимо поддержки протоколов OpenVPN, IPsec и MS-SSTP, поддерживает собственный оригинальный протокол SSL-VPN для прохождения через любые виды брандмауэров по 443 порту (HTTPS). Протокол SSL-VPN обеспечивает быструю пропускную способность, низкую задержку и прозрачное прохождение брандмауэра.
Встроенный NAT — пробрасывает соединение даже через проблемные и защищенные сети. Собственный VPN-сервер можно разместить за брандмауэром или NAT в своей компании, и получить доступ к этому VPN-серверу в корпоративной частной сети из вашего дома или другой локации, без каких-либо изменений настроек брандмауэра. Многие брандмауэры при проверке пакетов не могут обнаружить транспортные пакеты SoftEther VPN в качестве VPN-туннеля, из-за использования протокола HTTPS для маскировки трафика.
Возможность создавать виртуальные сетевые интерфейсы SoftEther VPN позволяет реализовать виртуальный коммутатор Ethernet, для удаленного доступа, так и VPN типа «сеть-сеть», или соединение L2 VPN на основе Ethernet. Традиционная IP-маршрутизация L3 на основе VPN также успешно работает.
SoftEther VPN client имеет полную совместимость с самыми популярными на сегодняшний день протоколами и стандартами такими как: OpenVPN, L2TP, IPsec, EtherIP, L2TPv3, маршрутизаторами Cisco VPN и клиентами MS-SSTP VPN.
WireGuard VPN
Wireguard — современный и безопасный VPN-сервер защищающий данные от компрометации. Он создает зашифрованное VPN-соединение между двумя конечными точками, которые могут быть сервером в облаке или другим устройством. Его цель — предложить простую и быструю защиту с минимальными затратами ресурсов.
Wireguard устанавливается на операционные системы Linux, macOS, Windows, поддерживается любой сетевой интерфейс, для которого есть драйверы. По умолчанию WireGuard для передачи зашифрованного трафика использует протокол UDP и открывает порт 51820. Страница загрузки приложения — Installation — WireGuard.
Основное отличие WireGuard от других протоколов VPN, таких как OpenVPN заключается в том, что WireGuard не использует TLS или DTLS для шифрования трафика. Вместо этого он использует Noise Protocol для запутывания метаданных пакетов, включая длину передачи и IP-адреса отправителей и получателей, поэтому ключи для каждого пакета согласуются в частном порядке без участия третьих сторон. Это делает WireGuard намного быстрее, чем большинство других Wireguard VPN протоколов, а также является более безопасным, поскольку нет потенциальных утечек при обмене ключами с центральным сервером. Например, исходный код WireGuard VPN содержит менее 4000 строк кода, в то время как другие протоколы содержат сотни тысяч строк.
Он может использоваться как с пакетами TCP/IP, так и с пакетами UDP/IP, поддерживает переадресацию портов («виртуальные интерфейсы»), аналогичную той, что предоставляется традиционными VPN, но не требует наличия промежуточного маршрутизатора.
Протокол WireGuard отличается от других протоколов VPN своим подходом к безопасности: он не устанавливает конфигурации между клиентом и сервером (как в популярных IKEv2 и IPSec) — в WireGuard они уже предопределены. Поэтому соединение WireGuard является бесконтактным. На практике это означает высокую производительность соединения (повышенная скорость обработки запросов) и лучший пинг — скорость отклика (как быстро сигнал с вашего устройства дойдет до другого компьютера или сервера, а затем вернется к вам). В результате WireGuard работает быстрее, например, того же OpenVPN. При этом защищенный VPN-туннель и улучшенные криптографические решения позволят сохранять приватность на любых устройствах.
Shadowsocks прокси
Shadowsocks прокси — проект прокси-сервера с открытым исходным кодом на основе протокола SOCKS5. Прокси сервер Shadowsocks выступает в качестве посредника, созданного для обхода цензуры. В 2012 году состоялся первый релиз этой программы, ее автором стал программист из Китая под псевдонимом “clowwindy”. Сейчас Shadowsocks разрабатывается и поддерживается сообществом энтузиастов.
Основное сходство VPN-сервисов и Shadowsocks заключается в том, что они позволяют пользователям посещать любые сайты в сети Интернете, обходя правительственную цензуру, геоблокировки и любые другие ограничения доступа.
В отличие от VPN-сервисов, Shadowsocks не предназначен для защиты конфиденциальности и анонимности пользователя. Соответственно, если VPN-сервисы защифровывают весь трафик (пока включены, разумеется), то при использовании Shadowsocks пакеты данных остаются без шифрования. Это сделано специально, чтобы данные были больше похожи на обычный HTTPS-трафик и не вызывали подозрений.
Shadowsocks использует SOCKS5-прокси. Иными словами, Shadowsocks не отправляет весь сетевой трафик через собственный сервер, чем и отличается от VPN-сервисов. В отличие от традиционных SSH-прокси, использующих протокол SOCKS5, Shadowsocks использует сразу несколько TCP-подключений. Это позволяет добиться более высокой скорости соединения, чем у аналогичных программ.
Существует несколько реализаций протокола Shadowsocks. Реализация прокола SS в виде решения shadowsocks-libev давно не поддерживается и содержит ряд уязвимостей, облегчающих его детектирование (replay-атаки и т.д.), в наши дни не считается безопасным.
Современным и рекомендуемым к использованию является протокол Shadowsocks-2022 (aead-cipher-2022), рекомендуется использовать его актуальную реализацию, проект GitHub shadowsocks/shadowsocks-rust.
Установка серверной части
Шаг 1 — Развертывание Docker и создание внутренней сети для docker-контейнеров на сontoso-server
Установка Docker просто и быстро выполняется по руководству Простая установка Docker в Armbian/Linux для ARM, данное руководство подойдет и для платформы x86.
До создания docker-контейнеров необходимо создать стандартную внутреннюю сеть типа bridge с названием br0. Где диапазон адресов для docker-контейнеров 172.28.1.1 — 172.28.1.126, шлюз 172.28.1.127.
Bridge — это внутренняя сеть Docker, изолированная от сети хоста. У вас может быть доступ из сети Интернет к контейнерам только через те порты, которые открыты при запуске контейнера командой -p . Можно создавать любое количество сетей типа bridge.
Если виртуальная сеть уже создана, то этот шаг можно пропустить. Команда создания сети br0:
$ docker network create \ --driver=bridge \ --subnet=172.28.1.0/24 \ --ip-range=172.28.1.0/25 \ --gateway=172.28.1.127 \ br0
После создания внутренней сети просмотрим список сетей docker, командой docker network ls :
Результат выполнения команды:
root@ubuntu:~# docker network ls NETWORK ID NAME DRIVER SCOPE ec4dbac59807 br0 bridge local 7c4f1dc7bc4d bridge bridge local 17e91f541996 host host local 27742e222db0 none null local
Внутренняя сеть br0 создана. Переходим к следующему шагу развертывания SoftEther VPN сервера WireGuard. Если необходимо установить только WireGuard VPN, то пропускаете следующий шаг и переходите к Шаг 3 — Развертывание docker-контейнера с сервером WireGuard VPN на сontoso-server.
Шаг 2 — Развертывание docker-контейнера с сервером SoftEther VPN на сontoso-server
Развертывание сервера SoftEther VPN на облачном сервере сontoso-server выполним на основе docker-образа siomiz/softethervpn. Создадим docker-контейнер с сервером SoftEther со следующими параметрами:
- Внешний IP-адрес (адрес сервера в сети Интернет для подключений): 185.240.242.10;
- IP-адрес контейнера во внутренней сети br0: 172.28.1.3;
- Подсеть для VPN клиентов: 192.168.30.0;
- Порты для внешних подключений из сети Интернет (можете назначить любые): 992/tcp, 1194/udp, 5555/tcp, 1195/udp;
- Имена пользователей: officeuser1, officeuser2, officeuser3.
До запуска основного контейнера необходимо создать конфигурацию, в которой указать пароль для управления сервером — параметр SPW и пароль для управления хабом — параметр HPW. Файл конфигурации располагается по пути /usr/vpnserver/vpn_server.config .
Выполним команды для создания файла конфигурации:
$ mkdir -p /usr/vpnserver $ docker run --name vpnconf -e "SPW={PASSWORD}" -e "HPW={PASSWORD}" siomiz/softethervpn echo $ docker cp vpnconf:/usr/vpnserver/vpn_server.config /usr/vpnserver/vpn_server.config $ docker rm vpnconf
Вместо текста {PASSWORD} вставить надежный пароль, например y?$vq0vG, используя графический менеджер настройки можно изменить в любой момент. Для уменьшения размера контейнера возьмем образ на основе Alpine, все события журналы log пишутся в null, т.е. логи не сохраняются.
Выполним команду создания docker-контейнера:
$ docker run -d \ --name=some-softethervpn \ --cap-add=NET_ADMIN \ -p 992:992/tcp \ -p 1194:1194/udp \ -p 5555:5555/tcp \ -p 1195:1195/udp \ -v /usr/vpnserver/vpn_server.config:/usr/vpnserver/vpn_server.config \ -v /dev/null:/usr/vpnserver/server_log \ -v /dev/null:/usr/vpnserver/packet_log \ -v /dev/null:/usr/vpnserver/security_log \ --restart=always \ --net br0 \ --ip 172.28.1.3 \ siomiz/softethervpn:alpine
То же самое в формате YML для docker-compose.
Конфигурация сервера SoftEther VPN
Для настройки SoftEther VPN Server используется Для настройки SoftEther VPN Serve используется графическая утилита для ОС Windows. Для загрузки необходимо перейти на страницу SoftEther Download Center. В списке Select Component, выбрать SoftEther VPN Server Manager for Windows, далее Select Platform windows. Рекомендуется выбрать пакет .zip без необходимости установки. Пакет softether-vpn_admin_tools-v4.43-9799-beta-2023.08.31-win32.zip распаковать и запустить vpnsmgr.exe.
Создаем новый профиль кнопка New Setting, указываем следующие настройка:
- Setting Name: softEther_vpn_contoso_server
- Host Name: 185.240.242.10
- Port Number: 5555
- Password: пароль который был указан в переменной SPW при создание конфигурационного файла vpn_server.config
Затем подключаемся к серверу кнопка — Connect.
При первом подключении появится вопрос об включение поддержки протокола IPSec. Если в дальнейшем планируете подключать мобильные устройства без использования программных клиентов, то выбрать Да. В данном случае поддержка IPSec не требуется, отвечем Нет.
Для настройки алгоритма шифрования нажать на кнопку Encryption and Network. По умолчанию включен алгоритм — DHE-RSA-AES256-SHA. Из списка выбрать другие более стойкие комбинации шифрования, но нужно помнить чем «сильнее» алгоритм, тем больше нагрузка на CPU сервера и на конечное клиентское устройство.
По умолчанию будет доступен хаб — DEFAULT, удаляем его.
Создаем новый хаб — кнопка Create a Virtual Hub. Укажем Virtual Hub Name: VPN. Открываем настройки хаба кнопка — Manage Virtual Hub.
Создадим пользователей, кнопка Manage Users, затем кнопка New. Аутентификация настроим по паре логин/пароль. Создадим пользователей с именами: officeuser1, officeuser2, officeuser3.
Для разделения подсети клиентов VPN сервера и подсети Docker контейнеров включим NAT, кнопка Virtual NAT and Virtual DHCP Server (SecureNAT), далее кнопка Enable SecureNAT. Изменим подсеть VPN клиентов на: 192.168.30.x, закроем окно, кнопка Exit.
На этом настройка сервера закончена. Как выполнять настройку сервера смотрите следующее видео:
Последовательность действий по настройке SoftEther VPN ServerШаг 3 — Развертывание docker-контейнера с сервером WireGuard VPN на сontoso-server
Развертывание сервера WireGuard на облачном сервере сontoso-server выполним на основе docker-образа linuxserver/wireguard. Создадим docker-контейнер с сервером WireGuard со следующими параметрами:
- Внешний IP-адрес (адрес сервера в сети Интернет для подключений): 185.240.242.10;
- IP-адрес контейнера во внутренней сети br0: 172.28.1.4;
- Подсеть для VPN клиентов: 192.168.40.0;
- Порт для внешних подключений из сети Интернет (можно задать любой): 51820;
- Имена пользователей (в название нельзя ставить пробелы и символы «-«, «_»): officeuser1, officeuser2, officeuser3.
Выполним команду создания docker-контейнера:
$ docker run -d \ --name=some-wireguard \ --cap-add=NET_ADMIN \ -e PUID=0 \ -e PGID=0 \ -e TZ=Europe/Moscow \ -e SERVERURL=185.240.242.10 \ -e SERVERPORT=51820 \ -e PEERS=officeuser1,officeuser2,officeuser3 \ -e PEERDNS=1.1.1.1,8.8.8.8 \ -e INTERNAL_SUBNET=192.168.40.0 \ -e ALLOWEDIPS=0.0.0.0/0 \ -p 51820:51820/udp \ -v some-wireguard-config:/config \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --restart=always \ --net br0 \ --ip 172.28.1.4 \ linuxserver/wireguard
То же самое в формате YML для docker-compose.
Конфигурация сервера WireGuard
В папке конфигурации docker-контейнера по пути /var/lib/docker/volumes/some-wireguard-config/_data располагаются папки с названиями peer_officeuser1, peer_officeuser2, peer_officeuser3, содержащие конфигурацию корпоративных клиентов.
Рассмотрим структуру папки peer_officeuser1 :
- peer_officeuser1.conf — конфигурационный файл для клиента WireGuard, в дальнейшем необходимо скопировать на устройство клиента;
- peer_officeuser1.png — QR-код для быстрого подключения мобильных устройств, потребуется для Android;
- presharedkey-peer_officeuser1, privatekey-peer_officeuser1, publickey-peer_officeuser1 — ключи для подключения WireGuard клиента, при компрометации ключа privatekey-peer_officeuser1 необходимо сменить все ключи текущего пользователя.
Рассмотрим структуру файла peer_officeuser1.conf:
[Interface] Address = 192.168.40.2 PrivateKey = {KEY} ListenPort = 51820 DNS = 1.1.1.1,8.8.8.8 [Peer] PublicKey = {KEY} PresharedKey = {KEY} Endpoint = 185.240.242.10:51820 AllowedIPs = 0.0.0.0/0
Вместо текста {KEY} будет сгенерирован уникальный ключ вида CKstKWK0WprehI2Ef43n0VhuD/zDVjvnqNqaT6bxIkU= .
Конфигурационный файл состоит из двух разделов interface и peers.
Раздел Interface определяет частный сетевой адрес в изолированной сети клиентов WireGuard, рассмотрим следующие параметры:
- Address — IP-адрес клиента;
- ListenPort — в случае работы клиента данный параметр можно удалить т.к. он необходим только для сервера Wireguard;
- DNS — список DNS серверов, можете указать любые свои DNS-сервера.
Раздел Peer определяет точку подключения, в данном случае публичный адрес сервера сontoso-server в сети Интернет, рассмотрим следующие параметры:
- Endpoint — публичный IP-адрес (или его доменное имя) сервера, после символа «:» указывается номер порта.
- AllowedIPs — определяет диапазон сетевых адресов, которые будут маршрутизироваться.
Если строка AllowedIPs = 0.0.0.0/0, то весь нетуннелированный сетевой трафик будет блокироваться. Если требуется предоставить доступ к IP-адресам локальной сети, то необходимо заменить значение на AllowedIPs = 0.0.0.0/1, 128.0.0.0/1 или указать конкретные значения IP-узлов или подсети.
Шаг 4 — Развертывание docker-контейнера с Shadowsocks прокси
Развертывание Shadowsocks прокси на облачном сервере сontoso-server выполним на основе docker-образа ghcr.io/shadowsocks/ssserver-rust.
- Внешний IP-адрес (адрес сервера в сети Интернет для подключений): 185.240.242.10;
- IP-адрес контейнера во внутренней сети br0: 172.28.1.5;
- Порты для внешних подключений из сети Интернет (можно задать любой): 8388/tcp, 8388/udp.
Выполним команду создания docker-контейнера:
$ docker run -d \ --name=ssserver-rust \ -p 8388:8388/tcp \ -p 8388:8388/udp \ -v shadowsocks-rust-config:/etc/shadowsocks-rust \ -d --restart=always \ --net br0 \ --ip 172.28.1.5 \ -dit ghcr.io/shadowsocks/ssserver-rust:latest
То же самое в формате YML для docker-compose.
Конфигурация Shadowsocks прокси
В хранилище shadowsocks-rust-config по пути /var/lib/docker/volumes/shadowsocks-rust-config/_data располагается файл конфигурации config.json. Данный файл необходимо заменить на следующее содержание:
{ "server": "0.0.0.0", "server_port": 8388, "password": "{PASSWORD}", "timeout": 300, "method": "chacha20-ietf-poly1305", "mode": "tcp_and_udp" }
Где поле password необходимо изменить на свое значение. Пароль получается путем генерации с помощью утилиты ssservice. Утилита загружается с ресурса Github проекта, на 28.11.2023 последний релиз v1.17.1. Для генерации пароля необходимо выполнить последовательность команд:
$ sudo apt-get update $ sudo apt-get install wget tar $ mkdir shadowsocks $ cd shadowsocks $ wget --no-check-certificate -O shadowsocks.tar.xz "https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.17.1/shadowsocks-v1.17.1.x86_64-unknown-linux-gnu.tar.xz" $ tar -xf shadowsocks.tar.xz $ rm shadowsocks.tar.xz $ chmod +x ssservice $ ./ssservice genkey -m "chacha20-ietf-poly1305"
После запуска утилиты ssservice отобразится ключ вида SSEbynUNV/Dp5fRKDHcDjyciMCQoM55eZlj2h4lbrNQ= , который необходимо вставить вместо текста {PASSWORD}.
Соответственно итоговый файл config.json выглядит следующим образом:
{ "server": "0.0.0.0", "server_port": 8388, "password": "SSEbynUNV/Dp5fRKDHcDjyciMCQoM55eZlj2h4lbrNQ=", "timeout": 300, "method": "chacha20-ietf-poly1305", "mode": "tcp_and_udp" }
После получения пароля, папку shadowsocks с утилитой ssservice можно удалить. После внесения изменений контейнер ssserver-rust перезапускаем командой:
$ docker restart ssserver-rust
Установка и настройка клиентов на Windows
Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
Загрузка клиента SoftEther VPN
Для настройки SoftEther VPN Server использовали менеджер управления загружаемый со страницы SoftEther Download Center, по этому же адресу загружается клиент, но к сожалению без поддержки протокола SOCKS5. Загрузить клиент с поддержкой SOCKS5 можно двумя путями:
- с зеркала на GitHub;
- с официального ночного Pipeline на портале dev.azure.com.
Для загрузки с зеркала на GitHub достаточно загрузить инсталлятор softether-vpnclient-5.02.5367.x64.exe и установить клиента, все собранные инсталляторы доступны на GitHub devdotnetorg/softethervpn.
Загрузка с pipeline несколько сложнее. Для начала необходимо перейти по ссылке dev.azure.com/SoftEther-VPN. Затем выбрать Pipeline с названием Nightly. Далее из списка выбираем последний по дате, например #20231110.1 • Merge pull request #1924 from hiura2023/master. Из списка Jobs выбираем Windows_x64. Затем в окне журнала справа на последней строке будет ссылка 2 artifacts, необходимо перейти по этой ссылке. Из списка Published выбрать Installers, но нажать на три точки справа пункта для показа меню. В этом меню выбрать Download artifacts.
Последовательность загрузки инсталляторов SoftEther VPN с ресурса dev.azure.com
Настройка клиента SoftEther VPN
После установки клиента необходимо интерфейс переключить на английский язык, для этого в пункте меню выбрать Инструменты => Настройки языка в окне выбрать English и нажать кнопку Далее >. Затем Готово и перезагрузить клиента.
Переключение языка в SoftEther VPN клиенте
Создание виртуального адаптера для клиента SoftEther VPN
В пункте меню выбрать Virtual Adapter => New Virtual Network Adapter. Название по умолчанию VPN можно заменить на любое другое. В списке виртуальных адаптеров должен появиться новый адаптер VPN.
Интерфейс SoftEther VPN, виртуальный адаптер VPN
Создание соединения в SoftEther VPN
Теперь переходим к созданию Соединения, пункт меню Connect => New VPN Connection Setting.
Для тестирования соединения c SoftEther VPN настроим подключения без использования SOCKS5.
Необходимо заполнить следующие поля:
- Settings Name: Contoso Corporation VPN
- Host Name: 185.240.242.10
- Port Number: 5555 (SE-VPN Port)
- Virtual Hub Name: VPN
- User Name: officeuser1
- Password: пароль который был указан
Настройки соединения в SoftEther VPN
Обратите внимание, при переходе на поле Virtual Hub Name в списке должен появиться пункт VPN. После создания подключения необходимо выполнить подключение.
Подключение к серверу в SoftEther VPN
Проверка соединения в SoftEther VPN
Для проверки соединения необходимо запустить браузер и перейти по адресу ifconfig.co. На странице отобразится публичный IP-адрес сontoso-server сервера, т.е. IP address 185.240.242.10, т.к. теперь весь сетевой трафик маршрутизируется через сервер сontoso-server. Для дальнейшей настройки с использованием направления сетевого трафика через прокси необходимо разорвать соединение Contoso Corporation VPN, пункт меню Disconnect.
Шаг 2 — Настройка работы клиента SoftEther VPN через Shadowsocks прокси
Теперь необходимо установить клиента Shadowsocks прокси и перенастроить соединение Contoso Corporation VPN на работу через протокол SOCKS5.
Загрузка shadowsocks клиента
Для загрузки клиента перейдите в раздел Releases проекта shadowsocks/shadowsocks-rust. На 27.11.2023 последняя версия v1.17.1. Из списка Assets загрузим архив shadowsocks-v1.17.1.x86_64-pc-windows-gnu.zip. Распакуем архив, из архива необходим исполняемый файл клиента sslocal.exe . Создадим папку C:\shadowsocks и скопируем в эту папку файл sslocal.exe .
Настройка shadowsocks клиента sslocal
Создадим файл конфигурации config.json по пути C:\shadowsocks\config.json со следующим содержанием:
{ "locals": [{ "local_address": "127.0.0.1", "local_port": 1080, "mode": "tcp_and_udp" }, { "local_address": "127.0.0.1", "local_port": 1086, "mode": "tcp_and_udp", "protocol": "tunnel", "forward_address": "172.28.1.4", "forward_port": 51820 }], "server": "185.240.242.10", "server_port": 8388, "password": "{PASSWORD}", "method": "chacha20-ietf-poly1305" }
Секция locals открывает локальный доступ для проксирования сетевого трафика. Первый вариант открывает на компьютере порт 1085 для работы по протоколу SOCKS5, который использоваться для SoftEther VPN клиента.
Второй вариант с указанием «protocol»: «tunnel» открывает прямое перенаправление сетевого трафика с порта 1086 на компютере в порт 51820 узла с IP-адресом 172.28.1.3, который является docker-контейнером some-wireguard, потому wireguard клиент не работает по протоколу SOCKS5.
Далее параметры относятся к настройки доступа с серверу shadowsocks, ключ password с значением {PASSWORD} это пароль который указывали при создания контейнера ssserver-rust. Ключ method определяет метод шифрования сетевого трафика.
Запустим из папки C:\shadowsocks прокси командой:
sslocal -c config.json
После запуска должно появиться консольное окно.
Настройка SoftEther VPN клиента
Для перенаправления сетевого трафика через shadowsocks клиента необходимо открыть свойства соединения Contoso Corporation VPN и в пункте Proxy Type выставить Connect via SOCKS5 Proxy Server, нажать на кнопку Proxy Server Settings. В окне выставить следующие значения:
- Host Name: 127.0.0.1
- Port: 1080
Настройка проксирования сетевого трафика через SOCKS5 прокси
При работе в связке SoftEther VPN + shadowsocks прокси есть один нюанс, который заключается в том, что SoftEther VPN меняет сетевые маршруты при соединении с VPN сервером. В результате получается, что после подключения сетевой трафик от shadowsocks клиента поступает на сетевой интерфейс SoftEther VPN, в результате получается закольцовка и соединение обрывается. Существует два варианта решения этой проблемы: простой и немного сложный.
Простой. Повторно открыть свойства соединения Contoso Corporation VPN, затем нажать на кнопку Advanced Settings. И установить выбор в пункте No Adjustments of Routing Tabley.
Опция не изменять таблицу маршрутизации при установление соединения SoftEther VPN
Сложный. В настройках проводного или беспроводного соединения компьютера в качестве первичного DNS сервера указать IP-адрес 185.240.242.10 сервера сontoso-server.
В случае изменения сетевых маршрутов клиент SoftEther VPN для DNS сервера указанного в сетевых настройках делает исключение, таким образом, отпадает проблема закольцовки сетевого трафика.
Проверка соединения через SoftEther VPN + shadowsocks прокси
Так же запускаем браузер и переходим по адресу ifconfig.co для проверки отображения IP-адреса 185.240.242.10.
Проверка соединения через браузер Firefox используя shadowsocks прокси
Если не удалось подключение SoftEther VPN + shadowsocks прокси, то можно проверить доступность работы через браузер Firefox. Для этого необходимо убедиться, что соединение SoftEther VPN выключено и при заходе на страницу ifconfig.co отображается публичный адрес вашего маршрутизатора местного оператора связи.
Затем необходимо открыть Настройки > Настройки сети. Затем выбрать Ручная настройка прокси и указать следующие параметры.
- Узел SOCKS: 127.0.0.1
- Порт: 1080
- SOCKS5
Работа shadowsocks клиента как Windows службы sswinservice
Использовать клиента sslocal неудобно из-за постоянного отображения консольного окна. Для запуска в фоновом режиме в виде Службы Windows предназначен клиент sswinservice, который не входит в сборочный процесс по умолчанию, авторы проекта предлагают его собрать самостоятельно. Скомпилированный бинарник доступен по пути GitHub devdotnetorg/shadowsocks-rust/out/sswinservice.exe. В отличие от варианта разработчиков проекта, вместо сборки в Windows для самостоятельной сборки предлагается кросс-компиляция в Ubuntu. Как это сделать читайте в публикации Кросс-компиляция проекта в Docker используя Buildx на примере сборки shadowsocks-rust и библиотеки Libgpiod.
Вне зависимости от пути получения sswinservice, бинарник необходимо разместить в в папку c:\shadowsocks\ .
Запускаем интерпретатор с правами администратора командной строки CMD и в нем запускаем powershell. Перед созданием службы необходимо завершить работу sslocal.exe.
Создадим службу Windows в интерпретаторе powershell:
powershell New-Service -Name "shadowsocks-local-service" ` -DisplayName "Shadowsocks Local Service" ` -BinaryPathName "c:\shadowsocks\sswinservice.exe local -c c:\shadowsocks\config.json" Start-Service shadowsocks-local-service Get-Service -name shadowsocks-local-service
Конфигурационный файл config.json остается тот же.
Создание Windows службы — Shadowsocks Local Service и ее запуск
Служба shadowsocks-local-service в списке служб Windows
Служба должна быть в состояние — Выполняется.
Переходим по адресу ifconfig.co для проверки отображения IP-адреса 185.240.242.10.
Шаг 3 — Настройка работы клиента WireGuard
Стабильной работы клиента WireGuard через Shadowsocks прокси не удалось достигнуть, поэтому предлагается вариант настройки клиента на прямое подключение к WireGuard серверу.
Загрузка WireGuard клиента
WireGuard клиент загружается по пути — Installation — WireGuard, выполним установку, все значения по умолчанию.
Настройка WireGuard клиента
Для настройки клиента потребуется файл peer_officeuser1.conf, который был получен при создании контейнера . Необходимо запустить WireGuard клиент и выполнить команду Импорт туннелей из файла …, соответственно выбрать файл peer_officeuser1.conf, затем нажать на кнопку Подключить.
Переходим по адресу ifconfig.co для проверки отображения IP-адреса 185.240.242.10.
Установка и настройка клиентов на Ubuntu
Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
Загрузка клиента SoftEther VPN
Клиент SoftEther VPN загружается с той же страницы SoftEther Download Center, с которой был загружен менеджер управления сервером. Но в отличие от Windows, клиент под Linux необходимо собирать и дополнять скриптами автоматизации запуска. Поэтому для решения этих задач предоставляется готовый скрипт установки — setup-softether-vpn-client.sh. Данный скрипт загружает с сервера www.softether-download.com последнюю версию клиента для Linux архитектура AMD64, затем загружаются скрипты автоматизации softether-vpn-client.zip. В результате получится следующая структура файлов:
. └── softethervpn ├── remove-client.sh ├── setup-client.sh ├── vpn-connect.sh ├── vpn-disconnect.sh ├── vpn_config └── vpnclient ├── Authors.txt ... ├── vpn_client.config ├── vpnclient └── vpncmd
В каталоге softethervpn содержатся скрипты *.sh и исполняемые бинарные файлы клиента.
Скрипты и файлы:
- setup-client.sh — установка клиента;
- remove-client.sh — удаления клиента;
- vpn-connect.sh — подключение к VPN серверу;
- vpn-disconnect.sh — отключение от VPN сервера;
- vpn_config — файл конфигурации для исполнения скриптов.
Каталог softethervpn/vpnclient содержит исполняемые файлы, VPN клиент vpnclient и vpncmd для конфигурирования клиента.
Для загрузки клиента необходимо выполнить следующие команды:
$ sudo apt-get update $ sudo apt-get install -y curl mc $ curl -SL --output setup-softether-vpn-client.sh https://raw.githubusercontent.com/devdotnetorg/softethervpn/master/setup-softether-vpn-client.sh $ chmod +x setup-softether-vpn-client.sh $ sudo ./setup-softether-vpn-client.sh
Установка и настройка клиента SoftEther VPN
После загрузки клиента необходимо задать настройки в файле конфигурации, путь к файлу softethervpn/vpn_config . Открыть файл для редактирования командой:
$ mcedit softethervpn/vpn_config
Содержание файла:
CLIENT_DIR="/root/softethervpn/vpnclient" NIC_NAME="vpn_se_nic1" ACCOUNT_NAME="officeuser1" VPN_HOST_IPv4="185.240.242.10" LOCAL_GATEWAY="192.168.50.1"
Значения параметров:
- CLIENT_DIR — путь к каталогу где располагается файл vpnclient ;
- NIC_NAME — название виртуального сетевого адаптера VPN соединения, поднимается во время подключения к серверу VPN;
- ACCOUNT_NAME — название профиля подключения, для упрощения зададим логин пользователя;
- VPN_HOST_IPv4 — публичный IP-адрес VPN сервера;
- LOCAL_GATEWAY — IP-адрес шлюза маршрутизатора в локальной сети, или просто IP-адрес домашнего маршрутизатора.
Теперь приступим к установке и настройке соединения, перейдем в каталог softethervpn и выполним скрипт setup-client.sh, команды:
$ cd softethervpn $ ./setup-client.sh
Ответим на вопросы мастера настройки:
IP-адрес и порт подключению к серверу: Destination VPN Server Host Name and Port Number: 185.240.242.10:5555
Название хаба Destination Virtual Hub Name: VPN
Название пользователя Connecting User Name: officeuser1
Название сетевого адаптера Used Virtual Network Adapter Name: vpn_se_nic1
Пароль пользователя AccountPassword officeuser1
Типу аутентификации Specify standard or radius: standard
Запуск клиента SoftEther VPN
После установки клиента необходимо вызвать скрипт vpn-connect.sh из этого же каталога. Выполним скрипт vpn-connect.sh, команда:
Для проверки публичного IP-адреса выполним команду:$ ./vpn-connect.sh
$ curl ifconfig.co
Результат выполнения:
root@ubuntuvm:~# curl ifconfig.co 185.240.242.10
В ответе отобразится публичный IP-адрес 185.240.242.10 сервера сontoso-server, значит настройки выполнены правильно.
Шаг 2 — Настройка работы клиента WireGuard
Установка клиента WireGuard
Выполним установку необходимых пакетов:
$ sudo apt-get update $ sudo apt-get install -y wireguard iptables resolvconf mc
Где пакет mc необходим для редактирования текстовых файлов, в него входит редактор mcedit .
Настройка клиента WireGuard
Создадим конфигурационный файл клиента WireGuard по пути /etc/wireguard/wg0.conf , где wg0 — название виртуального сетевого интерфейса для маршрутизации сетевого трафика. Выполним команду создания файла и откроем его в редакторе:
$ sudo mcedit /etc/wireguard/wg0.conf
Теперь необходимо в открытый файл вставить содержимое файла peer_officeuser1.conf , который был создан ранее на сервере . Итоговое содержание файла wg0.conf:
[Interface] Address = 192.168.40.2 PrivateKey = {KEY} ListenPort = 51820 DNS = 1.1.1.1,8.8.8.8 [Peer] PublicKey = {KEY} PresharedKey = {KEY} Endpoint = 185.240.242.10:51820 AllowedIPs = 0.0.0.0/0
Сохраняем изменения F2 и закрываем редактор F10 .
Проверка соединения с сервером WireGuard
Теперь необходимо включить VPN туннель командой:
$ sudo wg-quick up wg0
Для проверки соединения выполняем команду:
$ wg show
Результат выполнения:
root@ubuntu:~/softethervpn# wg show interface: wg0 public key: {KEY} private key: (hidden) listening port: 34546 fwmark: 0xca6c peer: {KEY} preshared key: (hidden) endpoint: 192.168.40.2:51820 allowed ips: 0.0.0.0/0 latest handshake: 10 seconds ago transfer: 92 B received, 308 B sent
Соединение (peer) поднято. Теперь при выполнение команды ip a добавится новый сетевой интерфейс wg0.
root@ubuntu:~/softethervpn# ip a ... 12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.168.40.2/32 scope global wg0
Для проверки публичного IP-адреса выполним команду:
$ curl ifconfig.co
Результат выполнения:
root@ubuntuvm:~# curl ifconfig.co 185.240.242.10
В ответе отобразится публичный IP-адрес 185.240.242.10 сервера cloud-server, значит настройки выполнены правильно.
Установка и настройка клиентов на Android
Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
Для Android необходимо из маркета установить приложение WireGuard by WireGuard Development Team. После установки приложения профиль соединения создается одним из двух вариантов:
- перенос конфигурационного файла — необходимо перенести на телефон файл peer_officeuser1.conf, затем в приложение выполнить задачу Импорт из файла или архива;
- сканирование QR-кода — файл peer_officeuser1.png содержит QR-код для быстрого подключения мобильных устройств, необходимо открыть файл в графическом редакторе, навести камеру телефона на QR-код и в приложение выполнить задачу Сканировать QR-код.
Переходим по адресу ifconfig.co для проверки отображения IP-адреса 185.240.242.10.
Переход на протокол Shadowsocks-2022 AEAD-2022
Для Shadowsocks прокси использовали протокол по умолчанию chacha20-ietf-poly1305 для обеспечения максимальной совместимости, но на данный момент этот протокол уже устарел, вместо него предлагается использовать Shadowsocks-2022 (aead-cipher-2022). Для этого в конфигурационных файлах сервера и клиента необходимо значение ключа method: chacha20-ietf-poly1305 заменить на одно из следующих значений:
- 2022-blake3-aes-128-gcm
- 2022-blake3-aes-256-gcm
- 2022-blake3-chacha20-poly1305
- 2022-blake3-chacha8-poly1305
Где значения aes-128 и aes-256 это длинна ключа, рекомендуется использовать 2022-blake3-aes-256-gcm.
При изменении метода шифрования необходимо заменить ключи и указать новый метод при генерации ключа с помощью утилиты ssservice, выполнить следующую команду:
$ ./ssservice genkey -m "2022-blake3-aes-256-gcm"
Мульти инстанс сервера Shadowsocks прокси
Shadowsocks поддерживает мультиконфигурацию сервера. Например, такой вариант может быть использован для одновременной поддержки сервером методов chacha20-ietf-poly1305 и 2022-blake3-aes-256-gcm, по причине отсутствия поддержки нового метода у старых клиентов. Соответственно потребуется пересоздать контейнер для открытия доступа к еще одному порту. Пример, файла config.json для сервера с поддержкой методов chacha20-ietf-poly1305 и 2022-blake3-aes-256-gcm, порты для подключения 8388 и 8389:
{ "servers": [{ "server": "0.0.0.0", "server_port": 8388, "password": "{PASSWORD}", "timeout": 300, "method": "chacha20-ietf-poly1305", "mode": "tcp_and_udp" }, { "server": "0.0.0.0", "server_port": 8389, "password": "{PASSWORD}", "timeout": 300, "method": "2022-blake3-aes-256-gcm", "mode": "tcp_and_udp" }] }
Клиент поддерживает только подключение к одному серверу, но несколько локальных прокси, секция locals. Пример запуска двух локальных прокси, файл config.json:
{ "locals": [{ "local_address": "127.0.0.1", "local_port": 1080, "mode": "tcp_and_udp" }, { "local_address": "127.0.0.1", "local_port": 1086, "mode": "tcp_and_udp", "protocol": "tunnel", "forward_address": "172.28.1.4", "forward_port": 51820 }], "server": "185.240.242.10", "server_port": 8388, "password": "{PASSWORD}", "method": "chacha20-ietf-poly1305" }
Первая секция запускает локальный прокси по протоколу SOCKS5, вторая секция включает перенаправления портов с localhost:1086 => 172.28.1.4:51820.
Тесты
Теперь выполним замеры скорости. Замеры выполнены с помощью сервиса Speedtest by Ookla. Скорость передачи данных тестируется от точки г. Санкт-Петербург, РФ, до сервера wirsNET — Frankfurt, Германия.
Результаты замеров скорости Интернет соединения
Базовая скорость Интернет соединения напрямую без VPN и Shadowsocks прокси составляет Download — 31 Мб/с, 59 Мб/с — Upload.
Протокол SE-VPN от SoftEther VPN режется до минимума, скорость менее мегабита, но зато поток на Upload без ограничений.
Хорошие результаты показывает WireGuard. Если у вас плохо работает WireGuard, то следует перейти на связку SoftEther VPN + Shadowsocks.
Ресурсы
- WireGuard fast, modern, secure VPN tunnel — WireGuard
- Installation — WireGuard
- linuxserver/wireguard — Docker Image Docker Hub
- SoftEther VPN Project — SoftEther VPN Project
- GitHub SoftEtherVPN/SoftEtherVPN
- siomiz/softethervpn — Docker Image Docker Hub
- SoftEther Download Center
- Pipelines of SoftEther VPN — Azure DevOps
- Shadowsocks A fast tunnel proxy that helps you bypass firewalls
- GitHub shadowsocks/shadowsocks-rust
- What is a SOCKS5 proxy and why should you use one NordVPN
- SoftEther VPN — SoftEther VPNВикипедия
- Что такое Softether Vpn?