WireGuard PersistentKeepalive: održite NAT mapiranje živim
Ako obrnuta veza radi samo odmah nakon što peer pošalje promet, mapiranje ističe. Postavite keepalive iza rutera, pa pročitajte stvarni timeout.
Kućna kutija otvara tunel i bez problema doseže cloud server. Cloud server može dosegnuti kućnu aplikaciju minutu ili dvije nakon što kućna kutija posljednji put nešto pošalje, a zatim staje. U WireGuard dnevniku se ništa ne pojavljuje, greška pri rukovanju se ne prijavljuje, a ponovno pokretanje tunela to nakratko popravi. Taj obrazac je mapiranje koje ističe, a ne pokvaren tunel, i uputa ispod to potvrđuje prije nego što se bilo šta promijeni.
Potvrdite da obrazac znači istek mapiranja pri mirovanju
Razlikovni detalj je vrijeme. Ako obrnuta veza radi odmah nakon što kućni peer pošalje promet, a zakaže nakon tihog intervala, put je u redu, a stanje u sredini nije. Ako nikad nije radila, čak i odmah nakon prometa, to je pogrešna dijagnoza.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
Pokrenite prve dvije odmah nakon što kućni peer nešto pošalje, pričekajte pet minuta i pokrenite ih ponovo. Vremenska oznaka rukovanja koja se osvježava po rasporedu bez novog endpointa govori da je tunel živ. Promijenila se sposobnost nezahtijevanih paketa da stignu izvana, što je svojstvo puta, a ne tunela.
Zatim napravite obrnuti pokušaj i gledajte brojače prijenosa. Ako cloud strana šalje bajtove, a kućna ne prima ništa, paket je napustio cloud i umro u uređaju koji pamti stanje na putu. To je potpis koji tražite. Ako se oba brojača pomjeraju, tunel je dostavio paket i sumnjivac je aplikacija.
Postavite keepalive na peer iza rutera
Trajni keepalive održavaju NAT mapiranje i bilo koje stanje zaštitnog zida živim slanjem malog autentificiranog paketa po rasporedu. Postavka pripada mašini iza rutera, u njenom unosu za udaljeni peer, jer je to strana čiji odlazni paket stvara stanje.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Spojite ga u postojeći odjeljak peera. Dodavanje drugog bloka s istim javnim ključem nije valjan način dodavanja opcija, a wg-quick ih neće spojiti umjesto vas. Dokumentirane 25 sekundi primjer je odabran da bude ispod uobičajenih UDP timeouta, a ne vrijednost s posebnim značenjem.
Postavljanje iste direktive na cloud stranu ne pomaže ovom problemu. Paketi tog peera već stižu s javne adrese, pa nema mapiranja koje treba sačuvati u smjeru koji je važan. Dodaje promet i ništa ne mijenja.
Čitajte tajmere umjesto da pogađate interval
Keepalive rade jer stižu češće nego što stanje ističe. To čini timeout brojem koji vam zapravo treba, a na Linuxu se on može pročitati na uređaju koji radi prevođenje:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
Prva vrijednost je timeout za UDP tok koji je viđen samo u jednom smjeru, a druga vrijedi kad su odgovori uočeni. Oba su obično kratka, a mapiranje koje utihne slijedit će ono što vrijedi za vaš tok.
Uporedite taj broj sa svojim intervalom. Keepalive od 25 sekundi pod timeoutom od 30 sekundi radi; isti keepalive pod timeoutom od 15 sekundi ne radi. Nikakvo ponavljanje ne mijenja tu aritmetiku. Neki potrošački ruteri i mobilni operateri koriste mnogo kraće vrijednosti od Linux zadane, zato konfiguracija koja radi na jednoj mreži pada na drugoj.
| 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 |
Provjerite slušača i zaštitni zid odvojeno
Živo mapiranje je neophodno i nedovoljno. Aplikacija na kućnoj kutiji mora slušati na pravoj adresi, a host zaštitni zid mora dopustiti paket nakon što se dešifruje.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
Ako je socket vezan samo za adresu fizičkog interfejsa, a ne za adresu tunela, paketi koji stižu kroz tunel odbacuju se prije nego što se zaštitni zid uopće pogleda. Taj kvar s cloud strane izgleda isto kao problem mapiranja i preživljava svako podešavanje keepalivea.
Provjera liste dopuštenih jednako je važna u drugom smjeru. Cloud peer mora dopustiti adresu kućnog tunela kao izvor ako će odgovoriti, a kućni peer mora dopustiti cloud adresu kao odredište. Keepalive paketi su autentificirani promet i primjenjuju ista pravila, zato keepalive koji izgleda da radi može postojati uz aplikaciju koja ne radi.
Provedite promjenu i znajte njene granice
Primijenite postavku, ponovo pokrenite interfejs ako je to vaš način ažuriranja, a zatim ponovite test mirovanja umjesto neposrednog testa. Pričekajte duže od timeouta koji ste ranije pročitali, napravite obrnuti zahtjev i potvrdite da su se brojači pomjerili na oba kraja.
Zapišite interval i izmjereni timeout pored njega. Buduća promjena firmwarea rutera ili prelazak na mobilnu vezu može promijeniti timeout. Bilješka je ono što nekome omogućava da vrijednost ponovo izvede umjesto da je kopira. Dva broja u jednom redu kasnije štede cijelu istragu.
Trajni keepalive štite stanje. Oni ne otvaraju port, ne dodaju unos na listu dopuštenih i ne čine da se slušač pojavi. Kada obrnuta veza uopće ne radi, krivica je jedna od te tri, a WireGuard brzi početak opisuje postavku keepalivea istim uskim uslovima.