Создание корпоративной сети VPN на базе решений SoftEther VPN/WireGuard с Shadowsocks-туннелированием [обновлено 15.02.2024]

Корпоративный VPN обеспечивает защиту сетевого трафика, как от конкурентов, так и от организаций использующие системы DPI. Сетевой трафик в сети Интернет проходит через различные системы DPI которые распознают пакеты идущие от WireGuard/SoftEther VPN. Фильтры DPI либо полностью блокируют VPN трафик, либо существенно ограничивают скорость. Многие компании предпочитают решать подобную задачу не организационным, а техническим путем. Поэтому сетевой трафик приходиться дополнительно «оборачивать» в туннель, например, используя Shadowsocks. В руководстве подробно рассматривается пошаговое развертывание SoftEther VPN/WireGuard сервера и Shadowsocks туннеля на корпоративном VPS сервере на базе Docker-контейнеров. Платформы клиентов: Windows, Ubuntu, Android.

Оглавление

  1. Постановка задачи
  2. Архитектура
  3. SoftEther VPN
  4. WireGuard VPN
  5. Shadowsocks прокси
  6. Установка серверной части
    1. Шаг 1 — Развертывание Docker и создание внутренней сети для docker-контейнеров на сontoso-server
    2. Шаг 2 — Развертывание docker-контейнера с сервером SoftEther VPN на сontoso-server
    3. Шаг 3 — Развертывание docker-контейнера с сервером WireGuard VPN на сontoso-server
    4. Шаг 4 — Развертывание docker-контейнера с Shadowsocks прокси
  7. Установка и настройка клиентов на Windows
    1. Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
    2. Шаг 2 — Настройка работы клиента SoftEther VPN через Shadowsocks прокси
    3. Шаг 3 — Настройка работы клиента WireGuard
  8. Установка и настройка клиентов на Ubuntu
    1. Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
    2. Шаг 2 — Настройка работы клиента WireGuard
  9. Установка и настройка клиентов на Android
    1. Шаг 1 — Настройка клиента SoftEther VPN с прямым подключением к серверу сontoso-server
  10. Переход на протокол Shadowsocks-2022 AEAD-2022
  11. Мульти инстанс сервера Shadowsocks прокси
  12. Тесты
  13. Ресурсы

Постановка задачи

Обеспечить защищенный доступ к корпоративному порталу 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 развертываются контейнеры на основе образов:

Использование 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.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Схема корпоративной сети 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.

softethervpn.yml
version: '3.5'

services:
#VPN
  some-softethervpn:
    image: siomiz/softethervpn:alpine
    container_name: some-softethervpn
    restart: always
    ports:
      - 992:992/tcp
      - 1194:1194/udp
      - 5555:5555/tcp
      - 1195:1195/udp
    volumes:
      - /usr/vpnserver/vpn_server.config:/usr/vpnserver/vpn_server.config
      - /dev/null:/usr/vpnserver/server_log
      - /dev/null:/usr/vpnserver/packet_log
      - /dev/null:/usr/vpnserver/security_log
    cap_add:
      - NET_ADMIN
    networks:
      br0:
        ipv4_address: 172.28.1.3
   
networks:
  br0:    
    external: true

Конфигурация сервера 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.yml
version: '3.5'

services:
#VPN
  some-wireguard:
    image: linuxserver/wireguard
    container_name: some-wireguard
    restart: always
    ports:
      - 51820:51820/udp  
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Moscow
      - SERVERURL=185.240.242.10
      - SERVERPORT=51820
      - PEERS=user1,user2,user3
      - PEERDNS=1.1.1.1,8.8.8.8
      - INTERNAL_SUBNET=192.168.40.0
      - ALLOWEDIPS=0.0.0.0/0
    volumes:
      - some-wireguard-config:/config
      - /lib/modules:/lib/modules  
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    networks:
      br0:
        ipv4_address: 172.28.1.4
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1

volumes:
  some-wireguard-config:
   name: some-wireguard-config  
   
networks:
  br0:    
    external: true

Конфигурация сервера WireGuard

В папке конфигурации docker-контейнера по пути  /var/lib/docker/volumes/some-wireguard-config/_data  располагаются папки с названиями peer_officeuser1, peer_officeuser2, peer_officeuser3, содержащие конфигурацию корпоративных клиентов.

Структура каталогов /var/lib/docker/volumes/some-wireguard-config/_data
root@ubuntu:/var/lib/docker/volumes/some-wireguard-config/_data# tree
.
├── coredns
│   └── Corefile
├── peer_officeuser1
│   ├── peer_officeuser1.conf
│   ├── peer_officeuser1.png
│   ├── presharedkey-peer_officeuser1
│   ├── privatekey-peer_officeuser1
│   └── publickey-peer_officeuser1
├── peer_officeuser2
│   ├── ...
│   ...
├── server
│   ├── privatekey-server
│   └── publickey-server
├── templates
│   ├── peer.conf
│   └── server.conf
└── wg0.conf

6 directories, 21 files

Рассмотрим структуру папки  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.yml
version: '3.5'

services:
#Shadowsocks server
  ssserver-rust:
    image: ghcr.io/shadowsocks/ssserver-rust:latest
    container_name: ssserver-rust
    restart: always
    ports:
      - 8388:8388/tcp
      - 8388:8388/udp
    volumes:
      - shadowsocks-rust-config:/etc/shadowsocks-rust
    networks:
      br0:
        ipv4_address: 172.28.1.5

volumes:
  shadowsocks-rust-config:
   name: shadowsocks-rust-config

networks:
  br0:    
    external: true

Конфигурация 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.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Последовательность загрузки инсталляторов SoftEther VPN с ресурса dev.azure.com

Настройка клиента SoftEther VPN

После установки клиента необходимо интерфейс переключить на английский язык, для этого в пункте меню выбрать Инструменты => Настройки языка в окне выбрать English и нажать кнопку Далее >. Затем Готово и перезагрузить клиента.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Переключение языка в  SoftEther VPN клиенте

Создание виртуального адаптера для клиента SoftEther VPN

В пункте меню выбрать Virtual Adapter => New Virtual Network Adapter. Название по умолчанию VPN можно заменить на любое другое. В списке виртуальных адаптеров должен появиться новый адаптер VPN.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Интерфейс 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: пароль который был указан

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Настройки соединения в SoftEther VPN

Обратите внимание, при переходе на поле Virtual Hub Name в списке должен появиться пункт VPN. После создания подключения необходимо выполнить подключение.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Подключение к серверу в 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

После запуска должно появиться консольное окно.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Окно запуска sslocal.exe

Настройка SoftEther VPN клиента

Для перенаправления сетевого трафика через shadowsocks клиента необходимо открыть свойства соединения Contoso Corporation VPN и в пункте Proxy Type выставить Connect via SOCKS5 Proxy Server, нажать на кнопку Proxy Server Settings. В окне выставить следующие значения:

  • Host Name: 127.0.0.1
  • Port: 1080

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Настройка проксирования сетевого трафика через SOCKS5 прокси

При работе в связке SoftEther VPN + shadowsocks прокси есть один нюанс, который заключается в том, что SoftEther VPN меняет сетевые маршруты при соединении с VPN сервером. В результате получается, что после подключения сетевой трафик от shadowsocks клиента поступает на сетевой интерфейс SoftEther VPN, в результате получается закольцовка и соединение обрывается. Существует два варианта решения этой проблемы: простой и немного сложный.

Простой. Повторно открыть свойства соединения Contoso Corporation VPN, затем нажать на кнопку Advanced Settings. И установить выбор в пункте No Adjustments of Routing Tabley.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Опция не изменять таблицу маршрутизации при установление соединения SoftEther VPN 

Сложный. В настройках проводного или беспроводного соединения компьютера в качестве первичного DNS сервера указать IP-адрес 185.240.242.10 сервера сontoso-server.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Сетевые настройки в Windows

В случае изменения сетевых маршрутов клиент 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  остается тот же.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Создание Windows службы — Shadowsocks Local Service и ее запуск

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Служба 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, затем нажать на кнопку Подключить.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Настройка WireGuard клиента

Переходим по адресу 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

Полный журнал консоли выполнения скрипта setup-client.sh
root@ubuntu:~/softethervpn# ./setup-client.sh
make: Entering directory '/root/softethervpn/vpnclient'
--------------------------------------------------------------------
SoftEther VPN Client (Ver 4.43, Build 9799, Intel x64 / AMD64) for Linux Build Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.
--------------------------------------------------------------------

Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.


RESPONSIBLE ENTITY
==================

...
--------------------------------------------------------------------

make[1]: Entering directory '/root/softethervpn/vpnclient'
Preparing SoftEther VPN Client...
ranlib lib/libcharset.a
ranlib lib/libcrypto.a
ranlib lib/libedit.a
ranlib lib/libiconv.a
ranlib lib/libintelaes.a
ranlib lib/libncurses.a
ranlib lib/libssl.a
ranlib lib/libz.a
ranlib code/vpnclient.a
gcc code/vpnclient.a -fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl -o vpnclient
ranlib code/vpncmd.a
gcc code/vpncmd.a -fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl -o vpncmd
--------------------------------------------------------------------
The preparation of SoftEther VPN Client is completed !

*** How to switch the display language of the SoftEther VPN Client Service ***
SoftEther VPN Client supports the following languages:
  - Japanese
  - English
  - Simplified Chinese

You can choose your prefered language of SoftEther VPN Client at any time.
To switch the current language, open and edit the 'lang.config' file.

Note: the administrative password is not set on the VPN Server. Please set your own administrative password as soon as possible by vpncmd or the GUI manager.

*** How to start the SoftEther VPN Client Service ***

Please execute './vpnclient start' to run the SoftEther VPN Client Background Service.
And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure SoftEther VPN Client.

Of course, you can use the VPN Server Manager GUI Application for Windows / Mac OS X on the other Windows / Mac OS X computers in order to configure the SoftEther VPN Client remotely.

*** For Windows users ***
You can download the SoftEther VPN Server Manager for Windows
from the http://www.softether-download.com/ web site.
This manager application helps you to completely and easily manage the VPN server services running in remote hosts.

*** For Mac OS X users ***
In April 2016 we released the SoftEther VPN Server Manager for Mac OS X.
You can download it from the http://www.softether-download.com/ web site.
VPN Server Manager for Mac OS X works perfectly as same as the traditional Windows versions. It helps you to completely and easily manage the VPN server services running in remote hosts.

*** PacketiX VPN Server HTML5 Web Administration Console (NEW) ***
This VPN Server / Bridge has the built-in HTML5 Web Administration Console.

After you start the server daemon, you can open the HTML5 Web Administration Console is available at

https://127.0.0.1:5555/
or
https://ip_address_of_the_vpn_server:5555/

This HTML5 page is obviously under construction, and your HTML5 development contribution is very appreciated.

--------------------------------------------------------------------

make[1]: Leaving directory '/root/softethervpn/vpnclient'
make: Leaving directory '/root/softethervpn/vpnclient'
The SoftEther VPN Client service has been started.
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.

VPN Tools>check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'...
              Pass
Checking 'Memory Operation System'...
              Pass
Checking 'ANSI / Unicode string processing system'...
              Pass
Checking 'File system'...
              Pass
Checking 'Thread processing system'...
              Pass
Checking 'Network system'...
              Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.

vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>NicCreate vpn_se_nic1
NicCreate command - Create New Virtual Network Adapter
The command completed successfully.

vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>AccountCreate officeuser1
AccountCreate command - Create New VPN Connection Setting
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

The command completed successfully.

vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>AccountPassword officeuser1
AccountPasswordSet command - Set User Authentication Type of VPN Connection Setting to Password Authentication
Please enter the password. To cancel press the Ctrl+D key.

Password: **********
Confirm input: **********

Specify standard or radius: standard

The command completed successfully.

Запуск клиента SoftEther VPN

После установки клиента необходимо вызвать скрипт  vpn-connect.sh  из этого же каталога. Выполним скрипт vpn-connect.sh, команда:

$ ./vpn-connect.sh
Ход выполнения скрипта vpn-connect.sh
root@ubuntu:~/softethervpn# ./vpn-connect.sh
Stopping the SoftEther VPN Client service ...
SoftEther VPN Client service has been stopped.
The SoftEther VPN Client service has been started.
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>AccountConnect officeuser1
AccountConnect command - Start Connection to VPN Server using VPN Connection Setting
The command completed successfully.

vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>AccountList
AccountList command - Get List of VPN Connection Settings
Item                        |Value
----------------------------+--------------------------------------------
VPN Connection Setting Name |officeuser1
Status                      |Connected
VPN Server Hostname         |185.240.242.10:5555 (Direct TCP/IP Connection)
Virtual Hub                 |VPN
Virtual Network Adapter Name|vpn_se_nic1
The command completed successfully.

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
185.240.242.10  192.168.50.1    255.255.255.255 UGH       0 0          0 ens32
192.168.30.0    0.0.0.0         255.255.255.0   U         0 0          0 vpn_vpn_se_nic1
192.168.50.0    0.0.0.0         255.255.255.0   U         0 0          0 ens32
RTNETLINK answers: File exists
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

Connected to VPN Client "localhost".

VPN Client>AccountList
AccountList command - Get List of VPN Connection Settings
Item                        |Value
----------------------------+--------------------------------------------
VPN Connection Setting Name |officeuser1
Status                      |Connected
VPN Server Hostname         |185.240.242.10:5555 (Direct TCP/IP Connection)
Virtual Hub                 |VPN
Virtual Network Adapter Name|vpn_se_nic1

The command completed successfully.
Для проверки публичного IP-адреса выполним команду:

$ 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 прокси
На сервере файл config.json по пути  /var/lib/docker/volumes/shadowsocks-rust-config/_data :

{
    "server": "0.0.0.0",
    "server_port": 8388,
    "password": "{PASSWORD}",
    "timeout": 300,
    "method": "2022-blake3-aes-256-gcm",
    "mode": "tcp_and_udp"
}

На клиенте файл config.json по пути  C:\shadowsocks\config.json :

{
  "locals": [{
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "mode": "tcp_and_udp"
  }],
  "server": "185.240.242.10",
  "server_port": 8388,
  "password": "{PASSWORD}",
  "method": "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, Германия.

Creating VPN network based on WireGuard SoftEther with Shadowsocks
Результаты замеров скорости Интернет соединения

Базовая скорость Интернет соединения напрямую без VPN и Shadowsocks прокси составляет Download — 31 Мб/с, 59 Мб/с — Upload.

Протокол SE-VPN от SoftEther VPN режется до минимума, скорость менее мегабита, но зато поток на Upload без ограничений.

Хорошие результаты показывает WireGuard. Если у вас плохо работает WireGuard, то следует перейти на связку SoftEther VPN + Shadowsocks.

Ресурсы

Вам также может понравиться

About the Author: Anton

Programistik