Объединение двух маршрутизаторов между собой при помощи туннеля #WireGuard. При этом, обмениваться маршрутами эти маршрутизаторы будут через протокол #OSPF.
В качестве WAN IP я использую суб-домены. #WireGuard позволяет использовать суб-домены как EndPoint’ы, а уже к суб-доменам приписываются IP-адреса маршрутизаторов. Подобная схема наиболее универсальная, так как не в каждом случае имеется внешний статический IP-адрес, но при использовании скрипта из статьи MikroTik и CloudFlare: Динамический IP для домена любой адрес маршрутизатора можно превратить в статический через суб-домен.
- Маршрутизатор
R1
:- WAN IP:
gw1.example.com
. - LAN IP:
10.1.0.1
. - Network:
10.1.0.0/16
.
- Маршрутизатор
R2
:- WAN IP:
gw2.example.com
. - LAN IP:
10.2.0.1
. - Network:
10.2.0.0/16
.
- Создаём интерфейс #WireGuard:
- Номер порта:
51820
. - Название интерфейса:
wireguard-sts
. - Комментарий:
WireGuard (Site-to-Site)
.
1
2
| /interface wireguard
add listen-port=51820 name=wireguard-sts comment="WireGuard (Site-to-Site)"
|
- Прописываем интерфейсу IP-адрес
10.255.255.1/24
:- Адрес интерфейса:
10.255.255.1/24
. - Интерфейс:
wireguard-sts
. - Комментарий:
[WG] WireGuard (Site-to-Site)
.
1
2
| /ip address
add address=10.255.255.1/24 interface=wireguard-sts comment="[WG] WireGuard (Site-to-Site)"
|
- Указываем маршрут до удалённой сети
R2
:- Адрес удалённой сети
R2
: 10.2.0.0/16
. - Шлюз
R2
: 10.255.255.2
. - Комментарий:
[WG] GW1-GW2
.
1
2
| /ip route
add dst-address=10.2.0.0/16 gateway=10.255.255.2 comment="[WG] GW1-GW2"
|
- Настраиваем фильтры брандмауэра:
- Открыть порт
51820
. - Разрешить трафик из удалённой сети
R2
10.2.0.0/16
в локальную сеть R1
10.1.0.0/16
. - Разрешить трафик из локальной сети
R1
10.1.0.0/16
в удалённую сеть R2
10.2.0.0/16
.
1
2
3
4
| /ip firewall filter
add action=accept chain=input dst-port=51820 in-interface-list=WAN protocol=udp comment="[WG] WireGuard (Site-to-Site)"
add action=accept chain=forward src-address=10.2.0.0/16 dst-address=10.1.0.0/16 comment="[WG] GW2-GW1"
add action=accept chain=forward src-address=10.1.0.0/16 dst-address=10.2.0.0/16 comment="[WG] GW1-GW2"
|
- Создаём интерфейс #WireGuard:
- Номер порта:
51820
. - Название интерфейса:
wireguard-sts
. - Комментарий:
WireGuard (Site-to-Site)
.
1
2
| /interface wireguard
add listen-port=51820 name=wireguard-sts comment="WireGuard (Site-to-Site)"
|
- Прописываем интерфейсу IP-адрес
10.255.255.2/24
:- Адрес интерфейса:
10.255.255.2/24
. - Интерфейс:
wireguard-sts
. - Комментарий:
[WG] WireGuard (Site-to-Site)
.
1
2
| /ip address
add address=10.255.255.2/24 interface=wireguard-sts comment="WireGuard (Site-to-Site)"
|
- Указываем маршрут до удалённой сети
R1
:- Адрес удалённой сети
R1
: 10.1.0.0/16
. - Шлюз
R1
: 10.255.255.1
. - Комментарий:
[WG] GW2-GW1
.
1
2
| /ip route
add dst-address=10.1.0.0/16 gateway=10.255.255.1 comment="[WG] GW2-GW1"
|
- Настраиваем фильтры брандмауэра:
- Открыть порт
51820
. - Разрешить трафик из удалённой сети
R1
10.1.0.0/16
в локальную сеть R2
10.2.0.0/16
. - Разрешить трафик из локальной сети
R2
10.2.0.0/16
в удалённую сеть R1
10.1.0.0/16
.
1
2
3
4
| /ip firewall filter
add action=accept chain=input dst-port=51820 in-interface-list=WAN protocol=udp comment="[WG] WireGuard (Site-to-Site)"
add action=accept chain=forward src-address=10.1.0.0/16 dst-address=10.2.0.0/16 comment="[WG] GW1-GW2"
add action=accept chain=forward src-address=10.2.0.0/16 dst-address=10.1.0.0/16 comment="[WG] GW2-GW1"
|
Написал небольшой сценарий для разворачивания интерфейса WireGuard на маршрутизаторах. Настройки сценария, естественно, разные под каждый из маршрутизаторов. А вот добавлять peer’ы придётся вручную.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| # @package MikroTik / RouterOS / WireGuard
# @author Kai Kimera <mail@kai.kim>
# @copyright 2024 Library Online
# @license MIT
# @version 0.1.0
# @link https://lib.onl/ru/2024/04/146e83d5-f571-5273-9a29-172bf5dc10fe/
# -------------------------------------------------------------------------------------------------------------------- #
# WireGuard interface name.
:local wgName "wireguard-sts"
# WireGuard interface IP address.
:local wgIp "10.255.255.1/24"
# WireGuard port number.
:local wgPort "51820"
# -------------------------------------------------------------------------------------------------------------------- #
# Local router.
# -------------------------------------------------------------------------------------------------------------------- #
# Local router name.
:local wgLocalName "GW1"
# Local network address.
:local wgLocalNetwork "10.1.0.0/16"
# -------------------------------------------------------------------------------------------------------------------- #
# Remote router.
# -------------------------------------------------------------------------------------------------------------------- #
# Remote router name.
:local wgRemoteName "GW2"
# Remote network address.
:local wgRemoteNetwork "10.2.0.0/16"
# -------------------------------------------------------------------------------------------------------------------- #
# -----------------------------------------------------< SCRIPT >----------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #
/interface wireguard
add listen-port=$wgPort name=$wgName \
comment="[WG] $wgName:$wgPort"
/ip address
add address=$wgIp interface=$wgName \
comment="[WG] $wgName:$wgPort"
/ip route
add dst-address=$wgRemoteNetwork gateway=$wgName \
comment="[WG] $wgLocalName-$wgRemoteName"
/ip firewall filter
add action=accept chain=input dst-port=$wgPort in-interface-list=WAN protocol=udp \
comment="[WG] $wgName:$wgPort"
add action=accept chain=forward src-address=$wgRemoteNetwork dst-address=$wgLocalNetwork \
comment="[WG] $wgRemoteName-$wgLocalName"
add action=accept chain=forward src-address=$wgLocalNetwork dst-address=$wgRemoteNetwork \
comment="[WG] $wgLocalName-$wgRemoteName"
|
- Добавить маршрутизатор
R2
в Peers:- Интерфейс:
wireguard-sts
. - Публичный ключ маршрутизатора
R2
: <public-key>
.
Публичный ключ берём от маршрутизатора R2
. - Адрес EndPoint маршрутизатора
R2
: gw2.example.com
. - Порт EndPoint маршрутизатора
R2
: 51820
. - Разрешённые адреса:
10.2.0.0/16
- адрес удалённой сети маршрутизатора R2
.10.255.255.0/24
- общий адрес интерфейсов wireguard-sts
обоих маршрутизаторов.224.0.0.5/32
- мультикастовый адрес протокола #OSPF.
Без этого параметра не будет работать протокол #OSPF.
- Комментарий:
[WG] GW2
.
1
2
| /interface wireguard peers
add allowed-address=10.2.0.0/16,10.255.255.0/24,224.0.0.5/32 endpoint-address=gw2.example.com endpoint-port=51820 interface=wireguard-sts public-key="<public-key>" comment="[WG] GW2"
|
- Добавить маршрутизатор
R1
в Peers:- Интерфейс:
wireguard-sts
. - Публичный ключ маршрутизатора
R1
: <public-key>
.
Публичный ключ берём от маршрутизатора R1
. - Адрес EndPoint маршрутизатора
R1
: gw1.example.com
. - Порт EndPoint маршрутизатора
R1
: 51820
. - Разрешённые адреса:
10.1.0.0/16
- адрес удалённой сети маршрутизатора R1
.10.255.255.0/24
- общий адрес интерфейсов wireguard-sts
обоих маршрутизаторов.224.0.0.5/32
- мультикастовый адрес протокола #OSPF.
Без этого параметра не будет работать протокол #OSPF.
- Комментарий:
[WG] GW1
.
1
2
| /interface wireguard peers
add allowed-address=10.1.0.0/16,10.255.255.0/24,224.0.0.5/32 endpoint-address=gw1.example.com endpoint-port=51820 interface=wireguard-sts public-key="<public-key>" comment="[WG] GW1"
|
На каждом маршрутизаторе настройки полностью идентичные.
- Создаём инстанс:
- Название:
ospf-instance-wg
.
1
2
| /routing ospf instance
add name=ospf-instance-wg
|
- Добавляем Area:
- Название Area:
backbone
. - Название инстанса:
ospf-instance-wg
.
1
2
| /routing ospf area
add instance=ospf-instance-wg name=backbone
|
- Настраиваем шаблоны:
- Интерфейс
bridge1
. - Интерфейс
wireguard-sts
.- Area:
backbone
. - Type:
PTP
(Point-to-Point).
1
2
3
| /routing ospf interface-template
add area=backbone interfaces=bridge1
add area=backbone interfaces=wireguard-sts type=ptp
|
- Настраиваем фильтры брандмауэра:
- Разрешить протокол #OSPF на интерфейсе
wireguard-sts
.
1
2
| /ip firewall filter
add action=accept chain=input in-interface=wireguard-sts protocol=ospf comment="[WG] OSPF"
|