WireGuard funguje na mobilných dátach, ale nie v tej istej wifi sieti
Požiadavka zvnútra LAN na verejnú adresu routera ide inou cestou než požiadavka cez mobilné dáta. Otestujte zvonku a potom zvoľte lokálnu cestu.
Tunel sa zdvihne na mobilných dátach a potom doma zostane na pripájaní, s rovnakým profilom, rovnakým peer kľúčom a bez zmeny konfigurácie medzi tým. Rozdiel je v ceste: požiadavka zvnútra LAN na verejnú adresu routera nie je tá istá cesta ako požiadavka prichádzajúca z internetu. Väčšina domácich brán buď spätnú cestu vôbec neimplementuje, alebo ju implementuje len pre určité protokoly. Preto symptóm vyzerá ako pokazený kľúč, hoci sa na kľúči nič nezmenilo. Určite, ktorá cesta zlyhala, skôr než sa dotknete kľúča, presmerovania portu alebo profilu klienta.
Jedna adresa, dve rôzne cesty
Zvonku paket dorazí na verejnú adresu routera a pravidlo presmerovania portu ho odovzdá poslucháčovi WireGuardu na internom hostiteľovi. Zvnútra klient volá rovnakú verejnú adresu, takže paket opustí klienta, dorazí k routeru a musí sa obrátiť späť smerom k LAN. Práve na tom obrátení sa obe cesty rozchádzajú, pretože router musí preložiť tok, ktorý zároveň vychádza a znova vstupuje cez rovnaké rozhranie. Mnohé implementácie ho zahodia namiesto preloženia a klient potom čaká na podanie ruky, ktoré nebolo nikdy odoslané.
Tomuto správaniu sa zvyčajne hovorí NAT loopback alebo hairpinning a patrí routeru, nie WireGuardu; RFC 4787 opisuje prípady prekladu, v ktorých to brána môže alebo nemusí podporovať. Samotný WireGuard na ceste nemá názor, pretože vidí len pakety, ktoré dorazia na jeho rozhranie. Keď router tok zahodí, démon nikdy nič nedostane, klient hlási vypršanie času podania ruky a protokol servera zostane prázdny. Prázdny protokol je preto stopa, kde sa paket zastavil, nie dôkaz, že server spadol. To je aj dôvod, prečo preinštalácia nič nemení.
Opak platí tiež: protokol servera, ktorý ukazuje pokus o podanie ruky z adresy LAN, dokazuje, že paket dorazil a cesta je v poriadku, čo presúva vyšetrovanie ku kľúčom a povoleným adresám. Čítajte protokol pre to, čo dokazuje, nie pre to, čo ste dúfali vidieť.
Najprv to zreprodukujte, potom meňte
Vyskúšajte to z autorizovanej vonkajšej siete s rovnakým zariadením a rovnakým profilom, potom test zopakujte vnútri LAN, bez toho aby ste čokoľvek upravovali. Dokončené podanie ruky vonku a klient, ktorý vnútri zariadenie nikdy neopustí, stav reprodukujú namiesto hádania. Oba pokusy musia používať rovnaký profil, inak porovnanie nič nedokazuje.
Potom sa pozrite, na čo sa meno koncového bodu pre toto zariadenie prekladá. Nasledujúce tri príkazy tiež ukazujú, ktorú adresu klient skutočne volal:
wg show wg0 endpoints
dig +short vpn.example.net A
resolvectl query vpn.example.netPrvý príkaz hlási koncový bod, ktorý rozhranie práve používa, a ďalšie dva ukazujú, na čo sa meno na tomto stroji prekladá. Klient, ktorý volá verejnú adresu, zatiaľ čo sedí v tej istej sieti ako server, používa cestu hairpin. Klient, ktorý volá adresu LAN, to nerobí, a zlyhanie tam patrí inému vyšetrovaniu. Tento rozdiel rozhoduje, či sa nasledujúca časť vôbec vzťahuje.
Podporované spôsoby, ako dosiahnuť blízky server
Najčistejšie usporiadanie je odpoveď s rozdeleným horizontom: verejné meno sa prekladá na verejnú adresu pre internet a na adresu LAN servera pre klientov vnútri. Profil drží jedno meno koncového bodu a resolver volí cestu. To vyžaduje kontrolu nad internou odpoveďou DNS, ktorú domáci router zvyčajne ponúka a organizácia ju môže zámerne zariadiť. Bez tejto kontroly zostáva funkcia routera alebo druhý profil.
Funkciou routera je odraz: brána preloží tok zvnútra von a pošle ho späť dovnútra. Kde funguje, nevyžaduje zmenu klienta, a kde nefunguje, žiadne nastavenie klienta ju nezachráni. Otestujte ju sledovaním protokolu servera počas vnútorného pokusu, namiesto čítania zoznamu funkcií routera.
Úprava profilu na súkromnú adresu je diagnostika, nie návrh. Dokazuje, že server odpovedá v LAN, a rozbije ten istý profil v chvíli, keď notebook opustí dom.
| Approach | What it depends on | Where it fails |
|---|---|---|
| Split-horizon name | Control of the internal DNS answer | Clients that resolve through a server outside the zone |
| Router reflection | Gateway support for hairpin translation | Routers that drop the flow silently |
| Private address in the profile | Nothing beyond the LAN | Every network except the one at home |
Udržte profil použiteľný mimo domova
Či zvolíte ktorúkoľvek cestu, nechajte overovanie identity na pokoji. Adresa koncového bodu nie je identita peer a zmena adresy nikdy neospravedlňuje prijatie cudzieho verejného kľúča, ktorý náhodou odpovedá. WireGuard overuje kľúčom, takže nesprávny hostiteľ zlyhá na podaní ruky, namiesto toho aby dal prístup k niečomu neočakávanému.
Ak sa verejná adresa pohne, dynamický DNS je to, čo drží meno užitočné, a správanie obnovy u klienta rozhoduje, ako rýchlo zmena dorazí. Otestujte to zvonku po zmene adresy, pretože prípad LAN to nemôže potvrdiť. Dávajte pozor na resolver, ktorý kešuje starú odpoveď dlhšie než životnosť záznamu. Meno, ktoré stále ukazuje na predchádzajúcu adresu, vyzerá presne ako server, ktorý spadol.
Zapíšte, ktoré meno profil používa a na čo sa prekladá na každej strane hranice. Profil, ktorý závisí od funkcie routera, ktorú nikto nezaznamenal, je volanie podpory čakajúce na ďalšiu aktualizáciu firmvéru. Poznámka tiež hovorí ďalšiemu človeku, či je vnútorné zlyhanie známy prípad hairpin, alebo niečo nové.