Namų dėžutė atidaro tunelį ir be problemų pasiekia debesijos serverį. Debesijos serveris gali pasiekti namų programą minutę ar dvi po to, kai namų dėžutė paskutinį kartą ką nors išsiuntė, ir tada sustoja. WireGuard žurnale nieko neatsiranda, jokia rankos paspaudimo klaida nepranešama, o tunelio paleidimas iš naujo trumpam tai sutvarko. Šis modelis yra baigiantis galioti susiejimas, o ne sugedęs tunelis, ir toliau pateiktas vadovas tai patvirtina prieš ką nors keičiant.

Patvirtinkite, kad modelis yra galiojimo pabaiga neveiklumo metu

Išskirianti detalė yra laikas. Jei atvirkštinis ryšys veikia iškart po to, kai namų partneris išsiunčia srautą, ir nepavyksta po tylios pertraukos, kelias yra tvarkingas, o būsena viduryje – ne. Jei jis niekada neveikė, net ir iškart po srauto, tai neteisinga diagnozė.

sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer

Paleiskite pirmąsias dvi iš karto po to, kai namų partneris ką nors išsiunčia, palaukite penkias minutes ir paleiskite jas dar kartą. Rankos paspaudimo laiko žyma, kuri atsinaujina pagal grafiką be naujo galinio taško, parodo, kad tunelis gyvas. Kas pasikeitė, tai neprašytų paketų galimybė atkeliauti iš išorės, kuri yra kelio, o ne tunelio savybė.

Tada atlikite atvirkštinį bandymą ir stebėkite perdavimo skaitiklius. Jei debesijos pusė siunčia baitus, o namų pusė negauna nė vieno, paketas paliko debesiją ir žuvo kelyje esančiame būseną išlaikančiame įrenginyje. Tai yra parašas, kurio ieškote. Jei juda abu skaitikliai, tunelis pristatė paketą, o įtariamasis yra programa.

Įdėkite keepalive į partnerį už maršrutizatoriaus

Nuolatiniai keepalive palaiko NAT susiejimą ir bet kokią ugniasienės būseną gyvą siųsdami mažą autentifikuotą paketą pagal grafiką. Nustatymas priklauso mašinai už maršrutizatoriaus, jos įraše nuotoliniam partneriui, nes būtent ta pusė savo išeinančiu paketu sukuria būseną.

[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25

Sujunkite jį su esamu partnerio skyriumi. Antro bloko su tuo pačiu viešuoju raktu pridėjimas nėra tinkamas būdas pridėti parinkčių, o wg-quick jų už jus nesujungs. Dokumentuotos 25 sekundės yra pavyzdys, pasirinktas kad būtų žemiau įprastų UDP skirtųjų laikų, o ne vertė su ypatinga reikšme.

Tos pačios direktyvos įdėjimas debesijos pusėje šiai problemai nepadeda. To partnerio paketai jau ateina iš viešo adreso, todėl svarbia kryptimi nėra ko išsaugoti. Tai prideda srauto ir nieko nekeičia.

Skaitykite laikmačius, o ne spėliokite intervalą

keepalive veikia todėl, kad atvyksta dažniau, nei būsena baigia galioti. Todėl skirtasis laikas yra skaičius, kurio jums iš tikrųjų reikia, o Linux sistemoje jį galima perskaityti įrenginyje, kuris atlieka vertimą:

sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820

Pirmoji reikšmė yra UDP srauto, matyto tik viena kryptimi, skirtasis laikas, o antroji taikoma, kai jau pastebėti atsakymai. Abu paprastai būna trumpi, o nutilusios susiejimas laikysis to, kas taikoma jūsų srautui.

Palyginkite šį skaičių su savo intervalu. 25 sekundžių keepalive esant 30 sekundžių skirtajam laikui veikia; tas pats keepalive esant 15 sekundžių skirtajam laikui neveikia. Joks bandymų skaičius tos aritmetikos nepakeis. Kai kurie namų maršrutizatoriai ir mobilieji operatoriai naudoja daug trumpesnes reikšmes nei Linux numatytoji, todėl konfigūracija, kuri veikia viename tinkle, nepavyksta kitame.

ObservationWhat it meansReasonable response
Works after traffic, dies when idleMapping or firewall state expiringLower the keepalive interval
Never works, even immediatelyNo return route, listener or firewallStop tuning keepalive
Works for hours, then dies onceCarrier-side translation or address changeCheck the endpoint and logs together

Tikrinkite klausytoją ir ugniasienę atskirai

Gyvas susiejimas yra būtinas ir nepakankamas. Namų dėžutės programa turi klausytis teisingo adreso, o prieglobos ugniasienė turi leisti paketą po to, kai jis iššifruojamas.

sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health

Jei lizdas susietas tik su fizinio sąsajos adresu, o ne su tunelio adresu, tuneliu atvykstantys paketai išmetami dar nepasiteiravus ugniasienės. Šis gedimas iš debesijos pusės atrodo lygiai taip pat kaip susiejimo problema, ir jis išlieka po bet kokio keepalive derinimo.

Leidžiamųjų sąrašo tikrinimas kitą kryptimi yra lygiai toks pat svarbus. Debesijos partneris turi leisti namų tunelio adresą kaip šaltinį, jei ketina atsakyti, o namų partneris turi leisti debesijos adresą kaip paskirties vietą. keepalive paketai yra autentifikuotas srautas ir taiko tas pačias taisykles, todėl veikiantis keepalive gali egzistuoti kartu su programa, kuri neveikia.

Įdiekite pakeitimą ir žinokite jo ribas

Pritaikykite nustatymą, paleiskite sąsają iš naujo, jei tai jūsų atnaujinimo būdas, ir tada pakartokite neveiklumo testą, o ne tiesioginį testą. Palaukite ilgiau nei anksčiau perskaitytas skirtasis laikas, atlikite atvirkštinę užklausą ir patvirtinkite, kad skaitikliai pajudėjo abiejuose galuose.

Užsirašykite intervalą ir išmatuotą skirtąjį laiką šalia. Būsimas maršrutizatoriaus programinės įrangos pakeitimas arba perėjimas prie mobilaus ryšio gali pakeisti skirtąjį laiką. Užrašas leidžia kam nors vėl išvesti vertę, o ne ją nukopijuoti. Du skaičiai vienoje eilutėje vėliau sutaupo visą tyrimą.

Nuolatiniai keepalive saugo būseną. Jie neatidaro prievado, neprideda įrašo į leidžiamųjų sąrašą ir nepriverčia klausytojo atsirasti. Kai atvirkštinis ryšys visai neveikia, kaltė yra viename iš tų trijų, ir WireGuard greitasis vadovas aprašo keepalive nustatymą tomis pačiomis siauromis sąlygomis.

Susiję straipsniai