Două locații mobile fără porturi de intrare: construiește un hub care funcționează
Când niciuna dintre locații nu acceptă conexiuni IPv4 de intrare, lasă ambele să inițieze către un hub accesibil. Rulează pașii de rutare, redirecționare și rezervă în această ordine.
Două locații pe legături mobile au aceeași problemă în ambele direcții: niciuna nu poate accepta o conexiune IPv4 nesolicitată, deci niciuna nu poate juca rolul de server într-un tunel direct. Arhitectura care funcționează pune o terță parte accesibilă la mijloc: fiecare locație apelează spre exterior, iar mijlocul redirecționează doar traficul pe care îl aprobi. Acel mijloc poate fi un router pe care îl administrezi tu sau un produs care prezintă perechile, și acestea nu sunt același lucru. Pașii de mai jos sunt ordonați astfel încât fiecare să producă dovezi înainte ca următorul să depindă de el.
Nicio locație nu poate fi apelată, deci ambele trebuie să apeleze spre exterior
Confirmă restricția înainte de a proiecta în jurul ei. Dacă operatorul dă interfeței WAN o adresă privată, nicio redirecționare de port pe routerul locației nu o va face accesibilă, pentru că traducerea are loc mai sus. O adresă IPv6 publică poate exista pe aceeași legătură și poate schimba complet proiectul, de aceea verificarea acoperă ambele familii. Notează răspunsul pentru fiecare locație, pentru că cele două au rareori restricții identice chiar dacă împart operatorul.
Cazul mobil obișnuit arată ca o adresă din intervalul tradus al operatorului cu o rută implicită prin ea. Nu este o defecțiune de reparat; este motivul pentru care hubul există. Ceea ce cauți este orice adresă la care o terță parte poate ajunge fără ca locația să fi vorbit prima.
Două comenzi răspund la întrebarea de adresare a locației din fața ta. Rulează-le pe routerul locației, nu pe un laptop din spatele lui:
ip -4 addr show scope global
ip -6 addr show scope globalCine prezintă perechile și cine transportă pachetele
Prezentarea și transportul sunt sarcini separate pe care produsele le grupează adesea fără a face linia vizibilă. Un mecanism de întâlnire ajută două perechi să găsească o cale candidată; un releu le transportă pachetele când nu există o cale directă. Cumpărarea unui serviciu care prezintă perechi nu îți dă un router, iar această diferență decide dacă proiectul are nevoie de un hub.
Traversarea are propriul vocabular, iar cuvintele descriu roluri, nu garanții. Specificația ICE descrie candidați și verificări de conectivitate, STUN descrie o modalitate de a afla despre traducerea adreselor, iar TURN descrie transportul retransmis pentru aplicațiile care îl implementează. Niciunul dintre aceste mecanisme nu apare într-o poartă obișnuită pentru că ai îndreptat-o către o adresă de descoperire. Verifică traversarea ca abilitate a produsului și presupune releu până când un test arată contrariul.
O rută pe locație, deținută de o pereche
Hubul are nevoie de un tunel pe locație, un prefix LAN separat în spatele fiecăreia și o rută pentru fiecare prefix care îi numește proprietarul. În exemplu hubul este 10.61.0.1, locația A este 10.61.0.11 cu LAN 10.60.10.0/24, iar locația B este 10.61.0.12 cu LAN 10.60.20.0/24. Fiecare rută de mai jos indică perechea care deține prefixul, nu interfața tunelului:
ip route add 10.60.10.0/24 via 10.61.0.11 dev wg0
ip route add 10.60.20.0/24 via 10.61.0.12 dev wg0
sysctl net.ipv4.ip_forward
ip route get 10.60.20.55 from 10.60.10.77Redirecționarea trebuie să fie activată, altfel pachetele se opresc la hub fără o eroare care să arate cauza. Ultima comandă răspunde la întrebarea reală, pentru că întreabă pe ce cale ar merge un pachet din LAN-ul locației A în LAN-ul locației B cu sursa inclusă în căutare. Tratează o căutare care numește interfața tunelului ca dovadă și una care cade pe ruta implicită ca rută lipsă, nu ca mister. Apoi limitează tranzitul în mod deliberat, pentru că un hub care redirecționează între fiecare pereche transformă două locații într-o rețea plată și politica de acces pe care credeai că o ai nu se mai aplică.
Decide și unde se termină criptarea. Când hubul deține ambele capete ale tunelului, operatorul acelei mașini și sarcina lui de lucru intră în modelul de încredere și disponibilitate, iar lățimea sa de bandă devine parte din cale.
Menține fiecare mapare vie prin operator
Fiecare locație își începe propriul tunel, iar fiecare trebuie să mențină vie maparea traducerii, altfel operatorul o uită. Un mesaj de menținere pe partea care inițiază păstrează acea mapare între strângerile de mână. Limitează prefixele permise la adresa hubului și la LAN-ul îndepărtat, astfel încât o pereche compromisă să nu poată revendica un prefix care nu îi aparține:
[Peer]
PublicKey = <hub public key>
Endpoint = 192.0.2.10:51820
AllowedIPs = 10.61.0.1/32, 10.60.20.0/24
PersistentKeepalive = 25Oglindește blocul pe cealaltă locație cu propriul prefix îndepărtat, și rezistă tentației de a permite întregul interval al tunelului. O strângere de mână care se oprește și reia dintr-un port sursă nou este semnătura unei mapări expirate, iar marcajele de timp ale strângerii sunt dovada că s-a întâmplat. Un interval mai scurt decât timeout-ul operatorului previne expirarea în loc să o repare ulterior. Când operatorul își schimbă comportamentul de traducere, așteaptă-te ca acele timpi să se schimbe cu el.
Dovedește ambele direcții, apoi dovedește recuperarea
Verificarea este direcțională, deci un ping de la A la B dovedește jumătate din proiect și nimic despre calea de întoarcere. Verifică calea de răspuns cu aceeași căutare conștientă de sursă pe hub, apoi repetă testul din cealaltă parte. Strângerile de mână proaspete fac și ele parte din dovezi, pentru că un tunel inactiv o oră poate testa o mapare veche:
wg show wg0 latest-handshakes
ping -c 3 10.60.20.55
traceroute -n 10.60.20.55Apoi testează eșecul pe care îl aștepți, nu succesul pe care îl vrei. Repornește legătura unei locații și confirmă că tunelul revine fără ca o persoană să atingă vreun capăt, pentru că un proiect care are nevoie de un operator după fiecare schimbare la operator este neterminat. Notează calea principală, alternativa IPv6 când există și comportamentul când hubul nu este disponibil. Hubul este acum parte din modelul tău de disponibilitate, așa că scrie asta în loc să o descoperi în timpul unei căderi.