#Wireguard je extrémne jednoduchá a rýchla služba VPN. Začiatok vývoja rok 2015. S nadsázkou môžem napisať, že v sebe obsahuje to najdôležitejšie z IPsec a OpenVPN protokolov. Jeho zdrojový kód ma 4000 riadkov (oproti okolo 500.00 pri OpenVPN + OpenSSL). Kratší kód je lepšie auditovateľný, má menej problematických miest a je rýchlejší.

Medzi jeho základné vlastnosti patrí:

  • používa najmodernejšiu kryptografiu (protokol Noise)
  • komunikuje pomocou UDP, je nenáročný na sieť (keď sa dáta neprenášajú, na linke je „ticho“ ), beží na L3 vrstve OSI modelu
  • podporuje roaming
  • napevno zviazuje IP adresy, či rozsahy v rámci VPN s konkrétnými verejnými kľúčmi. Teda klient vie, že daný verejný kľúč určite patrí protistrane. Nevalidnú „podvrhnutú“ komunikáciu zavrhne.
  • multiplatformový. Klientov nájdete pre Mac, iOS, Android, Windows, Linux (priamo v kerneli ako network modul).

Od verzie Router OS 7.xx podporujú wireguard aj zariadenia #Mikrotik. Vstavaný OpenVPN server v RouterOS je typický svojou pomalosťou (asi 7-20Mbit). To z dôvodu, že jeho komunikácia (šifrovanie) prebieha na úrovni CPU routera. Nie na inom dedikovanom čipe alebo priamo podporou v CPU navrhnutým len pre encrypt/decrypt (HW accelerated). Protokol IPSec (IKEv2) HW accelerated podporu vo väčšine modelov má, preto tento problém u IPSec nie je (úpravou MTU sa performance dá ešte zlepšiť).

Ako teda prebieha konfigurácia Wireguard spojenia #Linux (server) + Mikrotik (klient)?

Na Linuxe – server – inštalujeme balíčky wireguard a resolvconf. Vygenerujeme verejný a privátny kľúč servera – wg genkey. Nezabudneme predtým zadefinovať masku nových súborov umask 077 , čo vlastne znamená, že súbory s privátnym a verejným kľúčom budú editovateľné len vlastníkom, čitatelné každým. Následne vytvárame textový .conf s názvom a umiestnením v /etc/wireguard/wg0.conf. wg0 je štandardný virtuálny sieťový interface.

štruktúra wg0.conf má vyzerať takto:

časť wg0.conf určená pre setup wg0 interface

V prvom riadku je IP adresa Wiregurad servera (z pohľadu privátnej siete). Pod ním riadky s úpravou FW pravidiel – ipv4 forward packetov a NATovanie, v tomto prípade aj riadok s úpravou pre UFW firewall). ListenPort číslo portu, na ktorom Wireguard server počúva (poznámka: pri pokuse o telnet na tento port wireguard odpovedať nebude!). Konečne PrivateKey je privátny kľúč, ktorý je vygenerovany príkazom wg genkey uložený v súbore private.key

Ďalšia časť konfigu wg0.conf pozostáva so zápisu nastavení jednotlivých Peerov (klientov). Teda [Peer] robíme pre každého wireguard klienta zvlášť.

časť wg0.conf venovaná Peerom

PublicKey je kľúč, ktorý bol vygenerovaný na strane klienta., AllowedIPs definuje povolené IP adresy (rozsahy) sietí, na ktoré po spojení možme medzi klientom a serverom pristupovať. Napr. prvý riadok ma pridanú aj sieť v kancelárii (192.168.0.0/24) Endpoint určuje z ktorej IP adresy:port sa klient na Wireguard server pripája. Táto položka je nepovinná, no aspoň jedna strana ju zapísanú mať musí. Odporúčam na strane klienta.

Wireguard na linuxe spúštame príkazom sudo wg-quick up wg0 (zastavenie down). Kontrola bežiaceho interface sudo wg show wg0

Na strane Mikrotiku Router OS 7.xx – teda klient to vyzerá takto:

Wireguard -> záložka WireGuard. Vytvoríme wireguard interface, tým sa nam v Mikrotiku vygenerujú aj jeho (klientské) kľúče, private a public. Následne rozhraniu wireguard0 priradíme IP adresu. 2x príkaz do Terminálu:

/interface wireguard add listen-port=19123 name=wireguard1
/ip address
add address=10.8.0.2/24 interface=wireguard1
Mikrotik terminálove príkazy na vytvorenie wireguard rozhrania s vygenerovaním kľúčov

Otvoríme Wireguard -> záložka Wireguard -> interface wireguard1. Skopírujeme do schránky PublicKey a ten následne vložíme na stranu servera do wg0.conf v sekcii [Peer] ako PublicKey vid. obrázok 2.

Wireguard -> záložka Peers, v prvom riadku je virtuálny wireguard interface. V druhom je serverový Public Key viď. obrázok vyššie. Endpoint a Endpoint Port je verejná IP adresa wireguard servera:port viď. prvý obrázok ListenPort . AllowedIP je povolenie IP adresy alebo rozsahu v rámci VPN siete.

casť Peer pre pripojenie na wireguard sever

Zhrnutie: wg0.conf pozostáva z dvoch častí. Prvá časť [Interface] sa týka servera a hovorí, akú adresu bude používať na rozhraní VPN. Ďalšiu sekciu [Peer] budeme opakovať pre každého klienta, uvedieme pre neho povolený rozsah IP adries, jeho verejný klúč a skutočnú IP adresu (endpoint – voliteľný parameter), na ktorú sa pripojujeme.

Princíp konfigurácie výmeny kľúčov spočíva v tom, že serverový Public kľúč na klientskej časti zapisujem do Wireguard -> záložka Peers -> Public Key. Na serverovej strane tase zapíšem klientský PublicKey rozhrania wireguard1 (záložka WireGuard) do wg0.conf -> [Peer] do časti PublicKey.

ps. IP adresy a kľúče v obrázkoch su len ilustračné, podobnosť čisto náhodná.