WireGuard PersistentKeepalive: udržte mapovanie NAT živé
Ak reverzné spojenie funguje len hneď po tom, čo peer pošle prevádzku, mapovanie vyprší. Nastavte keepalive za routerom a potom prečítajte skutočný časový limit.
Domáca krabica otvorí tunel a bez problémov dosiahne cloudový server. Cloudový server dokáže dosiahnuť domácu aplikáciu minútu alebo dve po tom, čo domáca krabica naposledy niečo poslala, a potom prestane. V logu WireGuardu sa nič neobjaví, nehlási sa žiadna chyba handshake a reštart tunela to na krátko opraví. Tento vzor je mapovanie, ktoré vyprší, nie pokazený tunel, a runbook nižšie to potvrdí skôr, než sa čokoľvek zmení.
Potvrďte, že vzor je vypršanie pri nečinnosti
Rozlišujúcim detailom je časovanie. Ak reverzné spojenie funguje hneď po tom, čo domáci peer pošle prevádzku, a zlyhá po tichom intervale, cesta je v poriadku a stav v strede nie. Ak nikdy nefungovalo, dokonca ani hneď po prevádzke, je to nesprávna diagnóza.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
Spustite prvé dva hneď po tom, čo domáci peer niečo pošle, počkajte päť minút a spustite ich znova. Časová pečiatka handshake, ktorá sa obnovuje podľa plánu bez nového koncového bodu, vám hovorí, že tunel žije. Zmenila sa schopnosť nevyžiadaných paketov prichádzať zvonka, čo je vlastnosť cesty, nie tunela.
Potom skúste reverzný pokus a sledujte prenosové počítadlá. Ak cloudová strana posiela bajty a domáca strana neprijíma žiadne, paket opustil cloud a cestou zahynul v zariadení so stavom. To je podpis, ktorý hľadáte. Ak sa obe počítadlá hýbu, tunel paket doručil a podozrivým je aplikácia.
Umiestnite keepalive na peer za routerom
Trvalé keepalive udržiavajú mapovanie NAT a akýkoľvek stav firewallu nažive tým, že podľa plánu posielajú malý autentizovaný paket. Nastavenie patrí stroju za routerom, do jeho záznamu pre vzdialený peer, pretože to je strana, ktorej odchádzajúci paket vytvára stav.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Zlúčte ho s existujúcou sekciou peeru. Pridanie druhého bloku s rovnakým verejným kľúčom nie je platný spôsob pridávania možností a wg-quick ich za vás nezlúči. Dokumentovaných 25 sekúnd je príklad zvolený tak, aby ležal pod bežnými časovými limitmi UDP, nie hodnota s nejakým zvláštnym významom.
Umiestnenie tej istej direktívy na cloudovú stranu tomuto problému nepomôže. Pakety tohto peeru už prichádzajú z verejnej adresy, takže v dôležitom smere nie je čo zachovávať. Pridáva prevádzku a nič nemení.
Čítajte časovače namiesto hádania intervalu
Keepalive fungujú, pretože prichádzajú častejšie, než stav vyprší. Preto je časový limit číslo, ktoré skutočne potrebujete, a v Linuxe ho možno prečítať na zariadení, ktoré robí preklad:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
Prvá hodnota je časový limit pre UDP tok, ktorý bol videný len jedným smerom, a druhá platí, keď boli pozorované odpovede. Obe bývajú krátke a mapovanie, ktoré stíchne, sa bude riadiť tým, čo platí pre váš tok.
Porovnajte to číslo so svojím intervalom. Keepalive 25 sekúnd pri limite 30 sekúnd funguje; ten istý keepalive pri limite 15 sekúnd nefunguje. Žiadne opakovanie tú aritmetiku nezmení. Niektoré spotrebiteľské routery a mobilní operátori používajú oveľa kratšie hodnoty než predvolená hodnota Linuxu, preto konfigurácia, ktorá funguje v jednej sieti, zlyhá v inej.
| Observation | What it means | Reasonable response |
|---|---|---|
| Works after traffic, dies when idle | Mapping or firewall state expiring | Lower the keepalive interval |
| Never works, even immediately | No return route, listener or firewall | Stop tuning keepalive |
| Works for hours, then dies once | Carrier-side translation or address change | Check the endpoint and logs together |
Skontrolujte poslucháč a firewall oddelene
Živé mapovanie je nutné a nestačí. Aplikácia na domácej krabici musí počúvať na správnej adrese a hostiteľský firewall musí paket po dešifrovaní povoliť.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
Ak je socket zviazaný len s adresou fyzického rozhrania a nie s adresou tunela, pakety prichádzajúce tunelom sa zahodia skôr, než sa firewall vôbec skontroluje. Táto porucha vyzerá z cloudovej strany rovnako ako problém s mapovaním a prežije každé nastavenie keepalive.
Kontrola zoznamu povolených je rovnako dôležitá aj v opačnom smere. Cloudový peer musí povoliť adresu domáceho tunela ako zdroj, ak bude odpovedať, a domáci peer musí povoliť cloudovú adresu ako cieľ. Keepalive pakety sú autentizovaná prevádzka a uplatňujú rovnaké pravidlá, preto keepalive, ktorý vyzerá funkčne, môže existovať vedľa aplikácie, ktorá nefunguje.
Nasaďte zmenu a poznajte jej hranice
Použite nastavenie, reštartujte rozhranie, ak je to váš spôsob aktualizácie, a potom zopakujte test nečinnosti namiesto okamžitého testu. Počkajte dlhšie než časový limit, ktorý ste si prečítali predtým, urobte reverznú požiadavku a potvrďte, že sa počítadlá pohli na oboch koncoch.
Zapíšte interval a nameraný časový limit vedľa neho. Budúca zmena firmvéru routera alebo prechod na mobilné pripojenie môže limit zmeniť. Poznámka je to, čo niekomu umožní hodnotu znova odvodiť namiesto skopírovania. Dve čísla na jednom riadku neskôr ušetria celé vyšetrovanie.
Trvalé keepalive chránia stav. Neotvárajú port, nepridávajú záznam do zoznamu povolených a nespôsobia, že sa objaví poslucháč. Keď reverzné spojenie nefunguje vôbec, vina je v jednej z tých troch vecí, a rýchly štart WireGuard opisuje nastavenie keepalive v rovnako úzkych termínoch.