WireGuard PersistentKeepalive: udržte mapování NAT živé
Pokud reverzní spojení funguje jen hned poté, co peer pošle provoz, mapování vyprší. Nastavte keepalive za routerem a pak přečtěte skutečný časový limit.
Domácí krabice otevře tunel a bez potíží dosáhne cloudového serveru. Cloudový server dokáže dosáhnout domácí aplikace minutu nebo dvě poté, co domácí krabice naposledy něco poslala, a pak přestane. V logu WireGuardu se nic neobjeví, žádná chyba handshake se nehlásí a restart tunelu to na krátko spraví. Tento vzorec je mapování, které vyprší, ne porouchaný tunel, a runbook níže to potvrdí dřív, než se cokoli změní.
Potvrďte, že vzorec je vypršení mapování při nečinnosti
Rozlišujícím detailem je časování. Pokud reverzní spojení funguje hned poté, co domácí peer pošle provoz, a po tichém intervalu selže, cesta je v pořádku a stav uprostřed ne. Pokud nikdy nefungovalo, dokonce ani hned po provozu, je to špatná diagnóza.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
Spusťte první dva příkazy hned poté, co domácí peer něco pošle, počkejte pět minut a spusťte je znovu. Časové razítko handshake, které se obnovuje podle plánu bez nového koncového bodu, vám říká, že tunel žije. Změnila se schopnost nevyžádaných paketů přicházet zvenčí, což je vlastnost cesty, ne tunelu.
Pak zkuste reverzní pokus a sledujte přenosové počítadla. Pokud cloudová strana posílá bajty a domácí strana nepřijímá nic, paket opustil cloud a cestou zahynul v zařízení se stavem. To je podpis, který hledáte. Pokud se obě počítadla hýbou, tunel paket doručil a podezřelým je aplikace.
Umístěte keepalive na peer za routerem
Trvalé keepalive udržují mapování NAT a jakýkoli stav firewallu naživu tím, že podle plánu posílají malý autentizovaný paket. Nastavení patří stroji za routerem, do jeho záznamu pro vzdálený peer, protože to je strana, jejíž odchozí paket stav vytváří.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Sloučte ho s existující sekcí peeru. Přidání druhého bloku se stejným veřejným klíčem není platný způsob přidávání voleb a wg-quick je za vás nesloučí. Dokumentovaných 25 sekund je příklad zvolený tak, aby ležel pod běžnými časovými limity UDP, ne hodnota s nějakým zvláštním významem.
Umístění stejné direktivy na cloudovou stranu tomuto problému nepomůže. Pakety tohoto peeru už přicházejí z veřejné adresy, takže ve směru, na kterém záleží, není co zachovávat. Přidává provoz a nic nemění.
Čtěte časovače místo hádání intervalu
Keepalive fungují, protože přicházejí častěji, než stav vyprší. Proto je časový limit číslo, které skutečně potřebujete, a v Linuxu ho lze přečíst na zařízení, které provádí překlad:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
První hodnota je časový limit pro UDP tok, který byl viděn jen jedním směrem, a druhá platí, jakmile jsou pozorovány odpovědi. Obě bývají krátké a mapování, které ztichne, se bude řídit tím, co platí pro váš tok.
Porovnejte to číslo se svým intervalem. Keepalive 25 sekund při limitu 30 sekund funguje; stejný keepalive při limitu 15 sekund nefunguje. Žádné opakování tuto aritmetiku nezmění. Některé spotřebitelské routery a mobilní operátoři používají mnohem kratší hodnoty než výchozí Linux, proto konfigurace, která funguje v jedné síti, selže v jiné.
| 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 |
Zkontrolujte posluchač a firewall odděleně
Živé mapování je nutné a nestačí. Aplikace na domácí krabici musí naslouchat na správné adrese a hostitelský firewall musí paket po dešifrování povolit.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
Pokud je socket svázán jen s adresou fyzického rozhraní, a ne s adresou tunelu, pakety přicházející tunelem se zahodí dřív, než se firewall vůbec zkontroluje. Tato porucha vypadá z cloudové strany stejně jako problém s mapováním a přežije každé nastavení keepalive.
Kontrola seznamu povolených je stejně důležitá i v opačném směru. Cloudový peer musí povolit adresu domácího tunelu jako zdroj, pokud bude odpovídat, a domácí peer musí povolit cloudovou adresu jako cíl. Keepalive pakety jsou autentizovaný provoz a uplatňují stejná pravidla, proto keepalive, který vypadá funkčně, může existovat vedle aplikace, která nefunguje.
Nasaďte změnu a znáte její meze
Použijte nastavení, restartujte rozhraní, pokud je to váš způsob aktualizace, a pak zopakujte test nečinnosti místo okamžitého testu. Počkejte déle než časový limit, který jste si přečetli dřív, udělejte reverzní požadavek a potvrďte, že se počítadla pohnula na obou koncích.
Zapište interval a naměřený časový limit vedle něj. Budoucí změna firmwaru routeru nebo přechod na mobilní připojení může limit změnit. Poznámka je to, co někomu umožní hodnotu znovu odvodit místo zkopírování. Dvě čísla na jednom řádku později ušetří celé vyšetřování.
Trvalé keepalive chrání stav. Neotevírají port, nepřidávají záznam do seznamu povolených a nezpůsobí, že se objeví posluchač. Když reverzní spojení nefunguje vůbec, vina je v jedné z těch tří věcí, a rychlý start WireGuardu popisuje nastavení keepalive ve stejně úzkých termínech.