WireGuard: po potinklio pakeitimo nėra maršruto į partnerį — du keliai
Potinklio pakeitimas sugadina WireGuard dvejose vietose: AllowedIPs ir grįžimo kelyje. Palyginkite pernumeravimą vietoje su sąsajos perstatymu.
Rankos paspaudimas yra šviežias wg show išvestyje, galinis taškas teisingas, raktai niekada nepasikeitė — o ping vis dar sako, kad nėra maršruto į partnerį. Tunelio potinklį pakeitėte prieš valandą. Šis simptomas yra prefikso neatitikimo požymis, o ne raktų problema: WireGuard baigė rankos paspaudimą ir tada išmetė duomenis, nes šaltinio adresas nebeatitinka to, ką priims priimantis partneris. Yra du protingi būdai įgyvendinti potinklio pakeitimą, ir jie žlunga skirtingose vietose.
Du būdai įgyvendinti pakeitimą ir kiek kiekvienas kainuoja
A variantas yra pernumeravimas vietoje: pakeiskite sąsajos adresą, partnerių diapazonus, maršrutus ir kiekvieną konfigūracijos kopiją, tada įkelkite iš naujo. B variantas yra ant naujo prefikso šalia senojo pastatyti antrą sąsają, perkelti partnerius ir pašalinti senąją sąsają, kai srautas tikrai persikėlė.
| A: renumber in place | B: parallel interface | |
|---|---|---|
| Downtime | The reload window, per host | None if peers are added to both |
| Rollback | Re-apply the previous files | Point peers back at the old interface |
| Risk | Half-applied change: new address, old ranges | Two live interfaces with overlapping intent |
| Effort | Small, if the deployment has one owner | Higher, and needs a cleanup step |
| Fits | Two or three peers you control | Many peers, remote sites, or no maintenance window |
Būtent pusiau pritaikyta būsena daro A variantą pavojingą, nes ji neatrodo sugedusi. Sąsaja pakyla, rankos paspaudimas pavyksta, ir tik duomenų kelias nepavyksta. B variantas kainuoja daugiau darbo, bet palaiko veikiantį kelią gyvą, kol rasite kiekvieną nuorodą.
Kas jūsų pusėje turi judėti kartu
Keturi dalykai vietiniame mazge apibūdina tą patį potinklį, o vieno pakeitimas yra visų pakeitimas: sąsajos adresas, kiekvieno partnerio AllowedIPs, maršrutas, kurį sistema naudoja tiems tikslams, ir viskas, ką tvarkyklė įdiegia jūsų vardu. Su wg-quick paskutiniai du generuojami iš konfigūracijos kiekvieną kartą, kai sąsaja pakyla, todėl pasenusi kopija tyliai grąžina seną prefiksą.
Palyginkite sukonfigūruotą su veikiančiu, o ne pasikliaukite vienu iš jų:
wg show
wg showconf wg0
ip addr show wg0
ip route get 10.90.0.5Maršruto paieška yra žingsnis, kurį žmonės praleidžia. Ji atsako, ką branduolys iš tikrųjų darytų tikslui, įskaitant konkretesnį maršrutą, kurį paliko tvarkyklė ar konteinerių vykdymo aplinka. Jei ji nurodo kitą sąsają nei tunelis, konfigūracija nėra problema.
Veikiančiai sąsajai pritaikykite pakeistą failą nesugriovę tunelio:
wg syncconf wg0 <(wg-quick strip wg0)Tai atnaujina partnerius ir diapazonus vietoje. Tai neatnaujina sąsajos adreso ar maršrutų, nes jie nėra WireGuard nustatymai — todėl pernumeravimui vis dar reikia iš naujo sukurti sąsają arba pakeisti adresą su ip, o tada dar kartą patikrinti maršrutizavimą.
Kas tolimajame gale turi judėti kartu
Čia potinklio pakeitimas paprastai miršta. AllowedIPs yra ne tik maršrutizavimo užuomina; tai ir šaltinio adresų, kuriuos partneris gali pateikti, sąrašas. Kai pernumeruojate klientus ir paliekate serverio AllowedIPs sename prefikse, serveris priima rankos paspaudimą, gauna užšifruotus paketus ir juos išmeta, nes vidinis šaltinis neatitinka jokio diapazono, kurį jis sieja su tuo partneriu. Jokia klaida neįrašoma, o klientas mato laiko limitą.
Todėl sąmoningai atnaujinkite priimančiąją pusę: partnerio įrašas serveryje turi išvardyti naują kliento prefiksą, paties serverio grįžimo maršrutas turi nurodyti tunelį tam prefiksui, o bet kuris pasroviui esantis tinklas už serverio turi išmokti naują kelią. Užkardos politika, kuri įvardijo seną diapazoną, reikalauja to paties, ir viskas, kas atlieka pasirinkimą pagal šaltinį.
Diagnostika, atskirianti abu gedimus, yra pigi. Šviežias rankos paspaudimas be duomenų reiškia, kad tunelis pakeltas ir vidinis adresavimas nesutampa. Visiškai nėra rankos paspaudimo — žiūrite pasiekiamumą arba raktus. Neperkraukite raktų dėl prefikso problemos; tai atkuria vienintelį dalyką, kuris veikė.
Pasenusios kopijos, pergyvenančios jūsų pakeitimą
Failo keitimas nėra tas pats, kas veikiančios sistemos keitimas, o kopijų yra daugiau, nei žmonės tikisi: įrenginį valdantis unit arba tvarkyklė, antras profilis tuo pačiu pavadinimu kitame kataloge, konteineris, kurio konfigūracija įkepta į atvaizdą, maršrutizatoriaus sąsaja su savo pakeista versija ir kliento programa, kuri paleidžiant iš naujo importuoja išsaugotą tunelį. Kiekviena jų gali atkurti seną prefiksą po to, kai jūsų pakeitimas atrodo baigtas.
Vardai taip pat keliauja. Jei skaitinis maršrutas veikia, o mazgo vardas nepavyksta, vidinis DNS įrašas ar paslaugos konfigūracija vis dar nurodo seną tunelio adresą. Pataisykite nuorodą, o ne plėskite kiekvieną partnerio diapazoną, nes tai užgožtų tikrąją problemą ir tuo pačiu padidintų šaltinio ACL.
Dirbdami palikite atvirą vieną atkūrimo kelią: antrą būdą patekti į mazgą, nuosekliąją konsolę arba suplanuotą konfigūracijos failų atšaukimą. Tunelio pakeitimas, kuris užrakina jus už mašinos, kurią keičiate, yra dažniausias būdas šiai užduočiai tapti vakaru.
Pasirinkimas tarp dviejų ir perjungimo patikra
Rinkitės A, kai jums priklauso kiekvienas partneris, skaičius mažas ir trumpa pertrauka priimtina. Rinkitės B, kai partneriai yra tolimos rankos, kurių nekontroliuojate, kai ryšys tarp vietovių turi likti, arba kai negalite garantuoti, kad kiekviena kopija bus atnaujinta vienu ėjimu. Tokiu atveju pridėkite naują prefiksą abiem sąsajoms, perkelkite partnerius po vieną, stebėkite srautą naujoje ir tik tada pašalinkite senąją sąsają bei jos maršrutus.
Abiem atvejais pakeitimas baigtas, kai praeina keturi patikrinimai: rankos paspaudimas šviežias, naujo prefikso tikslo maršruto paieška įvardija tunelį, kelių šimtų baitų naudingoji apkrova pereina abiem kryptimis, ir tas pats galioja po mazgo arba tvarkyklės paleidimo iš naujo. Oficiali wg(8) instrukcija yra nuoroda, ką AllowedIPs reiškia kiekviena kryptimi, ir verta ją perskaityti dar kartą prieš plečiant diapazoną, kad simptomas išnyktų.
- Šviežias rankos paspaudimas ir nėra duomenų: pažiūrėkite AllowedIPs pas priimantįjį, prieš liesdami raktus.
- Maršruto paieška rodo netinkamą sąsają: maršrutui priklauso tvarkyklė arba konteineris, o ne jūsų failas.
- Skaitinis adresas tvarkingas, o mazgo vardas sugedęs: sena nuoroda, ne maršrutizavimo kilpa.
- Pakeitimas baigtas tik tada, kai po paleidimo iš naujo vis dar naudojamas naujas prefiksas.