Развёртывание WireGuard в контейнере на EcoRouter

В данном подразделе дана пошаговая инструкция по развёртыванию и запуску WireGuard VPN на маршрутизаторе EcoRouter с использованием Docker-контейнера с userspace-реализацией WireGuard и обеспечению подключения клиента Windows.

Рисунок — Логическая схема развёртывания WireGuard в контейнере на EcoRouter

Шаг 1. Для включения работы с контейнерами на EcoRouter в конфигурационном режиме включите поддержку контейнеров: enable container.

Настройка портов и интерфейсов

Шаг 2. Настройте физический порт:

port ge1
 mtu 9728
 service-instance To_WG
  encapsulation untagged

Шаг 3. Создайте виртуальный порт контейнерной сети:

port virt.0
 virtual-network container WG
 service-instance test
  encapsulation untagged

Шаг 4. Создайте интерфейс сети контейнера:

interface WG
 ip mtu 1500
 connect port virt.0 service-instance test
 ip address 10.10.20.11/24

Шаг 5. Создайте интерфейс подключения клиента WireGuard:

interface WG_upside
 ip mtu 1500
 connect port ge1 service-instance To_WG
 ip address 1.0.0.1/8

Настройка маршрутизации

Шаг 6. Добавьте маршруты:

ip route 10.10.20.0/24 interface WG
ip route 10.200.0.0/24 10.10.20.15

10.10.20.15 — фактический IP-адрес контейнера.

Загрузка образа Docker

Шаг 7. Подготовьте образ WireGuard. Он должен быть упакован в архивный файл tar (wg-userspace.tar).

Шаг 8. Скопируйте образ на маршрутизатор командой: copy scp container user@10.10.10.5:/var/tmp/wg-userspace.tar, где 10.10.10.5 — linux-машина с tar-файлом. После загрузки роутер автоматически импортирует образ.

Шаг 9. Проверьте образ командой show docker images. В списке должен появиться образ wg-userspace:latest. Заметьте, что запускаться будет именно контейнер с меткой latest.

Запуск контейнера

Шаг 10. Контейнер должен быть запущен в виртуальной сети WG. После запуска проверьте его состояние командой show docker ps. Ожидаемый вывод:

CONTAINER ID   IMAGE         STATUS
ef6035418d84   wg-userspace  Up

Проверка контейнера

Шаг 11. Если контейнер самопроизвольно перезапускается, причина будет указана в журнале. Просмотрите журнал командой show docker log <container-id>.

Шаг 12. Войдите в контейнер командой docker exec -it <container-id> sh.

Проверка WireGuard внутри контейнера

Шаг 13. Проверьте интерфейс командой ip addr show wg0. Ожидаемый вывод:

wg0
10.200.0.1/24

Шаг 14. Проверьте статус WireGuard командой wg. Ожидаемый вывод:

interface: wg0
public key: <server-key>
listening port: 51820

Шаг 15. Проверьте прослушивание порта командой ss -lnup. Ожидаемый вывод:

0.0.0.0:51820
wireguard-go

Определение IP-адреса контейнера

Шаг 16. Определите реальный IP-адрес контейнера командой ip addr. Ожидаемый вывод:

eth0
inet 10.10.20.15/24

Данный адрес используется в маршрутах роутера и как endpoint клиента.

Проверка сетевой связности

Шаг 17. Выполните команду ping 10.10.20.15 на маршрутизаторе.

Шаг 18. Выполните команду ping 10.10.20.11 и ping 10.10.20.15 в Windows.

Если адрес контейнера 10.10.20.15 не пингуется — туннель не будет работать.

Добавление клиента WireGuard

Шаг 19. Добавьте узел (peer) командой в контейнере: wg set wg0 peer /g1BAjwRSwH8v6kpyA4+BDWgBA2OHsaizyql7j5mjEg= allowed-ips 10.200.0.2/32.

Шаг 20. Проверьте публичный ключ дав команду wg в контейнере. В выводе должен присутствовать введённый на прошлом шаге публичный ключ клиента WireGuard: /g1BAjwRSwH8v6kpyA4+BDWgBA2OHsaizyql7j5mjEg=.

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

Шаг 21. Настройте следующие сетевые параметры под Windows: IP-адрес 1.0.0.3; маску подсети 255.0.0.0; шлюз 1.0.0.1.

Шаг 22. Сконфигурируйте клиента WireGuard следующим образом:

[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.200.0.2/24
[Peer]
PublicKey = tfQq7jZFgPZMGYNXukp3RB2ER0NibANlaIOGArb6vzI= - публичный ключ сервера WG
Endpoint = 10.10.20.15:51820
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25

Проверка работы туннеля

Шаг 23. После активации туннеля в Windows выполните в контейнере команду wg. Ожидаемый вывод:

latest handshake: 34 seconds ago
transfer: 1.68 KiB received

Проверка VPN

Шаг 24. В Windows выполните команду ping 10.200.0.1. Если пинг проходит — туннель работает.