Создание виртуального VPN-маршрутизатора c SoftEther VPN и Shadowsocks-туннелированием [обновлено 31.03.2025]

В предыдущей публикации было рассмотрено подключение клиента к корпоративной сети VPN. Для корпоративного офиса рациональнее развертывать VPN-маршрутизатор. VPN-маршрутизатор позволяет прозрачно подключать сотрудников к корпоративной сети. Маршрутизатор может быть реализован в виде программного решения как виртуальная машина VMware так и нативно на одноплатном компьютере. В публикации рассматривается развертывание SoftEther VPN сервера в качестве VPN-маршрутизатора для локальной сети офиса. Для упрощения развертывания не рассматривается вариант разделения адресного пространства серверов и узлов сети Интернет, т.е. весь исходящий сетевой трафик из корпоративного офиса, в том числе и в сеть Интернет, маршрутизируется через VPN-сервер.

Оглавление

  1. Постановка задачи
  2. Архитектура
  3. VPN-маршрутизатор
  4. Создание и начальная настройка ВМ VM-SoftEther-VPN-router
    1. Шаг 1 — Добавление сетевых адаптеров
    2. Шаг 2 — Настройка сетевых адаптеров
  5. Развертывание Shadowsocks клиента в ВМ VM-SoftEther-VPN-router
    1. Шаг 1 — Развертывание Docker и создание внутренней сети для docker-контейнеров
    2. Шаг 2 — Создание конфигурации для Shadowsocks клиента
    3. Шаг 3 — Развертывание docker-контейнера с Shadowsocks клиентом
  6. Развертывание SoftEther VPN сервера в ВМ VM-SoftEther-VPN-router
    1. Шаг 1 — Установка сервера SoftEther VPN
    2. Шаг 2 — Создание системного сервиса и запуск SoftEther VPN
    3. Шаг 3 — Загрузка менеджера управления сервером SoftEther VPN
    4. Шаг 4 — Настройка языка для менеджера управления сервером SoftEther VPN
    5. Шаг 5 — Создание профиля подключения в менеджере управления сервером SoftEther VPN
    6. Шаг 6 — Настройка сервера SoftEther VPN в менеджере управления
  7. Тестирование VPN-маршрутизатора
  8. Уменьшение размера ВМ VM-SoftEther-VPN-router
  9. Ресурсы

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

В филиале 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.

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

VPN router based on SoftEther VPN with Shadowsocks proxy
Настройки виртуальной машины с двумя сетевыми адаптерами

Первый сетевой адаптер в виртуальный машине должен быть подключен к локальной сети офиса, второй сетевой адаптер подключен к изолированной виртуальной сети VMnet2 к которой подключаются виртуальные машины.

VPN router based on SoftEther VPN with Shadowsocks proxy
Подключение к сетям сетевых адаптеров виртуальной машины

После запуска ВМ VM-SoftEther-VPN-router выполним команду  ip a  для определения наименования сетевых интерфейсов.

Результат выполнения команды ip a
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:23:51:5b brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.50.18/24 metric 100 brd 192.168.50.255 scope global dynamic ens32
       valid_lft 84730sec preferred_lft 84730sec
    inet6 fe80::20c:29ff:fe23:515b/64 scope link
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:0c:29:23:51:65 brd ff:ff:ff:ff:ff:ff
    altname enp2s2
В операционной системе доступно два сетевых адаптера с именами ens32 и ens34. Адаптер ens32 подключен к офисному маршрутизатору (подсеть 192.168.50.0), получен IP-адрес 192.168.50.18. Адаптер ens34 подключен к изолированной виртуальной сети VMnet2, IP-адрес отсутствует т.к. не назначен вручную.

Шаг 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  и проверяем новую конфигурацию.

Результат выполнения
root@ubuntu:/etc/netplan# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:23:51:5b brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.50.18/24 metric 100 brd 192.168.50.255 scope global dynamic ens32
       valid_lft 86322sec preferred_lft 86322sec
    inet6 fe80::20c:29ff:fe23:515b/64 scope link
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:23:51:65 brd ff:ff:ff:ff:ff:ff
    altname enp2s2
    inet 192.168.101.2/24 brd 192.168.101.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe23:5165/64 scope link
       valid_lft forever preferred_lft forever

Развертывание 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 :

Результат выполнения команды
root@ubuntu:~# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
71a41db48110   br0       bridge    local
ebedae05baa2   bridge    bridge    local
c4c3017a544f   host      host      local
f54c80080402   none      null      local
Внутренняя  сеть 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.

sslocal-shadowsocks.yml
version: '3.5'

services:
#Shadowsocks client
  sslocal-rust:
    image: ghcr.io/shadowsocks/sslocal-rust:latest
    container_name: sslocal-rust
    restart: always
    ports:
      - 1080:1080/tcp
      - 1080:1080/udp
    volumes:
      - /etc/sslocal-config.json:/etc/shadowsocks-rust/config.json
    networks:
      br0:
        ipv4_address: 172.31.1.2

networks:
  br0:
    external: true

Проверим работоспособность созданного контейнера, командой:

$ 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

Бинарные исполняемые файлы

Бинарные исполняемые файлы будут размещены по пути  /usr/local/libexec/softether/vpnserver . В этом же каталоге, так же размещается конфигурационный файл  vpn_server.config . В случае переноса сервера SoftEther VPN выполните копирование данного файла, на новый узел.

Шаг 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.

VPN router based on SoftEther VPN with Shadowsocks proxy
Последовательность загрузки архивов с бинарниками SoftEther VPN с ресурса dev.azure.com

Шаг 4 — Настройка языка для менеджера управления сервером SoftEther VPN

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

VPN router based on SoftEther VPN with Shadowsocks proxy
Переключение языка в  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 router based on SoftEther VPN with Shadowsocks proxy
Новый виртуальный хаб VPN в SoftEther VPN

Настройка каскадного подключения

Настроим каскадное подключение до сontoso-server кнопка Manage Cascade Connections. В окне Cascade Connections on VPN нажимаем на кнопку New.

VPN router based on SoftEther VPN with Shadowsocks proxy
Создание каскадного подключения в 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).

VPN router based on SoftEther VPN with Shadowsocks proxy
Включено каскадное подключение до сервера сontoso-server

Если удалось создать подключение, то переключаем работу соединения через прокси по протоколу SOCKS5, для этого повторно открываем настройки соединения, кнопка Edit. Изменяем пункт Proxy Type на Connect via SOCKS5 Proxy Server, затем нажимаем на кнопку Proxy Server Settings. В окрывшеся окне выставить следующие значения:

  • Host Name: localhost
  • Port: 1080

VPN router based on SoftEther VPN with Shadowsocks proxy
Подключение к серверу сontoso-server через Shadowsocks прокси

Закрываем окно настроек, переводим соединение в режим выключено Offline, и снова подключаемся, кнопка Online. Поле Status должно измениться на Online (Established). Каскадное подключение к  сontoso-server  серверу настроено.

Закрываем окно настроек Cascade Connections on VPN и окно управления виртуальным хабом — VPN.

Теперь настроим локальный мост который направит сетевой трафик в хаб VPN, для которого выше было настроено каскадное подключение.

Настройка локального моста

Для настройки моста на главном окне конфигурирования SoftEther VPN  нажмем на кнопку Local Bridge Setting.

VPN router based on SoftEther VPN with Shadowsocks proxy
Главное окно программы конфигурирования Shadowsocks прокси

Заполнить следующие поля:

  • Virtual Hub: VPN (виртуальный хаб для моста)
  • Type to Create: Bridge with Physical Existing Network Adapter (тип моста, мост с локальным физическим сетевым адаптером)
  • LAN Adapter: ens34 (название сетевого адаптера, сетевой трафик которого направляется в виртуальный хаб VPN).

После выбора опций нажимаем на кнопку Create Local Bridge.

VPN router based on SoftEther VPN with Shadowsocks proxy
Создание Local Bridge в SoftEther VPN

После нажатия на кнопку создания моста, отобразится окно с дополнительной информацией об использование функции локального моста в виртуальной машине. Виртуальная машина должна поддерживать режим «Promiscuous Mode» (MAC Address Spoofing, подмена MAC-адреса). В данном случае в VMWare Workstation эта опция работает.

VPN router based on SoftEther VPN with Shadowsocks proxy
Использование функции локального моста в виртуальной машине

На этом все настройки закончены, перезапустите ВМ VM-SoftEther-VPN-router для проверки автозапуска SoftEther VPN + Shadowsocks клиента и поднятия моста до сервера сontoso-server.

Тестирование VPN-маршрутизатора

Для тестирования VPN-маршрутизатора создадим новую ВМ VM-Client работающую под ОС Windows 10. Сетевой адаптер подключим к изолированной виртуальной сети VMnet2.

VPN router based on SoftEther VPN with Shadowsocks proxy
Настройки ВМ VM-Client

Откроем сетевые настройки адаптера.

VPN router based on SoftEther VPN with Shadowsocks proxy
Настройки сетевого подключения ВМ 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.

Уменьшение размера ВМ VM-SoftEther-VPN-router

После успешного тестирования VPN-маршрутизатора необходимо выполнить оптимизацию размера ВМ VM-SoftEther-VPN-router. Далее, требуется выполнить список действий нацеленных на уменьшение размера занимаемого пространства диска виртуальной машиной.

Шаг 1 — Отключение логов в SoftEther VPN

Журналирование настраивается отдельно для каждого хаба. Необходимо запустить vpnsmgr.exe для управления SoftEther VPN. Подключаемся к серверу, открываем настройки хаба, кнопка — Manage Virtual Hub. Далее, кнопка Log Save Settings. По умолчанию включен базовый уровень журналирования.

VPN router based on SoftEther VPN with Shadowsocks proxy
Окно настроек сохранения логов в SoftEther VPN

Но нам требуется отключить любые логи, поэтому снимаем галочки напротив пунктов:

  • Save Security Log;
  • Save Packet Log.

VPN router based on SoftEther VPN with Shadowsocks proxy
Отключение логов в в SoftEther VPN

Затем подтверждает изменение настроек, кнопка ОК.

Файлы журналов хранятся в каталогах по путям:

  •  /usr/local/libexec/softether/vpnserver/packet_log/ 
  •  /usr/local/libexec/softether/vpnserver/security_log/ 
  •  /usr/local/libexec/softether/vpnserver/server_log/ 

Если данные каталоги не пустые, то можете удалить содержимое этих каталогов.

Шаг 2 — Удаление каталога клона репозитория SoftEtherVPN

В процессе установки Softether VPN, репозиторий проекта был клонирован в домашнюю папку, каталог  ~/SoftEtherVPN . Данный каталог далее не потребуется, поэтому можно его удалить. Если установка выполнялась под пользователем root, то необходимо выполнить следующую команду:

rm -rf /root/SoftEtherVPN

Шаг 3 — Уменьшение размера swap файла или его удаление

ВМ не предусматривает выполнение больших вычислительных задач, поэтому, можно либо уменьшить размер файла подкачки (swap файл), либо его удалить. В данном случае, ВМ выделено 2 ГБ ОЗУ и размер swap файла, составляет 2 ГБ, поэтому размер swap файла можно сократить до 1 ГБ.

Уменьшим размер swap файла до 1 ГБ:

 
sudo swapoff /swap.img
sudo rm /swap.img
sudo fallocate -l 1G /swap.img
sudo mkswap /swap.img
sudo swapon /swap.img

Более подробно в посте Как увеличить размер swap в Ubuntu.

Шаг 4 — Отключение системного журнала

Система журналирования в операционных системах Linux работает на базе демона journald, который занимается обработкой сообщений от служб, initrd, ядра и т.д. Доступ к собранной в журнале информации осуществляется путем использования утилиты journalctl. Она же дает возможности для управления: выполнять фильтрацию, менять формат отображения, мониторить активные процессы и пр. Более подробно в посте Инструкция по использованию Journalctl в Linux.

Вначале выполним очистку журнала событий:

 
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s

Теперь необходимо в конфигурационном файле  /etc/systemd/journald.conf  параметр Storage=auto в секции [Journal], изменить на значение Storage=none, не забываем удалить комментарий «#«.

 
root@ubuntu:~# cat /etc/systemd/journald.conf
#  This file is part of systemd.
...
# See journald.conf(5) for details.

[Journal]
Storage=none
#Compress=yes
#Seal=yes
...

Перезагружаем службу и удаляем остальные файлы журналирования:

 
sudo systemctl restart systemd-journald
sudo rm -R /run/log/journal/*

Шаг 5 — Удаление rsyslog

Если в системе установлен rsyslog, то необходимо его отключить:

 
sudo systemctl stop rsyslog
sudo systemctl disable rsyslog

Шаг 6 — Отключение автоматического обновления ОС

Ubuntu периодически загружает новые версии пакетов, в частности обновляет ядро. На протяжение жизни ВМ, занимаемый объем пространства диска устаревших пакетов, может достигать гигабайт. Для отключения автоматического обновления ОС необходимо внести изменения в файл с названием  /etc/apt/apt.conf.d/20auto-upgrades . Вносим в него следующие изменения: установить значение APT::Periodic::Update-Package-Lists и APT::Periodic::Unattended-Upgrade, равное 0:

 
root@ubuntu:~# cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

У пользователя доступна возможность отключать только отдельные источники обновлений. С этой целью необходимо изменить файл конфигураций  /etc/apt/apt.conf.d/50unattended-upgrades . В секции Unattended-Upgrade::Allowed-Origins необходимо выборочно закомментировать отдельные позиции, например:

 
root@ubuntu:~# cat /etc/apt/apt.conf.d/50unattended-upgrades
...
Unattended-Upgrade::Allowed-Origins {
        //"${distro_id}:${distro_codename}";
        //"${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        //"${distro_id}ESMApps:${distro_codename}-apps-security";
        //"${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};
...

Шаг 7 — Cron задача для удаления логов

Если же появляются файлы журналирования событий, то необходимо создать cron задачу для периодического выполнения. В каталоге по пути  /var/scripts/  создадим файл  clearlogs.sh  с периодическим запуском один раз в час.

Создадим каталог:

 
sudo mkdir -p /var/scripts/

Создадим файл  clearlogs.sh :

 
sudo mcedit /var/scripts/clearlogs.sh

Содержимое файла  clearlogs.sh :

 
#!/bin/bash
# Run:
# chmod +x clearlogs.sh
# ./clearlogs.sh

# Clearing system logs
set -e #Exit immediately if a comman returns a non-zero status

#System
find /var/log/ -name "*.*" -type f -exec rm -f {} \;
find /var/log/ -name "*" -type f -exec rm -f {} \;

#SoftEther VPN
find /usr/local/libexec/softether/vpnserver/packet_log/ -name "*.*" -type f -exec rm -f {} \;
find /usr/local/libexec/softether/vpnserver/security_log/ -name "*.*" -type f -exec rm -f {} \;
find /usr/local/libexec/softether/vpnserver/server_log/ -name "*" -type f -exec rm -f {} \;

# exit
exit 0

Выставим флаг исполнения:

chmod +x /var/scripts/clearlogs.sh

Откроем список cron задач:

sudo crontab -e

Если cron не установлен в системе, то необходимо выполнить команду для установки:

sudo apt update && sudo apt install cron  && sudo systemctl enable cron && sudo systemctl status cron

Добавим строки:

# At minute 0 past every 2nd hour.
0 */2 * * * sudo /var/scripts/clearlogs.sh

# after system startup
@reboot sleep 60 && sudo /var/scripts/clearlogs.sh

Для выставления другого рассписания выполнения задачи воспользуйтесь сайтом Crontab.guru — The cron schedule expression generator.

Сохраним изменения и перезапустим службу:

sudo systemctl restart cron
sudo systemctl status cron

Шаг 8 — Удаление лишних пакетов

После обновления ОС остаются устаревшие версии ядер, и другие пакеты. Удалить все старые ядра, кроме используемого и предпоследнего, также можно командой:

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)

Утилита wajig отображает список пакетов в порядке возрастания их размера. Вы можете вывести список пакетов и определить какие требуется удалить.

Установка:

sudo apt update && sudo apt install wajig

Вывести список наибольших по размеру пакетов:

wajig large

Результат выполнения команды:

root@ubuntu:~# wajig large
Package                           Size (KB)        Status
=================================-==========-============
aptitude-common                     10,100      installed
binutils-x86-64-linux-gnu           10,431      installed
linux-image-5.15.0-112-generic      11,443   config-files
...
linux-headers-5.15.0-124            76,130      installed
docker-ce                           94,341      installed
snapd                              101,504      installed
linux-modules-5.15.0-112-generic   112,943   config-files
...
linux-firmware                     929,901      installed

В списке пакетов присутствует пакет snapd, который не используется и занимает 104 МБ дискового пространства. Далее, удалим пакет snapd:

sudo apt purge snapd

Команда  purge  в отличие от  apt remove —auto-remove , удаляет все конфигурационные файлы, связанные с данным пакетом, в том числе и сам пакет.

Шаг 9 — Удаление кэша и остальных неиспользуемых пакетов

Просто выполнить в терминале:

sudo apt clean autoclean -y \
&& sudo apt autoremove -y \
&& sudo apt clean \
&& sudo apt --purge autoremove \
&& sudo rm -rf /var/lib/{cache,log}/ \
&& sudo rm -rf /var/log/* \
&& sudo rm -rf /tmp/* /var/tmp/* \
&& sudo rm -rf /var/cache/fontconfig/ \
&& sudo rm -rf /var/cache/apt/ \
&& sudo rm -rf /var/cache/man/

Дополнительно, можно удалить неиспользуемые старые версии пакетов:

dpkg -l | awk '/^rc/ {print $2}' | xargs sudo dpkg --purge

Вывести список самых больших файлов

Данная команда позволит найти самые большие файлы. Вывод идет в порядке убывания по 10 файлов за раз. Количество выводимых файлов можно изменить, просто изменив число 10 на любое другое:

sudo find -type f -exec du -Sh {} + | sort -rh | head -n 10

Шаг 10 — Сжатие диска ВМ, файл *.vmdk

Несмотря на все действия, выполненные выше, размер диска ВМ, файл *.vmdk не уменьшиться в размере. Для сокращения размера диска *.vmdk необходимо в ВМ выполнить команду:

sudo vmware-toolbox-cmd disk shrink /

Более подробно в посте Уменьшение размера виртуальной машины VMware для гостевой-ОС Linux и освобождение пространства на диске.

Ресурсы

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

About the Author: Anton

Programistik