January 8

Дружим Wireguard 3X-UI с Mikrotik

В новом для меня типе туннеля долго не мог разобраться т.к. для его работы нужны ключи шифрования а они бывают Server и Peer бывают Secret и Public какой куда вставлять и что как настраивать будем разбираться.

В ранее оформленной статье мы рассматривали как установить и настроить панель 3X-UI по этому в рамках этой статьи мы рассмотрим только настройку Wireguard.

1) Добавим новый входящий откроем Inbounds -> Add Inbound

Remark - название нашего соединения

Protocol - используемый протокол (выберем Wireguard)

Sniffing - я всегда включаю по умолчанию

Allowed IP's - указываются ip-адрес wireguard-клиента (peer)

Wireguard это относительно простой протокол маршрутизация в котором указывается напрямую в конфигурации.

Если просто то AllowedIPs должен содержать ip-адрес wireguard-клиента (peer) с маской 32, и разрешенные сети (например 192.168.х.0/24) которые при этом не должны пересекаться. Но в этой статье мы рассматриваем VPN сервер для выхода в интернет, а не маршрутизирования сетей по этому тут мы указываем только адреса пира(ов) если их несколько.

Остальные поля заполнятся сами, единственно при желании можете поменять Port.

На этом настройка серверной части закончена, на выходе вы получите конфиг следующего вида:

[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
Address = 10.0.0.2/24
DNS = 1.1.1.1, 1.0.0.1
MTU = 1420
# Wireguard-1
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = yourdomain.com:yourport

Теперь осталось дело за малым настроить Mikrotik и ввести Key куда следует

1) Создадим интерфейс (его нужно создавать всегда и когда Mikrotik является сервером и когда клиентом) WireGuard -> Add

Name - имя интерфейса может быть любое

MTU - следует указывать тоже что и на сервере 3X-UI

PrivateKey - тут указываем SecretKey который берем из настроек Peer в 3X-UI

если рассматривать конфиг то это следующий ключ

[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=

Будьте внимательны все ключи должны заканчиваться знаком «=», если копировать через двойной клик этот знак не выделяется и ключ копируется не полностью!

PublicKey - сгенерируется сам и если всё хорошо он совпадtn с ключом в 3X-UI

2) Создадим клиентское подключение Peer WireGuard -> Peers -> Add

Name - имя peer может быть любое

Allowed IP's - указываются 0.0.0.0/0 и ::/0 т.к. мы будем разрешать весь трафик в туннеле

Endpoint - адрес нашего сервер 3X-UI

Enpoint Port - порт который мы указывали выше в настройках Wireguard

Persistent Keepalive - это время посылки пакета поддерживающего связь не разрывной (если не указывать то микротик будет устанавливать связь только при наличии трафика) рекомендуемое значение 00:00:25

PublicKey - тут указываем PublicKey из настроек Wireguard в 3X-UI

если рассматривать конфиг то это следующий ключ

# Wireguard-1
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=

3) Добавим адрес для нашего интерфейса Wireguard IP -> Address -> Add

Address - берем из настроек Peer в 3X-UI только маску указываем /24

Network - если просто, то тот же адрес только с 0 на конце

Interface - выбираем ранее созданный интерфейс Wireguard

Если всё хорошо то мы увидим успешное рукопожатие в таблице Peers

ВНИМАНИЕ! Если вы не заполняли значение Persistent Keepalive , то пока нет обмена трафиком HandShake не произойдет и в логах Mikrotik будет пусто по этому совет запустите параллельно из терминала ping 10.0.0.1 (внутренний адрес wireguard в 3X-UI), а лучше укажите Persistent Keepalive равный 25с, иначе может сложиться впечатление, что ничего не поднимается (лично потратил на борьбу с несуществующей проблемой часа 3)

4) Так же в дополнение нам нужно добавить правило Masquerade в Firewall, чтоб в дальнейшем маршрутизировать трафик. IP -> Firewall -> NAT -> Add

Chain - выбираем srcnat

Out. Interface - выбираем наш созданный интерфейс Wireguard

На вкладке Action выбираем Masquerade

Дальше настраиваем маршрутизацию как душе угодно. В статье Маршрутизация отдельных приложений я как раз рассматривал один из примеров.