Handshake WireGuardu funguje, ale kancelářská podsíť neodpovídá
WireGuard běží a pinguje server, ale nic v jeho LAN neodpovídá. Zkontrolujte prefix klienta, přesměrování na serveru a cestu odpovědi.
Handshake se dokončí, wg show hlásí nedávný přenos a tunelová adresa serveru odpovídá na ping. Host v LAN serveru však ne. Tři podmínky musí platit současně: klient musí směrovat prefix LAN do tunelu, server musí přeposílat pakety a odpověď potřebuje cestu zpět. Když jedna ze tří chybí, příznak je stejný.
AllowedIPs je seznam přístupu i směrovací tabulka
Na klientovi seznam AllowedIPs rozhoduje jak o tom, co se smí poslat tomuto peeru, tak o tom, které trasy WireGuard nainstaluje. Záznam peeru, který uvádí jen tunelovou adresu serveru, nainstaluje jednu trasu k hostu, takže cíle v LAN se do tunelu nikdy nedostanou. Přidání prefixu LAN je první věc k ověření a také změna, která po zkopírované konfiguraci nejčastěji chybí. Peer rozšířený na výchozí trasu je jiný návrh a přesune i internetový provoz klienta.
Držte trasu k hostu a prefix LAN jako samostatné záznamy. Pokud má kancelář dvě podsítě, obě patří do seznamu, a chybějící druhý prefix vytváří selhání, které vypadá selektivně, nikoli úplně.
[Peer] PublicKey = <server public key> Endpoint = vpn.example.net:51820 AllowedIPs = 10.66.0.1/32, 192.168.50.0/24
Přesměrování a překlad patří na server
Server potřebuje zapnuté přesměrování IP, pravidlo přesměrování, které přijímá provoz přicházející z tunelu, a pravidlo překladu směrem k jeho rozhraní LAN. Právě překlad umožňuje, aby návrh fungoval bez zásahu do každého hostu v kancelářské síti. Odpovědi se pak vracejí na server, nikoli na adresu, o které LAN nikdy neslyšela. Bez toho každý host potřebuje trasu do podsítě tunelu a pravidlo firewallu, které ji povolí, což je v síti, kterou spravuje někdo jiný, málokdy přijatelné.
sysctl -w net.ipv4.ip_forward=1 iptables -A FORWARD -i wg0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Pravidla přidaná ručně po restartu zmizí, proto je přivažte k rozhraní pomocí hook příkazů v konfiguraci serveru. Sada pravidel, která přežije své rozhraní, je způsob, jak stroj skončí překládáním provozu pro tunel, který už neexistuje.
Když se LAN přestěhovala a pravidlo ne
Výměna routeru, která přečísluje kancelářskou podsíť, je klasickou verzí tohoto selhání. Tunel zůstává zapnutý, handshake zůstává čerstvý a nic za serverem neodpovídá, protože pravidlo překladu stále uvádí starou adresu. Instalační skripty často zapekají adresu LAN serveru do pravidla POSTROUTING a po přečíslování tato adresa neexistuje na žádném rozhraní. Pakety se pak přepisují na cíl, který nemůže odpovědět.
iptables -t nat -n -L POSTROUTING ip -br addr show
Porovnejte oba výstupy. Cíl překladu, který se v seznamu rozhraní neobjevuje, je chyba, a její oprava je změna na jeden řádek, jakmile ji uvidíte. Pravidlo může žít ve vygenerované unitě, nikoli v konfiguraci WireGuardu, proto po úpravě tuto unitu znovu načtěte a ověřte, že příští start vaši změnu nepřepíše.
Dvě lokality za NAT potřebují místo, kde se setkat
Když ani jedna strana nepřijímá příchozí spojení, praktickou odpovědí je malý host s veřejnou adresou a dvěma rozhraními WireGuardu. Každá lokalita se připojuje ven, prostřední host uvádí LAN každého peeru ve svém AllowedIPs, a přesměrování přenáší pakety mezi oběma tunely. Na firewallu žádné z lokalit se nic měnit nemusí, a proto se tento návrh snadno šíří.
Směrování mezi lokalitami zachovává původní zdrojové adresy, a tím zachovává smysl protokolování po hostech. Překlad na prostředním hostu je jednodušší, když se obě LAN překrývají, ale za cenu ztráty identity zdroje v záznamech. Rozhodněte, která vlastnost je důležitá, než si vyberete.
Oddělte vrstvy čtyřmi kontrolami
Provádějte jednu kontrolu na vrstvu, místo abyste měnili tři věci a doufali. První ukazuje stáří handshake a počítadla pro každý peer. Druhá ukazuje, zda klient skutečně směruje tento cíl do tunelu. Třetí a čtvrtá říkají, zda požadavek dorazil a zda ho nějaká politika po doručení zahodila.
wg show ip route get 192.168.50.20 tcpdump -ni wg0 icmp iptables -vnL FORWARD --line-numbers
Požadavek, který dorazí a nevyvolá odpověď, ukazuje na cestu odpovědi nebo na host v LAN. Požadavek, který nedorazí vůbec, ukazuje na AllowedIPs nebo na trasu klienta. Tyto dva výsledky vyžadují různé opravy a zachycení je to, co je rozliší.