Handshake-ul este proaspăt în wg show, endpointul este corect, cheile nu s-au schimbat niciodată — iar ping spune în continuare că nu există rută către peer. Ai schimbat subrețeaua tunelului acum o oră. Acel simptom este semnătura unei nepotriviri de prefix, nu a unei probleme cu cheile: WireGuard a finalizat handshake-ul și apoi a aruncat datele pentru că o adresă sursă nu mai corespunde cu ceea ce va accepta peerul receptor. Există două moduri rezonabile de a aplica o schimbare de subrețea, și ele eșuează în locuri diferite.

Două moduri de a aplica schimbarea, și cât costă fiecare

Opțiunea A este renumerotarea la fața locului: editează adresa interfeței, intervalele peerilor, rutele și fiecare copie a configurației, apoi reîncarcă. Opțiunea B este construirea unei a doua interfețe pe noul prefix lângă cea veche, mutarea peerilor și eliminarea interfeței vechi după ce traficul chiar s-a mutat.

A: renumber in placeB: parallel interface
DowntimeThe reload window, per hostNone if peers are added to both
RollbackRe-apply the previous filesPoint peers back at the old interface
RiskHalf-applied change: new address, old rangesTwo live interfaces with overlapping intent
EffortSmall, if the deployment has one ownerHigher, and needs a cleanup step
FitsTwo or three peers you controlMany peers, remote sites, or no maintenance window

Starea pe jumătate aplicată este cea care face opțiunea A periculoasă, pentru că nu arată stricată. Interfața urcă, handshake-ul reușește și doar calea datelor eșuează. Opțiunea B cere mai multă muncă, dar ține în viață o cale funcțională cât timp găsești fiecare referință.

Ce trebuie să se miște împreună la capătul tău

Patru lucruri de pe gazda locală descriu aceeași subrețea, iar schimbarea unuia este schimbarea tuturor: adresa interfeței, AllowedIPs al fiecărui peer, ruta pe care sistemul o folosește pentru acele destinații și tot ce instalează managerul în numele tău. Cu wg-quick, ultimele două sunt generate din configurație la fiecare pornire a interfeței, așa că o copie învechită reinstalează în silențiu prefixul vechi.

Compară ce este configurat cu ce este viu în loc să ai încredere în oricare dintre ele:

wg show
wg showconf wg0
ip addr show wg0
ip route get 10.90.0.5

Interogarea rutei este pasul pe care oamenii îl sar. Ea răspunde ce ar face kernelul de fapt pentru o destinație, inclusiv o rută mai specifică lăsată de un manager sau de un mediu de rulare pentru containere. Dacă raportează o altă interfață decât tunelul, configurația nu este problema.

Pentru o interfață în funcțiune, aplică fișierul editat fără să demontezi tunelul:

wg syncconf wg0 <(wg-quick strip wg0)

Asta actualizează peerii și intervalele la fața locului. Nu actualizează adresa interfeței sau rutele, pentru că nu sunt setări WireGuard — așa că o renumerotare încă necesită recrearea interfeței sau schimbarea adresei cu ip, iar apoi verificarea din nou a rutării.

Ce trebuie să se miște împreună la capătul îndepărtat

Aici moare de obicei o schimbare de subrețea. AllowedIPs nu este doar un indiciu de rutare; este și lista adreselor sursă pe care un peer le poate prezenta. Când renumerotezi clienții și lași AllowedIPs al serverului pe prefixul vechi, serverul acceptă handshake-ul, primește pachetele criptate și le aruncă pentru că sursa internă nu corespunde niciunui interval pe care îl asociază cu acel peer. Nu se înregistrează nicio eroare, iar clientul vede un timeout.

Așa că actualizează partea receptoare cu intenție: intrarea peerului de pe server trebuie să listeze noul prefix al clientului, ruta de întoarcere a serverului trebuie să indice tunelul pentru acel prefix, iar orice rețea din aval din spatele serverului trebuie să învețe noua cale. Politica de firewall care numea intervalul vechi are nevoie de același tratament, la fel ca orice face selecție pe bază de sursă.

Diagnosticul care separă cele două defecțiuni este ieftin. Un handshake recent fără date înseamnă că tunelul este sus și că adresarea internă nu este de acord. Niciun handshake înseamnă că te uiți la accesibilitate sau la chei. Nu roti cheile pentru o problemă de prefix; asta resetează singurul lucru care funcționa.

Copii învechite care supraviețuiesc editării tale

Editarea unui fișier nu este același lucru cu schimbarea sistemului aflat în funcțiune, iar copiile sunt mai numeroase decât se așteaptă oamenii: unitatea sau managerul care deține interfața, un al doilea profil cu același nume într-un alt director, un container cu configurația coptă într-o imagine, o interfață de router care își păstrează propria versiune editată și o aplicație client care reimportă un tunel salvat la pornire. Fiecare dintre ele poate restaura prefixul vechi după ce schimbarea ta pare completă.

Și numele călătoresc. Dacă ruta numerică funcționează dar numele gazdei eșuează, o înregistrare DNS internă sau configurația unui serviciu încă indică adresa veche a tunelului. Corectează referința în loc să lărgești fiecare interval de peer, ceea ce ar masca problema reală și ar mări în același timp ACL-ul de sursă.

Ține o cale de recuperare deschisă cât lucrezi: o a doua modalitate de a intra pe gazdă, o consolă serială sau o revenire programată a fișierelor de configurare. O schimbare de tunel care te încuie în afara mașinii pe care o schimbi este cel mai obișnuit mod în care acest task devine o seară.

Alegerea între cele două, și verificarea comutării

Alege A când deții fiecare peer, numărul este mic și o întrerupere scurtă este acceptabilă. Alege B când peerii sunt mâini îndepărtate pe care nu le controlezi, când o legătură între situri trebuie să rămână sus, sau când nu poți garanta că fiecare copie va fi actualizată într-o singură trecere. În acel caz adaugă noul prefix la ambele interfețe, mută peerii unul câte unul, urmărește traficul pe cea nouă și abia apoi elimină interfața veche și rutele ei.

În ambele opțiuni, schimbarea este gata când trec patru verificări: handshake-ul este recent, interogarea rutei pentru o destinație din noul prefix numește tunelul, o încărcătură de câteva sute de octeți trece în ambele sensuri, iar același lucru este valabil după o repornire a gazdei sau a managerului. Manualul wg(8) este referința pentru ce înseamnă AllowedIPs în fiecare direcție, și merită recitit înainte să lărgești un interval ca să dispară un simptom.

  • Handshake recent și niciun fel de date: uită-te la AllowedIPs la receptor înainte să atingi cheile.
  • Interogarea rutei indică interfața greșită: ruta aparține unui manager sau container, nu fișierului tău.
  • Adresă numerică în regulă și nume de gazdă stricat: o referință veche, nu o buclă de rutare.
  • Schimbarea este completă doar când, după o repornire, se folosește în continuare noul prefix.

Articole similare