WireGuard PersistentKeepalive: saglabājiet NAT kartēšanu dzīvu
Ja apgrieztais savienojums darbojas tikai uzreiz pēc tam, kad partneris nosūta datplūsmu, kartēšana beidzas. Iestatiet keepalive aiz maršrutētāja un pēc tam nolasiet īsto taimautu.
Mājas kaste atver tuneli un bez problēmām sasniedz mākoņa serveri. Mākoņa serveris var sasniegt mājas lietotni minūti vai divas pēc tam, kad mājas kaste pēdējo reizi kaut ko nosūtīja, un tad apstājas. WireGuard žurnālā nekas neparādās, netiek ziņots par roku kratīšanas kļūdu, un tuneļa atkārtota palaišana to uz brīdi izlabo. Šis modelis ir beidzoša kartēšana, nevis salauzts tunelis, un tālāk esošā instrukcija to apstiprina pirms kaut kā mainīšanas.
Apstipriniet, ka modelis ir derīguma beigas dīkstāvē
Atšķirīgā detaļa ir laiks. Ja apgrieztais savienojums darbojas uzreiz pēc tam, kad mājas partneris nosūta datplūsmu, un neizdodas pēc klusa intervāla, ceļš ir kārtībā, bet stāvoklis vidū nav. Ja tas nekad nav darbojies, pat uzreiz pēc datplūsmas, tā ir nepareiza diagnoze.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
Palaidiet pirmās divas uzreiz pēc tam, kad mājas partneris kaut ko nosūta, nogaidiet piecas minūtes un palaidiet tās vēlreiz. Roku kratīšanas laika zīmogs, kas atjaunojas pēc grafika bez jauna galapunkta, parāda, ka tunelis ir dzīvs. Tas, kas mainījās, ir nepiedāvātu pakešu spēja ierasties no ārpuses, kas ir ceļa, nevis tuneļa īpašība.
Pēc tam veiciet apgrieztu mēģinājumu un vērojiet pārsūtīšanas skaitītājus. Ja mākoņa puse sūta baitus, bet mājas puse nesaņem nevienu, pakele pameta mākoni un ceļā nomira stāvokli saglabājošā ierīcē. Tā ir paraksts, kuru meklējat. Ja kustas abi skaitītāji, tunelis pakele piegādāja, un aizdomās turamā ir lietotne.
Novietojiet keepalive uz partnera aiz maršrutētāja
Pastāvīgi keepalive uztur dzīvu NAT kartēšanu un jebkuru ugunsmūra stāvokli, pēc grafika sūtot nelielu autentificētu pakele. Iestatījums pieder mašīnai aiz maršrutētāja, tās ierakstam attālinātajam partnerim, jo tieši šī puse ar savu izejošo pakele rada stāvokli.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Apvienojiet to ar esošo partnera sadaļu. Otra bloka pievienošana ar to pašu publisko atslēgu nav derīgs veids, kā pievienot opcijas, un wg-quick tās jūsu vietā neapvienos. Dokumentētās 25 sekundes ir piemērs, kas izvēlēts, lai būtu zem parastajiem UDP taimautiem, nevis vērtība ar īpašu nozīmi.
Tās pašas direktīvas ievietošana mākoņa pusē šai problēmai nepalīdz. Šī partnera pakele jau nāk no publiskas adreses, tāpēc svarīgajā virzienā nav ko saglabāt. Tas pievieno datplūsmu un neko nemaina.
Lasiet taimerus, nevis miniet intervālu
keepalive darbojas tāpēc, ka tie ierodas biežāk, nekā stāvoklis beidzas. Tāpēc taimauts ir skaitlis, kas jums patiešām nepieciešams, un Linux to var nolasīt ierīcē, kas veic tulkošanu:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
Pirmā vērtība ir taimauts UDP plūsmai, kas novērota tikai vienā virzienā, un otrā attiecas pēc tam, kad novērotas atbildes. Abi parasti ir īsi, un apklususī kartēšana sekos tam, kas attiecas uz jūsu plūsmu.
Salīdziniet šo skaitli ar savu intervālu. 25 sekunžu keepalive pie 30 sekunžu taimauta darbojas; tas pats keepalive pie 15 sekunžu taimauta nedarbojas. Nekāds atkārtojumu skaits šo aritmētiku nemaina. Daži sadzīves maršrutētāji un mobilo sakaru operatori izmanto daudz īsākas vērtības nekā Linux noklusējums, tāpēc konfigurācija, kas darbojas vienā tīklā, neizdodas citā.
| 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 |
Pārbaudiet klausītāju un ugunsmūri atsevišķi
Dzīva kartēšana ir nepieciešama un nepietiekama. Lietotnei mājas kastē ir jāklausās pareizajā adresē, un resursdatora ugunsmūrim pēc atšifrēšanas pakele ir jāatļauj.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
Ja ligzda ir saistīta tikai ar fiziskās saskarnes adresi, nevis ar tuneļa adresi, pakele, kas ierodas tunelī, tiek izmestas pirms ugunsmūra apjautāšanas. Šī kļūme no mākoņa puses izskatās tieši tāpat kā kartēšanas problēma, un tā pārdzīvo jebkuru keepalive pielāgojumu.
Atļauto saraksta pārbaude otrā virzienā ir tikpat svarīga. Mākoņa partnerim ir jāatļauj mājas tuneļa adrese kā avots, ja tas gatavojas atbildēt, un mājas partnerim ir jāatļauj mākoņa adrese kā galamērķis. keepalive pakele ir autentificēta datplūsma, un tās piemēro tos pašus noteikumus, tāpēc darbojošs keepalive var pastāvēt līdzās lietotnei, kas nedarbojas.
Izritiniet izmaiņas un ziniet to robežas
Piemērojiet iestatījumu, restartējiet saskarni, ja tas ir jūsu atjaunināšanas veids, un pēc tam atkārtojiet dīkstāves testu, nevis tūlītējo testu. Nogaidiet ilgāk par iepriekš nolasīto taimautu, veiciet apgrieztu pieprasījumu un apstipriniet, ka skaitītāji ir kustējušies abos galos.
Pierakstiet intervālu un izmērīto taimautu tam blakus. Turpmākas maršrutētāja programmaparatūras izmaiņas vai pāreja uz mobilo savienojumu var mainīt taimautu. Pieraksts ir tas, kas ļauj kādam no jauna atvasināt vērtību, nevis to nokopēt. Divi skaitļi vienā rindā vēlāk ietaupa veselu izmeklēšanu.
Pastāvīgi keepalive aizsargā stāvokli. Tie neatver portu, nepievieno ierakstu atļauto sarakstam un neliek klausītājam parādīties. Kad apgrieztais savienojums vispār nedarbojas, vaina ir vienā no šiem trim, un WireGuard ātrā pamācība apraksta keepalive iestatījumu tajos pašos šaurajos terminos.