Настройка WireGuard на VPS и подключение MikroTik как клиента: пошаговое руководство

Настройка WireGuard на VPS и подключение MikroTik как клиента: пошаговое руководство

Быстрый ответ
Установи WireGuard на VPS с Ubuntu, сгенерируй пару ключей для сервера и клиента, создай конфиг /etc/wireguard/wg0.conf с пиром, включи IP-форвардинг и NAT через iptables. На MikroTik добавь интерфейс WireGuard, пропиши peer с публичным ключом VPS и IP-адрес, настрой маршрут. Туннель поднимается за 10-15 минут.

Диагноз: в чём проблема и что ты получишь

Поднял MikroTik. Хочешь завернуть трафик через VPS или получить фиксированный IP для доступа к ресурсам. OpenVPN — медленно и больно. Туннели через SSH — костыли. WireGuard — это то, что нужно.

По факту: WireGuard в RouterOS появился с версии 7.1. Если у тебя 6.x — сначала обнови, потом читай дальше. Версии 6.x не умеют WireGuard от слова совсем.

Что получишь на выходе:

  • WireGuard сервер на VPS (Ubuntu 20.04 / 22.04 / 24.04)
  • MikroTik в роли клиента с туннелем до VPS
  • Весь трафик с MikroTik идёт через VPS или только нужные подсети — на выбор
  • Рабочий мониторинг и автозапуск

Сколько займёт: 20-30 минут если всё идёт гладко. 45 минут если первый раз.

Что нужно:

  • VPS с Ubuntu (любая актуальная версия), root или sudo
  • MikroTik с RouterOS 7.1 или новее
  • Базовые навыки работы с Linux командной строкой

Совместимость версий

Компонент Минимальная версия Рекомендуется Примечание
RouterOS (MikroTik) 7.1 7.10+ WireGuard только в 7.x
Ubuntu (VPS) 20.04 LTS 22.04 / 24.04 LTS В ядре начиная с 5.6
WireGuard (userspace tools) 1.0.0 Актуальная из репо wireguard-tools пакет
Linux kernel 5.6 5.15+ Встроен в ядро с 5.6

На момент публикации актуальна RouterOS 7.14. Перед установкой проверь свежие релизы на mikrotik.com.

Таблица портов и протоколов

Направление Протокол Порт Назначение
Входящий на VPS UDP 51820 WireGuard туннель
Исходящий с VPS UDP 51820 Ответы пирам
Управление VPS TCP 22 SSH (лучше сменить)
Туннель (внутренний) любой любой 10.0.0.0/24 через wg0

Архитектура: как это работает

Схема взаимодействия компонентов: MikroTik устанавливает зашифрованный UDP-туннель до VPS. VPS делает NAT и выпускает трафик в интернет через свой внешний интерфейс.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#ffffff',
    'primaryTextColor': '#1e293b',
    'primaryBorderColor': '#94a3b8',
    'lineColor': '#64748b',
    'fontSize': '15px',
    'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
  },
  'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
    A["LAN\n192.168.1.0/24"] --> B["MikroTik\nwg0: 10.0.0.2"]
    B -->|"UDP 51820\nзашифровано"| C["VPS Ubuntu\nwg0: 10.0.0.1"]
    C --> D["iptables NAT\nMASQUERADE"]
    D --> E["Интернет\neth0"]

    style A fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
    style B fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
    style C fill:#f8fafc,stroke:#0f766e,stroke-width:2px,color:#134e4a
    style D fill:#f8fafc,stroke:#d97706,stroke-width:1px,color:#92400e
    style E fill:#f8fafc,stroke:#16a34a,stroke-width:1px,color:#14532d

Почему именно WireGuard, а не OpenVPN или IPSec

Три причины выбрать WireGuard:

Скорость. WireGuard работает в пространстве ядра. OpenVPN — в userspace. На практике разница 2-3x по пропускной способности на одном и том же железе.

Простота конфига. Конфиг сервера — 10 строк. Конфиг клиента — 8 строк. Не преувеличение — буквально столько. Против нескольких сотен строк в типичном OpenVPN сетапе.

Поддержка в RouterOS. MikroTik нативно поддерживает WireGuard с RouterOS 7. IPSec тоже поддерживает, но его конфигурация — отдельный вид боевого искусства. WireGuard на MikroTik настраивается через GUI за 5 кликов или через terminal за 4 команды.

Минус один: WireGuard не скрывает факт использования VPN так хорошо, как Shadowsocks или V2Ray. Если задача — обход блокировок с DPI — это уже другой разговор.

Установка WireGuard на VPS (Ubuntu)

Подготовка сервера

Подключись к VPS по SSH. Обнови пакеты и установи WireGuard.


apt update && apt upgrade -y
apt install wireguard wireguard-tools -y

На Ubuntu 20.04/22.04/24.04 WireGuard уже встроен в ядро. Пакет wireguard-tools даёт утилиты wg и wg-quick.

Проверь что модуль загружен:


lsmod | grep wireguard

Если вывод пустой — загрузи вручную:


modprobe wireguard

Генерация ключей сервера

WireGuard использует пару ключей: приватный (только у тебя) и публичный (отдаёшь клиентам). Потеряешь приватный — заново генерируй всё.


cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key

Посмотри что получилось:


cat server_private.key
cat server_public.key

Запиши оба ключа. Публичный ключ сервера надо будет вставить в конфиг MikroTik.

Генерация ключей для MikroTik клиента

Ключи для клиента можно сгенерировать прямо на VPS:


wg genkey | tee mikrotik_private.key | wg pubkey > mikrotik_public.key
cat mikrotik_private.key
cat mikrotik_public.key

Либо сгенерировать прямо на MikroTik — раздел про это ниже. Если генеришь здесь — запиши оба ключа.

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

Создай файл конфига:


nano /etc/wireguard/wg0.conf

Вставь содержимое (замени ключи на свои):


[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <сюда_приватный_ключ_сервера>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# MikroTik client
PublicKey = <сюда_публичный_ключ_mikrotik>
AllowedIPs = 10.0.0.2/32
Важно про имя интерфейса
В строке PostUp/PostDown стоит eth0 — это имя внешнего интерфейса на VPS. Проверь своё имя через команду ip a. На многих VPS это может быть ens3, ens18, enp0s3 или venet0. Если поставишь неправильное имя — NAT не заработает.

Проверь имя своего интерфейса:


ip -o link show | grep -v lo | awk '{print $2}' | tr -d ':'

Включение IP-форвардинга

Без этого пакеты не будут маршрутизироваться через туннель.


echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

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


sysctl net.ipv4.ip_forward

Результат должен быть net.ipv4.ip_forward = 1. Если 0 — форвардинг не включён, трафик через туннель идти не будет.

Запуск WireGuard


systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0

Должно быть active (running). Если падает — смотри journalctl -xe | grep wireguard.

Настройка Firewall на VPS

UFW (если используешь)


ufw allow 51820/udp
ufw allow ssh
ufw enable
ufw status
Не забудь про SSH
Если включаешь UFW первый раз — сначала разреши SSH, потом включай файрвол. Иначе заблокируешь себя и придётся идти в консоль VPS через панель провайдера.

iptables (без UFW)

Правила NAT уже прописаны через PostUp в конфиге wg0.conf. Дополнительно можно закрыть ненужные порты:


iptables -A INPUT -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP

Сохрани правила:


apt install iptables-persistent -y
netfilter-persistent save

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

Через Winbox / WebFig (GUI)

Открой Winbox. Перейди в WireGuard.

Нажми плюс — создай новый интерфейс. Имя: wg0. Listen Port можно оставить 13231 или любой другой — для клиента не критично, если нет входящих подключений. Нажми Apply — MikroTik сам сгенерирует пару ключей. Скопируй Public Key — он понадобится на сервере.

Переходи в WireGuard — Peers. Нажми плюс:

  • Interface: wg0
  • Public Key: публичный ключ VPS сервера
  • Endpoint: IP-адрес VPS:51820
  • Allowed Address: 0.0.0.0/0 (весь трафик через туннель) или конкретная подсеть

Через Terminal (CLI)

Это быстрее. Подключись к MikroTik через SSH или открой Terminal в Winbox.

Создай WireGuard интерфейс:


/interface wireguard add name=wg0 listen-port=13231 comment="WireGuard to VPS"

Посмотри сгенерированные ключи:


/interface wireguard print

В выводе будет поле public-key — скопируй его. Это публичный ключ MikroTik, который нужно вставить в конфиг сервера в поле PublicKey секции [Peer].

Если ключи генерировал на VPS, задай приватный ключ вручную:


/interface wireguard set wg0 private-key="<приватный_ключ_mikrotik>"

Добавь IP-адрес на WireGuard интерфейс:


/ip address add address=10.0.0.2/24 interface=wg0

Добавь пир — это сам VPS сервер:


/interface wireguard peers add interface=wg0 \
  public-key="<публичный_ключ_vps_сервера>" \
  endpoint-address=<IP_VPS> \
  endpoint-port=51820 \
  allowed-address=0.0.0.0/0 \
  persistent-keepalive=25

Параметр persistent-keepalive=25 нужен обязательно. MikroTik за NAT не может принять входящие соединения — только инициировать исходящие. Keepalive каждые 25 секунд держит туннель живым и позволяет серверу слать ответы обратно.

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

Если хочешь завернуть весь трафик через VPS:


/ip route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=1 comment="VPN route via WireGuard"
Осторожно с дефолтным маршрутом
Если добавишь маршрут 0.0.0.0/0 через wg0 без исключения для адреса самого VPS — туннель упадёт. Трафик до VPS пойдёт через туннель, туннель потеряет endpoint, туннель упадёт. Классический lockout. Добавь исключение для IP VPS через основной интерфейс.

Правильный вариант — добавить маршрут до IP VPS через основной шлюз:


/ip route add dst-address=<IP_VPS>/32 gateway=<шлюз_провайдера> distance=1 comment="Direct route to VPS"
/ip route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=2 comment="Default via WireGuard"

Если хочешь пускать через VPN только конкретные подсети:


/ip route add dst-address=192.168.100.0/24 gateway=10.0.0.1 comment="Office network via VPN"

Обновление конфига сервера

После того как узнал публичный ключ MikroTik, обнови конфиг на VPS:


nano /etc/wireguard/wg0.conf

Замени заглушку в секции [Peer]:


[Peer]
# MikroTik client
PublicKey = <реальный_публичный_ключ_mikrotik>
AllowedIPs = 10.0.0.2/32

Перезапусти WireGuard на сервере:


systemctl restart wg-quick@wg0

Или добавь пира без перезапуска:


wg set wg0 peer <публичный_ключ_mikrotik> allowed-ips 10.0.0.2/32

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

На VPS


wg show

Смотри на секцию peer. Должно быть:

  • latest handshake — время последнего хэндшейка (должно обновляться)
  • transfer — количество переданных данных (должно расти)
  • endpoint — IP:порт с которого подключился MikroTik

Если latest handshake пусто или давно — туннель не установлен.


wg show wg0
ping -c 4 10.0.0.2

На MikroTik


/interface wireguard peers print

Смотри поле last-handshake — должно обновляться каждые ~2 минуты.


/ping address=10.0.0.1 count=4

Пинг до 10.0.0.1 (VPS) должен проходить. Если проходит — туннель живой.

Проверь маршрутизацию:


/ip route print where gateway=10.0.0.1

Проверь что трафик идёт через VPN:


/tool fetch url="https://api.ipify.org" as-value output=user

Должен вернуть IP-адрес VPS, а не реальный IP провайдера.

Осложнения и типовые ошибки

Всё не так плохо, как ты думаешь. Всё намного предсказуемее.

Туннель не поднимается — нет handshake

Причина 1: Порт 51820/UDP закрыт на VPS


# На VPS:
ufw status | grep 51820
# Или проверь iptables:
iptables -L INPUT -n | grep 51820
# Если правила нет:
ufw allow 51820/udp

Причина 2: Неправильный публичный ключ в конфиге пира.

Перепроверь ключи. Публичный ключ MikroTik должен быть в [Peer] на сервере. Публичный ключ сервера должен быть в параметре public-key пира на MikroTik.

Причина 3: Неправильный endpoint на MikroTik


/interface wireguard peers print detail

Поле endpoint-address должно содержать реальный IP VPS, не приватный.

Туннель поднят, но трафик не идёт

Причина 1: IP-форвардинг не включён на VPS


sysctl net.ipv4.ip_forward
# Должно быть: net.ipv4.ip_forward = 1
# Если 0:
sysctl -w net.ipv4.ip_forward=1

Причина 2: NAT не работает — неправильное имя интерфейса в PostUp


# Проверь правила iptables:
iptables -t nat -L POSTROUTING -n -v
# Должна быть строка с MASQUERADE и правильным интерфейсом

Если строки нет — в конфиге wg0.conf указан неправильный интерфейс в PostUp. Исправь и перезапусти:


systemctl restart wg-quick@wg0

Причина 3: AllowedIPs на MikroTik не включает нужные подсети


/interface wireguard peers print

Поле allowed-address должно содержать 0.0.0.0/0 для полного туннелирования или нужные подсети.

Туннель падает через время

Причина: Нет persistent-keepalive, NAT-сессия на провайдере умирает.


/interface wireguard peers set [find] persistent-keepalive=25

25 секунд — стандартное значение. Можно поставить 15-30.

MikroTik теряет связь с VPS после добавления дефолтного маршрута

Это классика. Нужен явный маршрут до IP VPS через основной шлюз провайдера.


# Узнай текущий шлюз:
/ip route print where dst-address=0.0.0.0/0
# Добавь исключение для VPS:
/ip route add dst-address=<IP_VPS>/32 gateway=<текущий_шлюз> distance=1

wg-quick не запускается при старте системы


systemctl is-enabled wg-quick@wg0
# Если disabled:
systemctl enable wg-quick@wg0

Безопасность

Это не опционально
Голый VPS с включённым форвардингом и без нормального файрвола — это не VPN сервер, это открытый прокси. Минимальные меры безопасности ниже обязательны.

SSH hardening на VPS

Смени порт SSH и отключи парольную аутентификацию:


nano /etc/ssh/sshd_config

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

systemctl restart sshd

Fail2ban против брутфорса


apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban

nano /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

Ограничить AllowedIPs на сервере

В конфиге сервера AllowedIPs для MikroTik должен быть 10.0.0.2/32, не 0.0.0.0/0. Это значит: сервер принимает пакеты от этого пира только если их source IP — 10.0.0.2. Защита от спуфинга.

Альтернативные варианты настройки

WireGuard с несколькими клиентами

Если нужно подключить несколько устройств — добавь секцию [Peer] для каждого:


[Peer]
# MikroTik office
PublicKey = <ключ_mikrotik_1>
AllowedIPs = 10.0.0.2/32

[Peer]
# Laptop
PublicKey = <ключ_ноутбука>
AllowedIPs = 10.0.0.3/32

[Peer]
# Phone
PublicKey = <ключ_телефона>
AllowedIPs = 10.0.0.4/32

Каждый клиент получает свой IP из подсети 10.0.0.0/24.

Site-to-site: пробросить подсеть офиса

Если за MikroTik стоит офисная сеть 192.168.1.0/24 и хочешь иметь к ней доступ через VPS. На сервере в секции [Peer] для MikroTik:


[Peer]
PublicKey = <ключ_mikrotik>
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24

Скрипт автоматической установки

Если поднимаешь не первый раз — есть готовые скрипты:


curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
./wireguard-install.sh

Скрипт задаёт несколько вопросов и поднимает всё сам. Удобно для быстрого старта, но не даёт понимания что происходит. Если что-то сломается — будешь разбираться вслепую.

Резервное копирование

Что бэкапить на VPS: /etc/wireguard/wg0.conf с ключами и сами файлы ключей.


cp -r /etc/wireguard /root/wireguard_backup_$(date +%Y%m%d)
tar czf wireguard_backup.tar.gz /etc/wireguard/

Храни бэкапы не на том же сервере. Если VPS упадёт — бэкап на нём бесполезен.

Восстановление:


tar xzf wireguard_backup.tar.gz -C /
systemctl restart wg-quick@wg0

Бэкап MikroTik:


/export > backup.rsc
/system backup save name=wg-backup

Обновление WireGuard

На VPS

WireGuard встроен в ядро. Обновляется с системными обновлениями:


apt update && apt upgrade -y
wg --version

Если обновляешь ядро — нужна перезагрузка:


reboot
# После перезагрузки:
systemctl status wg-quick@wg0

На MikroTik

Обновление RouterOS через Winbox: System — Package — Check For Updates. Или через CLI:


/system package update check-for-updates
/system package update install

Перед обновлением RouterOS — сделай бэкап. Иногда обновления меняют поведение WireGuard.

Одна строка в конфиге без комментария живёт годами. А потом ты уходишь в отпуск.

Мониторинг и профилактика

Скрипт мониторинга туннеля на VPS


nano /usr/local/bin/wg-monitor.sh

#!/bin/bash
PEER_IP="10.0.0.2"
if ! ping -c 2 -W 3 $PEER_IP > /dev/null 2>&1; then
    echo "WireGuard peer $PEER_IP unreachable, restarting..."
    systemctl restart wg-quick@wg0
fi

chmod +x /usr/local/bin/wg-monitor.sh
echo "*/5 * * * * root /usr/local/bin/wg-monitor.sh" >> /etc/crontab

Просмотр состояния туннеля в реальном времени


watch -n 5 'wg show'

Обновляет вывод каждые 5 секунд. Смотри на latest handshake и transfer.

Логи WireGuard


journalctl -u wg-quick@wg0 -f
journalctl -u wg-quick@wg0 --since "1 hour ago"

FAQ

Почему MikroTik не поддерживает WireGuard на RouterOS 6?

WireGuard интегрировали в RouterOS только в версии 7. В 6.x его нет и не будет — MikroTik прекратил развитие ветки 6.x. Единственный путь — обновить RouterOS до 7.x. Перед обновлением проверь совместимость железа: не всё старое оборудование поддерживает 7.x.

Как проверить что трафик реально идёт через VPN?


# На MikroTik:
/tool fetch url="https://api.ipify.org" as-value output=user
# На компьютере за MikroTik:
curl https://api.ipify.org

Должен вернуть IP-адрес VPS. Если возвращает IP провайдера — маршрутизация не настроена или туннель упал.

Что если VPS сменит IP-адрес?

Возьми статический IP у провайдера или используй DNS-имя в endpoint. RouterOS поддерживает DNS в endpoint-address. При каждом keepalive MikroTik резолвит имя заново. Если IP сменился а DNS нет — просто обнови endpoint:


/interface wireguard peers set [find] endpoint-address=<новый_IP>

Можно ли подключить несколько MikroTik к одному VPS?

Да. Добавь отдельную секцию [Peer] для каждого MikroTik в конфиге сервера. Каждому пиру назначь свой IP из туннельной подсети: 10.0.0.2/32, 10.0.0.3/32 и т.д.

Почему туннель поднимается но DNS не работает?

При полном туннелировании DNS-запросы тоже идут через VPN. Укажи публичный DNS на MikroTik:


/ip dns set servers=1.1.1.1,8.8.8.8

Как временно отключить пира не удаляя конфиг?

На VPS:


# Убрать пира:
wg set wg0 peer <публичный_ключ> remove
# Добавить обратно из конфига:
wg addconf wg0 /etc/wireguard/wg0.conf

На MikroTik:


/interface wireguard peers disable [find]

Итог

Сделал вот что: поднял WireGuard сервер на VPS с корректным NAT и форвардингом, настроил MikroTik как клиента с persistent-keepalive, добавил маршрутизацию и проверил туннель.

Теперь MikroTik держит постоянный зашифрованный туннель до VPS. Весь трафик или нужные подсети идут через него. Туннель автоматически восстанавливается после разрыва. При перезапуске VPS сервис поднимается сам через systemd.

WireGuard — это тот редкий случай когда «просто работает» не маркетинговое клише, а инженерная реальность. 10 строк конфига и нет никаких сертификатов, CA, сложных согласований алгоритмов.

Не заработало? Пиши - разберёмся
Опиши в комментариях: какой шаг выполнил, что получил в выводе wg show, какая ошибка в journalctl. Без этой информации помочь сложно.
Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх