MikroTik WireGuard VPN site to site

WireGuard to niezwykle prosty, szybki i nowoczesny VPN. Wykorzystuje najnowocześniejszą kryptografię. W założeniu ma być pod wieloma względami lepszy niż IPSec czy OpenVPN.

Omówię prosty przypadek połączenia dwóch lokalizacji firmy (dwóch routerów). Topologia jest następująca:

Choć opis jest długi, to całość konfiguracji składa się z czterech prostych kroków. Pełną konfigurację zamieściłem na końcu tego wpisu.

Krok pierwszy. Na obydwu routerach dodajemy interfejsy WireGuard. Zwróć uwagę, że w tych komendach ustawiamy tylko numer portu. na którym nasłuchuje router (w tym przypadku 12345).

Na R1:

/interface wireguard add listen-port=12345 mtu=1420 name=wireguard-to-r2

Na R2:

/interface wireguard add listen-port=12345 mtu=1420 name=wireguard-to-r1

Z gui WinBox jest to zakładka WireGuard/WireGuard:

Po dodaniu interfejsów klucze (prywatny i publiczny) generowane są automatycznie, można je podejrzeć za pomocą komendy:

/interface/wireguard/print

Krok drugi. Dodajemy teraz na każdym routerze informację na temat jego sąsiada (peer). Dodając informacje na przemiennie, czyli w konfiguracji routera R1 wpisujemy klucz publiczny (Public Key) z routera R2. Analogicznie postępujemy Publicznym adresem IP (Endpoint) oraz adresacją sieci LAN obydwu routerów (Allowed Addresss). Jedynie podsieć interfejsów WireGuard (10.12.1.0/30) na obydwu routerach jest taka sama. Całość operacji obrazuje poniższa grafika:

Komendy w tym kroku do wykonania:

Na R1:

/interface wireguard peers
add allowed-address=10.12.1.0/30,192.168.22.0/24 endpoint-address=2.2.2.2 \
    endpoint-port=12345 interface=wireguard-to-r2 name=peer1 public-key=\
    "OPPJ8Bb6201zgXKVKZ3sjbLZ6QOaZj4u0k54MiQ6Yhg="

Na R2:

/interface wireguard peers
add allowed-address=10.12.1.0/30,192.168.11.0/24 endpoint-address=1.1.1.1 \
    endpoint-port=12345 interface=wireguard-to-r1 name=peer1 public-key=\
    "dsV0/Vxtu0+0jf/DGno9SjygaKKCon25qGYx7QkY3Hk="

Krok trzeci. Ustawiamy adresację utworzonych wcześniej interfejsów WireGuard.

Na R1:

/ip address add address=10.12.1.1/30 interface=wireguard-to-r2 network=10.12.1.0

Na R2:

/ip address add address=10.12.1.2/30 interface=wireguard-to-r1 network=10.12.1.0

Po prawidłowym zestawieniu połączenia WireGuard w logu routera R1 pojawia się stosowny wpis: wireguard-to-r2 link up.

Krok czwarty. Ustawienie routingu, tak by była komunikacja między obydwoma sieciami LAN.

Na R1:

/ip route add disabled=no dst-address=192.168.22.0/24 gateway=10.12.1.2 routing-table=main suppress-hw-offload=no

Na R2:

/ip route add disabled=no dst-address=192.168.11.0/24 gateway=10.12.1.1 routing-table=main suppress-hw-offload=no

Koniec 🙂

Jeżeli pomogłem to Postaw mi kawę na buycoffee.to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.

Całość konfiguracji routera R1:

/interface wireguard add listen-port=12345 mtu=1420 name=wireguard-to-r2
/interface wireguard peers add allowed-address=10.12.1.0/30,192.168.22.0/24 endpoint-address=2.2.2.2 endpoint-port=12345 interface=wireguard-to-r2 name=peer1 public-key="OPPJ8Bb6201zgXKVKZ3sjbLZ6QOaZj4u0k54MiQ6Yhg="
/ip address add address=10.12.1.1/30 interface=wireguard-to-r2 network=10.12.1.0
/ip route add disabled=no dst-address=192.168.22.0/24 gateway=10.12.1.2 routing-table=main suppress-hw-offload=no

Oraz R2:

/interface wireguard add listen-port=12345 mtu=1420 name=wireguard-to-r1
/interface wireguard peers add allowed-address=10.12.1.0/30,192.168.11.0/24 endpoint-address=1.1.1.1 endpoint-port=12345 interface=wireguard-to-r1 name=peer1 public-key="dsV0/Vxtu0+0jf/DGno9SjygaKKCon25qGYx7QkY3Hk="
/ip address add address=10.12.1.2/30 interface=wireguard-to-r1 network=10.12.1.0
/ip route add disabled=no dst-address=192.168.11.0/24 gateway=10.12.1.1 routing-table=main suppress-hw-offload=no

Co ciekawe nawet po poprawnej konfiguracji WireGuard oraz prawidłowym ustawieniu routingu między routerami, w polach Rx i Tx nie pojawiały się żadne wartości.

Dopiero, gdy między routerami wysłałem pakiet ICMP echo request (popularny PING), wtedy liczniki zaczęły wskazywać na ruch. Zatem jak sprawdzić czy konfiguracja jest poprawna? Albo wyżej wymieniony PING – wtedy sprawdzamy od razu konfigurację WireGuard i poprawność routingu. Albo możemy wykorzystać pole Persistent Keepalive z konfiguracji Peer WireGuard. Pole to według stron pomocy MikroTik odpowiada za Interwał sekundowy (od 1 do 65535) określający, jak często wysyłać uwierzytelniony pusty pakiet do Peera. Dzięki temu, co wskazaną ilość sekund liczniki będą rosły, a my będziemy mieli potwierdzenie, że WireGuard został prawidłowo skonfigurowany (nie koniecznie routing).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *