Handshake sa dokončí, wg show hlási nedávny prenos a tunelová adresa servera odpovedá na ping. Host v LAN servera však nie. Tri podmienky musia platiť súčasne: klient musí smerovať prefix LAN do tunela, server musí preposielať pakety a odpoveď potrebuje cestu späť. Keď jedna z troch chýba, príznak je rovnaký.

AllowedIPs je zoznam prístupu aj smerovacia tabuľka

Na klientovi zoznam AllowedIPs rozhoduje o tom, čo sa smie poslať tomuto peerovi, aj o tom, ktoré trasy WireGuard nainštaluje. Záznam peera, ktorý uvádza len tunelovú adresu servera, nainštaluje jednu trasu k hostovi, takže ciele v LAN sa nikdy nedostanú do tunela. Pridanie prefixu LAN je prvá vec na overenie a zároveň zmena, ktorá po skopírovanej konfigurácii najčastejšie chýba. Peer rozšírený na predvolenú trasu je iný návrh a presunie aj internetovú prevádzku klienta.

Držte trasu k hostovi a prefix LAN ako samostatné záznamy. Ak má kancelária dve podsiete, obe patria do zoznamu, a chýbajúci druhý prefix vytvára zlyhanie, ktoré vyzerá selektívne, nie úplne.

[Peer]
PublicKey = <server public key>
Endpoint = vpn.example.net:51820
AllowedIPs = 10.66.0.1/32, 192.168.50.0/24

Presmerovanie a preklad patria na server

Server potrebuje zapnuté presmerovanie IP, pravidlo presmerovania, ktoré prijíma prevádzku prichádzajúcu z tunela, a pravidlo prekladu smerom k jeho rozhraniu LAN. Práve preklad umožňuje, aby návrh fungoval bez zásahu do každého hosta v kancelárskej sieti. Odpovede sa potom vracajú na server, nie na adresu, o ktorej LAN nikdy nepočula. Bez toho každý host potrebuje trasu do podsiete tunela a pravidlo firewallu, ktoré ju povoľuje, čo je v sieti, ktorú spravuje niekto iný, málokedy prijateľné.

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Pravidlá pridané ručne po reštarte zmiznú, preto ich priviažte k rozhraniu pomocou hook príkazov v konfigurácii servera. Sada pravidiel, ktorá prežije svoje rozhranie, je spôsob, akým stroj napokon prekladá prevádzku pre tunel, ktorý už neexistuje.

Keď sa LAN presunula a pravidlo nie

Výmena routera, ktorá prečísluje kancelársku podsiet, je klasickou verziou tohto zlyhania. Tunel zostáva zapnutý, handshake zostáva čerstvý a nič za serverom neodpovedá, pretože pravidlo prekladu stále uvádza starú adresu. Inštalačné skripty často zapekajú adresu LAN servera do pravidla POSTROUTING a po prečíslovaní táto adresa neexistuje na žiadnom rozhraní. Pakety sa potom prepisujú na cieľ, ktorý nemôže odpovedať.

iptables -t nat -n -L POSTROUTING
ip -br addr show

Porovnajte oba výstupy. Cieľ prekladu, ktorý sa v zozname rozhraní neobjavuje, je chyba, a jej oprava je zmena na jeden riadok, keď ju uvidíte. Pravidlo môže žiť vo vygenerovanej unite, nie v konfigurácii WireGuardu, preto po úprave túto unitu znova načítajte a overte, že nasledujúci štart vašu zmenu neprepíše.

Dve lokality za NAT potrebujú miesto, kde sa stretnú

Keď ani jedna strana neprijíma prichádzajúce spojenia, praktickou odpoveďou je malý host s verejnou adresou a dvoma rozhraniami WireGuard. Každá lokalita sa pripája von, prostredný host uvádza LAN každého peera vo svojom AllowedIPs, a presmerovanie prenáša pakety medzi oboma tunelmi. Na firewalle žiadnej z lokalít sa nič nemusí meniť, a preto sa tento návrh ľahko šíri.

Smerovanie medzi lokalitami zachováva pôvodné zdrojové adresy, a tým zachováva zmysel protokolovania po hostoch. Preklad na prostrednom hoste je jednoduchší, keď sa obe LAN prekrývajú, ale za cenu straty identity zdroja v záznamoch. Rozhodnite, ktorá vlastnosť je dôležitá, skôr než si vyberiete.

Oddeľte vrstvy štyrmi kontrolami

Vykonávajte jednu kontrolu na vrstvu, namiesto toho, aby ste menili tri veci a dúfali. Prvá ukazuje vek handshake a počítadlá pre každého peera. Druhá ukazuje, či klient skutočne smeruje ten cieľ do tunela. Tretia a štvrtá hovoria, či požiadavka dorazila a či ju nejaká politika po doručení zahodila.

wg show
ip route get 192.168.50.20
tcpdump -ni wg0 icmp
iptables -vnL FORWARD --line-numbers

Požiadavka, ktorá dorazí a nevyvolá odpoveď, ukazuje na cestu odpovede alebo na host v LAN. Požiadavka, ktorá nikdy nedorazí, ukazuje na AllowedIPs alebo na trasu klienta. Tieto dva výsledky vyžadujú rôzne opravy a zachytenie je to, čo ich rozlíši.

Súvisiace články