14.7 VPN cez WireGuard
WireGuard
WireGuard je jednoduchý a rýchly typ VPN spojenia, ktorého cieľom je prekonať IPsec. Ide o multiplatformový projekt, integrovaný aj v MikroTik RouterOS 7. SpojenieNa overenie partnera sa nevyužíva certifikátycertifikát, ale obojstrannúvzájomne výmenuvymenená verejnejverejná častičasť vygenerovaných kľúčov,kľúčov čo- jenepoužíva ekvivalentomsa klasická kryptografia s RSA, ale moderná eliptická asymetrická šifra Curve25519. To môžeme pokladať za ekvivalent self-signed certifikátov. WireGuard Nerozlišujenerozlišuje používateľov, ale len klientske zariadenie.
WireGuard pre šifrovanie prenášaných údajov nepoužíva klasické šifrovanie AES,AES, ale moderný algoritmus ChaCha20, konkrétne variant ChaCha20-Poly1305. KľúčKľúče mápre toto šifrovanie sa bezpečne vymenia algoritmom Diffie-Hellman. Šifra ChaCha20 využíva kľúč s dĺžkou 256 bitov a ide o prúdové šifrovanie - údaje sa šifrujú priebežne po jednom bite v každom bloku, čo znižuje náročnosť a zvyšuje rýchlosť (pozri varianty AES v predošlej kapitole). Samotný kód WireGuardu je navyše veľmi kompaktný a jednoduchý, čo v konečnom dôsledku poskytuje podstatne rýchlejšie šifrovanie bez hardvérovej podpory a pri niektorých zariadeniach rýchlejšie aj ako IPsec s hardvérovo akcelerovaným AES.
Poskytuje ChaCha20 rovnakú bezpečnosť ako AES-256?
Hoci je blokový variant AES-256 CBC v princípe o trochu bezpečnejší ako prúdová šifra ChaCha20, AES má komplikovanejší algoritmus, čo zvyšuje riziko potenciálnej chyby, teda v konečnom dôsledku možno tieto šifrovacie algoritmy pokladať za rovnako bezpečné. Navyše ChaCha20-Poly1305 rieši aj hašovanie, ktoré je bezpečnejšie ako obvyklé SHA.
Konfigurácia MikroTik RouterOS
Konfigurácia v RouterOS je odlišná od ostatných typov VPN - nie je v sekcii PPP, ale samostatne. Nerieši priamo ani smerovanie, ani DNS server - všetko potrebné je nutné nastaviť mimo sekcie WireGuard.
Spojenie dvoch sietí (site-to-site)
Pre vytvorenie site-to-site spojenia (dve pobočky) je potrebné postupovať nasledovne:
- Na oboch stranách vytvoríme rozhranie cez ponuku WireGuard → WireGuard a pomenujeme ho (napríklad „wg-spoj“).
- V prípade potreby môžeme zmeniť náhodne vygenerovaný UDP port (Listen Port) -
štandardneštandardom je 13231. - Automaticky sa vygeneruje súkromný kľúč (Private Key) pre
šifrovaniepotvrdenie-identity,jehoprípadneverejnúhočasťmôžeme zadať ručne. Zo súkromného kľúča sa automaticky vypočíta verejný kľúč (Public Key) - ten skopírujeme a pošleme druhej strane.Rozhranie sa hneď bude javiť ako funkčné (stav running), no prakticky to nič
neznamená,neznamenátreba- musíme si všímať počítadlá údajov, ktoré sú samozrejme zatiaľ nulové.
- V prípade potreby môžeme zmeniť náhodne vygenerovaný UDP port (Listen Port) -
- Zadáme informácie o partnerovi na „druhej strane“ v ponuke WireGuard → Peer:
- Partnera pomenujeme
ho(napríklad „peer-pobocka“), zvolíme vytvorené WireGuard rozhranie (Interface) a zadáme jeho verejný kľúč (Public Key). - Je tiež treba vymenovať cieľové adresy (Allowed Address), ktoré sú dostupné cez toto spojenie - vysvetlenie je na konci tejto kapitoly.
Pokiaľ máme na rozhraní len jedného partnera, môžeme uviesť „
všetko“všetky adresy“ v IPv4 i IPv6, teda0.0.0.0/0a::/0. - Aspoň na jednej strane (typicky u klienta za NAT) musíme zadať verejnú adresu druhej strany - teda adresu servera (Endpoint) a číslo portu (Endpoint Port), štandardne 13231. Zároveň je treba nastaviť hodnotu udržiavania spojenia (Persistent Keepalive) na 25 sekúnd alebo menej - vysvetlenie je na konci tejto kapitoly. Keď tento krok úspešne vykonáme, ožijú počítadlá údajov.
Ak je náš partner za NAT bez presmerovania portu, tak neuvádzame ani jeho adresu, ani port.
druhej strany. - Partnera pomenujeme
- Je vhodné pridať smerovanie do LAN na druhej strane - ako bránu (Gateway) uvádzame názov WireGuard rozhrania.
- Ak chceme komunikovať obojstranne, tak toto smerovanie je potrebné zadať na oboch stranách.
- Ak vyžadujeme len to, aby sa „pobočka“ dostala na zariadenia „centrály“, tak stačí smerovanie nastaviť na strane pobočky a zapnúť aj NAT.
- Hoci to pre spojenie z LAN do LAN nie je nutné, pokiaľ chceme mať spojenie aj zo smerovača na smerovač (alebo využívať NAT), je treba na rozhrania oboch stranách pridať IP adresu z rovnakej prepojovacej siete.
- Klientovi v prípade potreby môžeme zadať DNS server štandardným spôsobom - WireGuard to priamo neumožňuje.
Prípadne môžeme pre konkrétne mená / doménu definovať statický záznam ako typ FWD (preposlanie dopytu).
Týmto spôsobom samozrejme môžeme vzájomne prepájať aj viaceré dvojice. Teda riešiť i scenár jednej centrály a viacerých pobočiek. Centrála bude mať vytvorené WireGuard rozhranie pre každú pobočku zvlášť - každé na inom UDP porte.
Pripojenie viacerých klientov k jednému serveru
Ak potrebujeme pripojiť viaceré pobočky na jednu centrálu, môžeme to riešiť elegantnejšie. Pripájanie viacerých klientov k jednému serveru je totiž možné aj cez jediné WireGuard rozhranie:
- Klienti sa pripájajú štandardne - uvedú údaje o serveri (Endpoint) a zadajú smerovanie do LAN sietí servera.
- Ak nám postačuje prístup pobočiek do sietí centrály, každý klient si do WireGuard rozhrania zapne NAT a nastaví unikátnu IP adresu zo spoločnej prepojovacej siete.
- Ak chceme komunikovať obojsmerne, tak aj server si musí nastaviť trasy do sietí klientov.
- Pokiaľ klient požaduje cez WireGuard aj prístup do internetu, je potrebné ako cieľ uviesť všeobecnú adresu
0.0.0.0/0a zohľadniť Distance. - Na serveri vytvoríme pre každého klienta zvlášť položku Peer a zadáme jeho verejný kľúč.
- Na serveri nastavíme pre každého klienta v Peer aj adresu do Allowed Address:
- Pokiaľ klient používa NAT do WireGuard, tak postačuje zadať jeho prepojovaciu adresu.
- Ak klient nepoužíva NAT, treba zadať jeho LAN rozsah.
Pri konfigurácii parametrov partnera (Peer) je vo WinBox okne sekcia s údajmi pre klienta „Client…“ - v skutočnosti nerobí nič, tieto údaje sa len použijú pre generovanie konfigurácie určenej klientovi, zobrazuje sa príkazom v termináli:/interface wireguard peers show-client-config [find name="{názov}"]
Kryptografické smerovanie
Pri pripájaní viacerých klientov na jedno WireGuard rozhranie sa uplatňuje unikátny mechanizmus. V prvom rade je nutné nastaviť trasy do sietí klientov cez WireGuard rozhranie. Ale ako WireGuard server vie, ktorému klientovi má ktorý paket poslať?
WireGuard si interne vytvára tabuľku, v ktorej priraďuje IP adresy (zadefinované v Allowed Address) ku konkrétnym verejným kľúčom klientov (Peers). Keď WireGuard rozhranie prijme nejaký paket, podľa jeho cieľovej adresy sa určí, ktorému verejnému kľúču táto adresa patrí, paket sa zašifruje práve týmto kľúčom a odošle na poslednú známu verejnú IP adresu daného klienta. Preto sa IP rozsahy uvedené v Allowed Address u rôznych klientov jedného servera nesmú prekrývať!
Firewall a NAT
Z hľadiska firewallu a NAT je treba vedieť, že pre fungovanie WireGuard je na strane servera potrebný port UDP/13231, je ho však možné zmeniť.
NAT môže spôsobiť problém pri nečinnom spojení. Keďže WireGuard používa UDP, nevytvára sa skutočné spojenie, len sa odosielajú UDP datagramy, čo smerovač s NAT eviduje ako fiktívne spojenie. Pokiaľ však klient za NAT nepošle dlhší čas žiadne údaje, smerovač s NAT toto fiktívne spojenie zruší. V MikroTik RouterOS je v Connection Tracking nastavená predvolená hodnota 30 sekúnd na udržiavanie UDP komunikácie, preto je klientovi za NAT nutné v nastaveniach WireGuard nastaviť nižší interval pre Persistent Keepalive, napríklad hodnotu 25 sekúnd. To zabezpečí, aby klient každých 25 sekúnd poslal prázdny datagram pre udržanie NAT spojenia.