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 to10.10.7.0/24
;endpoint-address
: javni IP naslov Wireguard strežnika;endpoint-port
: vrata, kamor se povezujejo Wireguard vrstniki (privzeto so51194
);interface
: Wireguard vmensik za katerega veljano nastavitve (v našem primeruwireguard1
);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.
Ključne besede: Mikrotik, VPN