Objavljeno:

Povezava Mikrotik usmerjevalnika v Wireguard omrežje

WireGuard je sodoben in hiter VPN, ki je bil tudi formalno verificiran, kar pomeni, da za Wireguard protokol obstaja matematični dokaz, da je varen. V tokratnem prispevku si bomo ogledali kako Mikrotik usmerjevalnik povežemo v Wireguard omrežje, a ne kot strežnik, pač pa kot tim. vrstnika (angl. peer).

Mikrotik je blagovna znamka zmogljivih in cenovno dostopnih omrežnih naprav, na katerih teče poseben operacijski sistem RouterOS. Mikrotik omrežna oprema je na voljo tako za domača omrežja (domači usmerjevalniki, WiFi dostopne točke,…), kot tudi za omrežja manjših ali večjih podjetij, na voljo pa so tudi zelo zmogljivi izdelki, ki jih uporabljajo tudi nekateri ponudniki dostopa do interneta.

A najprej vprašanje, zakaj bi Mikrotik usmerjevalnik sploh želeli povezati v Wireguard (VPN) omrežje kot vrstnika? En scenarij uporabe je, da želimo oddaljeno dostopati do njegovega administrativnega vmesnika. To bi sicer lahko naredili tudi preko njegovega javnega IP naslova, a težava je, če ta ni stalen (no, to je sicer rešljivo), predvsem pa, če je usmerjevalnik “skrit” za NAT-om, torej ni neposredno dostopen iz interneta. Rešitev je torej na dlani - usmerjevalnik nastavimo tako, da se bo sam povezal na VPN strežnik, nato pa bomo do njega dostopali preko njegovega VPN naslova.

Na Mikrotik se lahko povežemo preko spletnega vmesnika, preko aplikacije Winbox ali preko SSH povezave. A najprej nekaj predpriprave.

Če želimo na Mikrotik napravah uporabljati Wireguard, moramo imeti nameščen RouterOS v7 ali novejši. Ker bomo Mikrotik povezali v Wireguard omrežje, potrebujemo Wireguard strežnik - predpostavljamo, da ga že imate postavljenega. Iz njega bomo potrebovali:

  • zunanji IP naslov in vrata kamor se bodo tim. vrstniki povezovali;
  • njegov javni ključ;
  • PSK ključ Mikrotik odjemalca (ki ga ustvarimo kar na Wireguard strežniku);
  • razmislimo pa tudi kateri VPN IP naslov bomo dodelili Mikrotiku.

Zdaj pa se vrnimo na Mikrotik. V spletnem vmesniku ali Winboxu odpremo konzolo (če se povežemo preko SSH samodejno vstopimo vanjo) in najprej ustvarimo nov omrežni vmesnik z menom wireguard1, ki posluša na nekih vratih (nastavimo lahko katerakoli, ki niso zasedena, v našem primeru 51821):

/interface/wireguard/add listen-port=51821 name=wireguard1

Če želimo videti seznam Wireguard omrežnih vmesnikov, vpišemo ukaz:

/interface/wireguard/print

Dobimo izpis, kjer vidimo tudi zasebni in javni ključ Mikrotik vrstnika:

Flags: X - disabled; R - running 
 0  R name="wireguard1" mtu=1420 listen-port=51820 private-key="zasebni-kljuc-Mikrotik-vrstnika" public-key="javni-kljuc-Mikrotik-vrstnika"

Opomba, če bi želeli Wireguard vmesnik z imenom wireguard1 odstraniti, to storimo z ukazom: /interface/wireguard/remove wireguard1.

Zdaj dodamo povezavo do Wireguard strežnika:

/interface/wireguard/peers add allowed-address=10.10.7.0/24 endpoint-address=xx.xx.xx.xx endpoint-port=51194 interface=wireguard1 persistent-keepalive=5s public-key="javni-kljuc-wg-streznika" preshared-key="PSK-kljuc-Mikrotik-vrstnika

Razlaga:

  • allowed-address: tukaj vpišemo Wireguard podomrežje (iz Wireguard strežnika), v našem primeru je to 10.10.7.0/24;
  • endpoint-address: javni IP naslov Wireguard strežnika;
  • endpoint-port: vrata, kamor se povezujejo Wireguard vrstniki (privzeto so 51194);
  • interface: Wireguard vmensik za katerega veljano nastavitve (v našem primeru wireguard1);
  • persistent-keepalive: določimo, da bo odjemalec do strežnika ohranjal aktivno povezavo tako, da bo vsakih 5 sekund (5s) na strežnik poslal ping;
  • public-key: javni ključ Wireguard strežnika;
  • preshared-key: PSK ključ Mikrotik vrstnika.

Seznam vrstnikov lahko tudi pogledamo (v našem primeru imamo seveda samo enega):

/interface/wireguard/peers print
Columns: INTERFACE, PUBLIC-KEY, ENDPOINT-ADDRESS, ENDPOINT-PORT, ALLOWED-ADDRESS, PRESHARED-KEY, PERSISTENT-KEEPALIVE      
# INTERFACE   PUBLIC-KEY                                    ENDPOINT-ADDRESS  ENDPOINT-PORT  ALLOWED-ADDRESS  PRESHARED-KEY                                 PE
0 wireguard1  javni-kljuc-Mikrotik-vrstnika                 xx.xx.xx.xx               51194  10.10.7.0/24     PSK-kljuc-Mikrotik-vrstnika                   5s

Kratka opomba, če bi želeli ta vnos (z zaporedno številko 0, označeno na začetku) odstraniti, uporabimo ukaz: /interface/wireguard/peers> /interface/wireguard/peers/remove numbers=0.

Zdaj je na Wireguard strežniku potrebno v nastavitveno datoteko wg0.conf dodati:

  • javni ključ Wireguard strežnika
  • PSK ključ Mikrotik vrstnika
  • IP naslov Mikrotik vrstnika (v našem primeru smo uporabili 10.10.7.155)

Primer (nastavitvena datoteka /etc/wireguard/wg0.conf):

[Peer]
# MojMikrotik
PublicKey = javni-kljuc-Mikrotik-vrstnika
PresharedKey = PSK-kljuc-Mikrotik-vrstnika
AllowedIPs = 10.10.7.155/32

Na tej točki na Wireguard strežniku ponovno naložimo nastavitve:

systemctl reload wg-quick@wg0.service

Vrnemo se na Mikrotik. Zdaj je na Mikrotiku na Wireguard omrežni vmesnik potrebno dodati IP naslov, ki smo ga določili na strežniku:

/ip address add address=10.10.7.155/32 interface=wireguard1

Nato pa še tim. omrežno pot (angl route):

/ip route add dst-address=10.10.7.0/24 gateway=wireguard1

S tem je Mikrotik povezan v Wireguard omrežje. A verjetno boste opazili, da povezava iz Wireguard omrežja do Mikrotika ne deluje, saj jo onemogoča požarni zid. Treba je torej dodati pravilo, da Mikrotik dovoli povezave iz Wireguard omrežja:

/ip firewall filter add action=accept chain=input comment="Access from Wireguard network" in-interface=wireguard1 src-address=10.10.7.0/24

Vendar pa verjetno povezava kljub temu ne bo delala, saj se vsako novo pravilo samodejno doda na konec seznama pravil. Pravilo je potrebno prestaviti nekoliko višje navzgor, točneje, takoj pred pravilo, ki zavrže vse paketke, ki ne prihajajo iz LAN omrežja. Najprej izpišemo seznam pravil:

/ip firewall filter print

Nato pa to zadnje pravilo premaknemo na višje mesto:

/ip firewall filter move N destination=D

Razlaga:

  • N je trenutna zaporedna številka pravila
  • D je na katero mesto naj se prestavi to pravilo

Primer trenutnih pravil, s katerimi blokiramo vse zunanje povezave (razen iz Wireguard omrežja), dovolimo pa povezave znotraj LAN omrežja in povezave navzven:

/ip firewall filter print

Izpis seznama pravil:

Flags: X - disabled, I - invalid; D - dynamic 
 0  D ;;; special dummy rule to show fasttrack counters
      chain=forward action=passthrough 

 1    ;;; defconf: accept established,related,untracked
      chain=input action=accept connection-state=established,related,untracked 

 2    ;;; defconf: drop invalid
      chain=input action=drop connection-state=invalid 

 3    ;;; defconf: accept ICMP
      chain=input action=accept protocol=icmp 

 4    ;;; defconf: accept to local loopback (for CAPsMAN)
      chain=input action=accept dst-address=127.0.0.1 

 5    ;;; Block new connections from outside
      chain=input action=drop connection-state=new in-interface-list=WAN 

 6    ;;; Access from Wireguard network
      chain=input action=accept src-address=10.10.7.0/24 in-interface=wireguard1 

 7    ;;; defconf: drop all not coming from LAN
      chain=input action=drop in-interface-list=!LAN 

 8    ;;; defconf: accept in ipsec policy
      chain=forward action=accept ipsec-policy=in,ipsec 

 9    ;;; defconf: accept out ipsec policy
      chain=forward action=accept ipsec-policy=out,ipsec 

10    ;;; defconf: fasttrack
      chain=forward action=fasttrack-connection hw-offload=yes connection-state=established,related 

11    ;;; defconf: accept established,related, untracked
      chain=forward action=accept connection-state=established,related,untracked 

12    ;;; defconf: drop invalid
      chain=forward action=drop connection-state=invalid 

13    ;;; defconf: drop all from WAN not DSTNATed
      chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN 

S tem je Mikrotik postal povezan v Wireguard omrežje. Do njega lahko dostopamo preko IP naslova 10.10.7.155.

Vsekakor se iz nekega zunanjega strežnika in iz Wireguard omrežja splača preveriti ali požarni zid deluje. Najprej preverimo odprta vrata na Mikrotiku iz Wireguard omrežja: nmap 10.10.7.155. Izpis:

Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-20 13:33 UTC
Nmap scan report for 10.10.7.155
Host is up (0.057s latency).
Not shown: 993 closed tcp ports (reset)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
53/tcp   open  domain
80/tcp   open  http
2000/tcp open  cisco-sccp
8291/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 1.15 seconds

Nato pa še preko zunanjega IP naslova Mikrotika (nmap xx.xx.xx.xx):

Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-20 13:33 UTC
Nmap scan report for xx.xx.xx.xx
Host is up (0.052s latency).
All 1000 scanned ports on xx.xx.xx.xx are in ignored states.
Not shown: 1000 filtered tcp ports (no-response)

Nmap done: 1 IP address (1 host up) scanned in 53.08 seconds

Iz nmap izpisa je razvidno, da administrativni in drugi vmeniki Mikrotika iz njegovega javnega IP naslova niso dosegljivi, iz Wireguard omrežja pa je vse dosegljivo.

Z opisanim postopkom smo torej Mikrotik napravo nastavili, da se ob zagonu samodejno poveže v VPN omrežje in nam je potem iz VPN omrežja tudi vedno dosegljiva.

Kategorije: Odprta koda
Ključne besede: Mikrotik, VPN