Skip to main content

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. Spojenie nevyužíva certifikáty, ale obojstrannú výmenu verejnej časti vygenerovaných kľúčov, čo je ekvivalentom self-signed certifikátov. Nerozlišuje používateľov, ale len klientske zariadenie.

WireGuard pre šifrovanie prenášaných údajov nepoužíva šifrovanie AES, ale ChaCha20, konkrétne variant ChaCha20-Poly1305. Kľúč má 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). Aj samotný WireGuard je rýchly vďaka jednoduchej architektúre, čoho dôsledkom je, že WireGuard 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í (point-to-point)

Pre vytvorenie point-to-point spojenia (dve pobočky) je potrebné postupovať nasledovne:

  1. 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ť UDP port (Listen Port) - štandardne je 13231. Automaticky sa vygeneruje kľúč pre šifrovanie - jeho verejnú časť (Public Key) skopírujeme a pošleme druhej strane.

    Rozhranie sa hneď bude javiť ako funkčné (stav running), no prakticky to nič neznamená, treba si všímať počítadlá údajov, ktoré sú samozrejme zatiaľ nulové.

  2. Zadáme informácie o partnerovi na „druhej strane“ v ponuke WireGuard → Peer: pomenujeme ho (napríklad „peer-pobocka“), zvolíme vytvorené WireGuard rozhranie (Interface) a zadáme verejný kľúč (Public Key) druhej strany. Je tiež treba vymenovať cieľové adresy (Allowed Address), ktoré sú dostupné cez toto spojenie.

    Pokiaľ máme na rozhraní len jedného partnera, môžeme uviesť „všetko“ v IPv4 i IPv6, teda 0.0.0.0/0 a ::/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. Keď tento krok úspešne vykonáme, ožijú počítadlá údajov.

      Ak je partner za NAT bez presmerovania portu, tak neuvádzame ani jeho adresu, ani port.

  3. 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.
  4. 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.
  5. 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/0 a 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}"]

Firewall

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ť.