![](https://devdotnet.org/wp-content/media/softether-vpn-router-title.png)
В предыдущей публикации было рассмотрено подключение клиента к корпоративной сети VPN. Для корпоративного офиса рациональнее развертывать VPN-маршрутизатор. VPN-маршрутизатор позволяет прозрачно подключать сотрудников к корпоративной сети. Маршрутизатор может быть реализован в виде программного решения как виртуальная машина VMware так и нативно на одноплатном компьютере. В публикации рассматривается развертывание SoftEther VPN сервера в качестве VPN-маршрутизатора для локальной сети офиса. Для упрощения развертывания не рассматривается вариант разделения адресного пространства серверов и узлов сети Интернет, т.е. весь исходящий сетевой трафик из корпоративного офиса, в том числе и в сеть Интернет, маршрутизируется через VPN-сервер.
Оглавление
- Постановка задачи
- Архитектура
- VPN-маршрутизатор
- Создание и начальная настройка ВМ VM-SoftEther-VPN-router
- Развертывание Shadowsocks клиента в ВМ VM-SoftEther-VPN-router
- Развертывание SoftEther VPN сервера в ВМ VM-SoftEther-VPN-router
- Шаг 1 — Установка сервера SoftEther VPN
- Шаг 2 — Создание системного сервиса и запуск SoftEther VPN
- Шаг 3 — Загрузка менеджера управления сервером SoftEther VPN
- Шаг 4 — Настройка языка для менеджера управления сервером SoftEther VPN
- Шаг 5 — Создание профиля подключения в менеджере управления сервером SoftEther VPN
- Шаг 6 — Настройка сервера SoftEther VPN в менеджере управления
- Тестирование VPN-маршрутизатора
- Ресурсы
Постановка задачи
В филиале Contoso Corporation локальной сети развернуть VPN-маршрутизатор на базе сервера SoftEther VPN для доступа к корпоративным сервисам. Все рабочие станции должны быть в локальной сети подключены к VPN-маршрутизатору. На рабочих станциях не должно быть никакого дополнительного ПО для доступа к корпоративной сети Contoso, доступ к ресурсам должен быть прозрачен для любого клиента. Передаваемые данные через сеть Интернет должны быть зашифрованы на уровне VPN-маршрутизатора. VPN-маршрутизатор должен работать ОС версии не ниже Ubuntu Server 22.04 LTS.
Архитектура
На сервере сontoso-server необходимо развернуть WireGuard VPN сервер и Shadowsocks прокси. Как это сделать указано в публикации Создание корпоративной сети VPN на базе решений SoftEther VPN/WireGuard с Shadowsocks-туннелированием.
В филиале локальной сети Contoso Corporation развертывается виртуальная машина VMWare VM-SoftEther-VPN-router с двумя сетевыми интерфейсами, которая выступает в качестве SoftEther VPN маршрутизатора. ВМ (виртуальная машина) работает под ОС Ubuntu 22.04.2 LTS (Jammy Jellyfish). Вместо ВМ подойдет одноплатный компьютер с двумя проводными Ethernet интерфейсам, работающий на дистрибутиве основанным на ОС Ubuntu или Debian, например Armbian.
Незашифрованный сетевой трафик рабочих станций направляется в VPN-маршрутизатор, затем поступает в локальный SoftEther VPN сервер где и зашифровывается, после этого на этом же узле передается Shadowsocks клиенту по протоколу SOCKS5. Далее через сеть Интернет сетевой трафик передается в Shadowsocks прокси расположенный на сервере сontoso-server.
Shadowsocks клиент — реализация от проекта GitHub shadowsocks/shadowsocks-rust.
Способ развертывания:
- сервер SoftEther VPN на VM-SoftEther-VPN-router: нативно из исходников;
- Shadowsocks клиент на VM-SoftEther-VPN-router: как docker-контейнер — образ ghcr.io/shadowsocks/sslocal-rust.
Схема корпоративной сети Contoso Corporation с SoftEther VPN маршрутизатором и Shadowsocks прокси (в формате Visio)
VPN-маршрутизатор
VPN-маршрутизатор — это маршрутизатор с дополнительным ПО, в задачу которого входит организация VPN туннеля до VPN сервер. Сетевой трафик весь или частично поступающий в VPN-маршрутизатор зашифровывается и передается по VPN туннелю, это является основной задачей VPN-маршрутизатора. Дополнительно VPN-маршрутизатор избавляет от необходимости каждый раз устанавливать на каждое рабочее место VPN-клиент, в особенности это играет большую роль в случае использование различных ОС. VPN-маршрутизатор по отношению к пользователю рабочей станции работает по принципу «включил и забыл», т.е. не требует от пользователя выполнение каких либо настроек и действий для его использования. В отличие от прямого доступа к сети Интернет, необходимо помнить о снижение скорости и увеличение отклика до различных Интернет-ресурсов. Это связанно с тем, что сетевой трафик дополнительно приходится шифровать и передавать на удаленный VPN-сервер.
Создание и начальная настройка ВМ VM-SoftEther-VPN-router
Шаг 1 — Добавление сетевых адаптеров
Выполняем установку Ubuntu 22.04.2 LTS в ВМ, затем добавляем в конфигурацию ВМ второй сетевой адаптер. Сетевой адаптер добавляется в настройках Virtual Machine Settings, кнопка Add…
Настройки виртуальной машины с двумя сетевыми адаптерами
Первый сетевой адаптер в виртуальный машине должен быть подключен к локальной сети офиса, второй сетевой адаптер подключен к изолированной виртуальной сети VMnet2 к которой подключаются виртуальные машины.
Подключение к сетям сетевых адаптеров виртуальной машины
После запуска ВМ VM-SoftEther-VPN-router выполним команду ip a для определения наименования сетевых интерфейсов.
Шаг 2 — Настройка сетевых адаптеров
Для настройки сетевых адаптеров используется утилита netplan , в случае отсутствия установить пакет netplan.io . Команда установки пакета:
$ sudo apt-get update $ sudo apt-get install -y netplan.io mc
Где пакет mc используется для редактирования текстовых файлов, в него входит редактор mcedit .
После установки, по пути /etc/netplan должен быть доступен конфигурационный файл 00-installer-config.yaml в формате YAML.
Содержимое файла 00-installer-config.yaml:
# This is the network config written by 'subiquity' network: version: 2 renderer: networkd ethernets: ens32: dhcp4: yes
Зададим другие настройки для сетевого интерфейса ens32 и добавить конфигурацию для ens34.Открываем файл 00-installer-config.yaml в редакторе mcedit командой:
$ sudo mcedit /etc/netplan/00-installer-config.yaml
И заменяем содержимое на следующий итоговый вариант:
# This is the network config written by 'subiquity' network: version: 2 renderer: networkd ethernets: ens32: dhcp4: yes nameservers: addresses: [1.1.1.1, 8.8.8.8] ens34: dhcp4: no addresses: - 192.168.101.2/24
Где 192.168.101.2 — IP-адрес сетевого интерфейса ens34, и он же шлюз для изолированной виртуальной сети VMnet2. Но в данной конфигурации IP-адрес не важен т.к. SoftEther VPN нативно через себя пропускает весь сетевой трафик в рамках текущей задачи.
Сохраняем изменения F2 и закрываем редактор F10 .
Для принятия настроек выполняем команду, и подтверждаем новые настройки, нажимаем на ENTER:
$ sudo netplan try
Заново выводим список сетевых интерфейсов для проверки, командой ip a и проверяем новую конфигурацию.
Развертывание Shadowsocks клиента в ВМ VM-SoftEther-VPN-router
Шаг 1 — Развертывание Docker и создание внутренней сети для docker-контейнеров
Развертывание Shadowsocks клиента как docker-контейнер самый простой вариант т.к. не тянет за собой набор зависимостей, поэтому на маршрутизаторе развернем Docker. Установка Docker просто и быстро выполняется по руководству Простая установка Docker в Armbian/Linux для ARM, данное руководство подойдет и для платформы x86.
До создания docker-контейнеров создадим стандартную внутреннюю сеть типа bridge с названием br0. Где диапазон адресов для docker-контейнеров 172.31.1.1 — 172.31.1.126, шлюз 172.31.1.127.
Bridge — это внутренняя сеть Docker, изолированная от сети хоста. Вы можете получить доступ из сети Интернет или локальной сети к контейнерам только через те порты, которые открыты при запуске контейнера командой -p . Можно создать любое количество сетей типа bridge.
Если виртуальная сеть уже создана, то этот шаг можно пропустить. Команда создания сети br0:
$ sudo docker network create \ --driver=bridge \ --subnet=172.31.1.0/24 \ --ip-range=172.31.1.0/25 \ --gateway=172.31.1.127 \ br0
После создания внутренней сети просмотрим список сетей docker, командой docker network ls :
Внутренняя сеть br0 создана. Переходим к следующему шагу развертывания Shadowsocks клиента.Шаг 2 — Создание конфигурации для Shadowsocks клиента
До запуска Shadowsocks клиента необходимо создать конфигурационный файл sslocal-config.json. Данный файл разместим по пути /etc/ , где и хранятся все конфигурационные файлы системы. Откроем файл конфигурации на редактирование, команда:
$ sudo mcedit /etc/sslocal-config.json
И вставим конфигурацию, которую подготавливали для Windows, в разделе Шаг 2 — Настройка работы клиента SoftEther VPN через Shadowsocks прокси, но изменим в части IP-адреса, 127.0.0.1 заменим на 0.0.0.0.
Содержание файла /etc/sslocal-config.json :
{ "locals": [{ "local_address": "0.0.0.0", "local_port": 1080, "mode": "tcp_and_udp" }], "server": "185.240.242.10", "server_port": 8388, "password": "{PASSWORD}", "method": "chacha20-ietf-poly1305" }
Если на сервере настраивали протокол Shadowsocks-2022 AEAD-2022, то строку method можете изменить на тот вариант, который вы выбрали, и порт подключения, строка server_port.
Сохраняем изменения F2 и закрываем редактор F10 .
Шаг 3 — Развертывание docker-контейнера с Shadowsocks клиентом
Развертывание Shadowsocks клиента на маршрутизаторе выполним на основе docker-образа ghcr.io/shadowsocks/sslocal-rust.
- IP-адрес контейнера во внутренней сети br0: 172.31.1.2;
- Порт для подключения по протоколу SOCKS5: 1080/tcp.
Выполним команду создания docker-контейнера:
$ docker run -d \ --name=sslocal-rust \ -p 1080:1080/tcp \ -p 1080:1080/udp \ -v /etc/sslocal-config.json:/etc/shadowsocks-rust/config.json \ --restart=always \ --net br0 \ --ip 172.31.1.2 \ -dit ghcr.io/shadowsocks/sslocal-rust:latest
То же самое в формате YML для docker-compose.
Проверим работоспособность созданного контейнера, командой:
$ docker stats --no-stream
Смотрим логи, командой:
$ docker logs sslocal-rust
Результат выполнения:
root@ubuntu:~# docker stats --no-stream CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 52379cfb092e sslocal-rust 0.00% 1.723MiB / 1.883GiB 0.09% 1.39kB / 0B 15.8MB / 0B 4 root@ubuntu:~# docker logs sslocal-rust /usr/bin/docker-entrypoint.sh: Configuration complete; ready for start up INFO shadowsocks local 1.17.1 build 2023-11-26T16:01:29.423274438+00:00 INFO shadowsocks socks TCP listening on 0.0.0.0:1080 INFO shadowsocks socks5 UDP listening on 0.0.0.0:1080
Проверка Shadowsocks прокси с помощью браузера Firefox
Браузер Firefox позволяет работать с сетью Интернет через различные прокси, среди протоколов, которых поддерживается протокол SOCKS5. Для тестирования Shadowsocks клиента настроим работу браузера Firefox через docker контейнер sslocal-rust. При создании docker контейнера был открыт порт 1080 для приема внешний подключений.Откроем настройки браузера Firefox, Настройки > Настройки сети. Затем выбрать Ручная настройка прокси и указать следующие параметры.
- Узел SOCKS: 192.168.50.18
- Порт: 1080
- SOCKS5
Затем перейти на страниу ifconfig.co для отображения внешнего IP-адреса.
Развертывание SoftEther VPN сервера в ВМ VM-SoftEther-VPN-router
Шаг 1 — Установка сервера SoftEther VPN
Установку сервера SoftEther VPN выполним из исходного текста, это связано с тем, что если запускать сервер как docker контейнер, то не происходит низкоуровневого взаимодействия с Ethernet интерфейсом. Возьмем последнюю версию с репозитория GitHub SoftEtherVPN/SoftEtherVPN. Выполним следующие команды для установки:
$ sudo apt-get update $ sudo apt-get install -y git cmake gcc g++ make pkgconf libncurses5-dev libssl-dev libsodium-dev libreadline-dev zlib1g-dev $ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git $ cd SoftEtherVPN $ git submodule init && git submodule update $ ./configure $ make -C build $ sudo make -C build install
Шаг 2 — Создание системного сервиса и запуск SoftEther VPN
После установки сервера в операционной системе зарегистрируется системный сервис под названием softether-vpnserver. Данный сервис необходимо перевести в режим автозапуска после старта операционной системы, командой:
$ sudo systemctl enable softether-vpnserver
Запустим сервис командой:
$ sudo systemctl start softether-vpnserver
Для остановки сервиса используется следующая команда (выполнять не надо):
$ sudo systemctl stop softether-vpnserver
После запуска сервиса убедимся в нормальной работе путем просмотра статуса командой:
$ systemctl status softether-vpnserver
Если статус active (running), то можно приступать к конфигурированию сервера SoftEther VPN.
Результат выполнения команды:
root@ubuntu:~/SoftEtherVPN# systemctl status softether-vpnserver ● softether-vpnserver.service - SoftEther VPN Server Loaded: loaded (/lib/systemd/system/softether-vpnserver.service; enabled; vendor preset: enab> Active: active (running) since Sat 2024-01-06 02:34:37 MSK; 8s ago Process: 3919 ExecStart=/usr/local/libexec/softether/vpnserver/vpnserver start (code=exited, s> Main PID: 3921 (vpnserver) Tasks: 33 Memory: 12.9M CPU: 381ms CGroup: /system.slice/softether-vpnserver.service ├─3921 /usr/local/libexec/softether/vpnserver/vpnserver execsvc └─3922 /usr/local/libexec/softether/vpnserver/vpnserver execsvc Jan 06 02:34:37 ubuntu systemd[1]: Starting SoftEther VPN Server... Jan 06 02:34:37 ubuntu vpnserver[3919]: The SoftEther VPN Server service has been started. Jan 06 02:34:37 ubuntu systemd[1]: Started SoftEther VPN Server.
Шаг 3 — Загрузка менеджера управления сервером SoftEther VPN
Для настройки SoftEther VPN Server используется менеджер управления (только для ОС Windows) загружаемый со страницы SoftEther Download Center, но к сожалению без поддержки конфигурирования протокола SOCKS5. Загрузить менеджер управления с поддержкой SOCKS5 можно двумя путями:
- с зеркала на GitHub;
- с официального ночного Pipeline на портале dev.azure.com.
Для загрузки с зеркала на GitHub достаточно загрузить архив Binaries_x64, все собранные инсталляторы и бинарники доступны на 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 выбрать Binaries_x64, но нажать на три точки справа пункта для показа меню. В этом меню выбрать Download artifacts.
Последовательность загрузки архивов с бинарниками SoftEther VPN с ресурса dev.azure.com
Шаг 4 — Настройка языка для менеджера управления сервером SoftEther VPN
После распаковки архива необходимо интерфейс переключить на английский язык. Для этого запустить менеджер клиента, файл vpncmgr.exe, в пункте меню выбрать Инструменты => Настройки языка в окне выбрать English и нажать кнопку Далее >. Затем Готово и закрыть клиента.
Переключение языка в SoftEther VPN клиенте
Шаг 5 — Создание профиля подключения в менеджере управления сервером SoftEther VPN
Для управления сервером используется утилита vpnsmgr.exe. После запуска утилиты переходим к созданию Соединения, пункт меню New Setting, указываем следующие настройка:
- Setting Name: gateway_to_vpn_contoso_server;
- Host Name: 192.168.50.18;
- Port Number: 5555;
- Password: пароль по умолчанию пустой.
Затем подключаемся к серверу кнопка — Connect.
Шаг 6 — Настройка сервера SoftEther VPN в менеджере управления
При первом подключении появится запрос изменения пароля, указываете новый пароль и нажимаете на кнопку OK.
Затем окно мастера настройки SoftEther VPN Server / Bridge Easy Setup закрываете. В вопросе включения поддержки протокола IPSec, отвечаем No.
Создание витуального хаба VPN
По умолчанию доступен хаб — DEFAULT, удаляем его.
Создаем новый хаб — кнопка Create a Virtual Hub. Укажем Virtual Hub Name: VPN. Открываем настройки хаба кнопка — Manage Virtual Hub.
Новый виртуальный хаб VPN в SoftEther VPN
Настройка каскадного подключения
Настроим каскадное подключение до сontoso-server кнопка Manage Cascade Connections. В окне Cascade Connections on VPN нажимаем на кнопку New.
Создание каскадного подключения в 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: пароль который был указан
- Proxy Type: Direct TCP/IP Connection (No Proxy)
Обратите внимание, при переходе на поле Virtual Hub Name в списке должен появиться пункт VPN. После создания профиля подключения переводим его в режим Online. Поле Status должно измениться на Online (Established).
Включено каскадное подключение до сервера сontoso-server
Если удалось создать подключение, то переключаем работу соединения через прокси по протоколу SOCKS5, для этого повторно открываем настройки соединения, кнопка Edit. Изменяем пункт Proxy Type на Connect via SOCKS5 Proxy Server, затем нажимаем на кнопку Proxy Server Settings. В окрывшеся окне выставить следующие значения:
- Host Name: localhost
- Port: 1080
Подключение к серверу сontoso-server через Shadowsocks прокси
Закрываем окно настроек, переводим соединение в режим выключено Offline, и снова подключаемся, кнопка Online. Поле Status должно измениться на Online (Established). Каскадное подключение к сontoso-server серверу настроено.
Закрываем окно настроек Cascade Connections on VPN и окно управления виртуальным хабом — VPN.
Теперь настроим локальный мост который направит сетевой трафик в хаб VPN, для которого выше было настроено каскадное подключение.
Настройка локального моста
Для настройки моста на главном окне конфигурирования SoftEther VPN нажмем на кнопку Local Bridge Setting.
Главное окно программы конфигурирования Shadowsocks прокси
Заполнить следующие поля:
- Virtual Hub: VPN (виртуальный хаб для моста)
- Type to Create: Bridge with Physical Existing Network Adapter (тип моста, мост с локальным физическим сетевым адаптером)
- LAN Adapter: ens34 (название сетевого адаптера, сетевой трафик которого направляется в виртуальный хаб VPN).
После выбора опций нажимаем на кнопку Create Local Bridge.
Создание Local Bridge в SoftEther VPN
После нажатия на кнопку создания моста, отобразится окно с дополнительной информацией об использование функции локального моста в виртуальной машине. Виртуальная машина должна поддерживать режим «Promiscuous Mode» (MAC Address Spoofing, подмена MAC-адреса). В данном случае в VMWare Workstation эта опция работает.
Использование функции локального моста в виртуальной машине
На этом все настройки закончены, перезапустите ВМ VM-SoftEther-VPN-router для проверки автозапуска SoftEther VPN + Shadowsocks клиента и поднятия моста до сервера сontoso-server.
Тестирование VPN-маршрутизатора
Для тестирования VPN-маршрутизатора создадим новую ВМ VM-Client работающую под ОС Windows 10. Сетевой адаптер подключим к изолированной виртуальной сети VMnet2.
Откроем сетевые настройки адаптера.
Настройки сетевого подключения ВМ VM-Client
SoftEther VPN выдал сетевые настройки. Проверим маршрутизацию трафика путем построения маршрута до сервера с IP-адресом 1.1.1.1 (DNS сервер компании Cloudflare).
Результат выполнения:
C:\Windows\system32>tracert 1.1.1.1 Tracing route to one.one.one.one [1.1.1.1] over a maximum of 30 hops: 1 82 ms 87 ms 83 ms 192.168.30.1 2 92 ms 122 ms 151 ms 172.28.1.127 3 87 ms 83 ms 93 ms *** *** 4 86 ms 89 ms 88 ms *** *** 5 83 ms 84 ms 87 ms ffm-b11-link.ip.twelve99.net [213.248.85.192] 6 83 ms 84 ms 95 ms cloudflare-ic-328337.ip.twelve99-cust.net [62.115.144.199] 7 84 ms 93 ms 83 ms 172.70.244.3 8 94 ms 82 ms 86 ms one.one.one.one [1.1.1.1] Trace complete.
Сетевой трафик проходит через VPN-маршрутизатор.
Сетевые шлюзы:
- 192.168.30.1 — шлюз виртуального хаба VPN на сontoso-server;
- 172.28.1.127 — шлюз внутренней сети br0 docker контейнеров на сontoso-server.
Для проверки внешнего IP-адреса запустим браузер и открыть адрес ifconfig.co. На начальной странице отобразится публичный IP-адрес 85.240.242.10, т.к. теперь весь сетевой трафик маршрутизируется через сервер сontoso-server.
Ресурсы
- How to Install and Configure SoftEther VPN on Ubuntu by liosa.f — OPERAVPS
- How to set up Softether VPN client on Ubuntu 20.04 / Linux [Simple] by Muhammad Faizan — Medium
- 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?