Handshake WireGuardu funguje, ale kancelárska podsiet neodpovedá
WireGuard beží a pinguje server, ale nič v jeho LAN neodpovedá. Skontrolujte prefix klienta, presmerovanie na serveri a cestu odpovede.
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.