Predpona gostitelja v WireGuardu: zakaj en naslov deluje, ostali pa ne
Naslov /32 na vmesniku je veljavna predpona gostitelja in usmerja samo ta naslov. Dodajte pot, ki jo implicira AllowedIPs, nato preverite povratno pot.
Predor je vzpostavljen, rokovanje poteka vsaki dve minuti, in točno en naslov na drugi strani se odziva. Pingi na naslov predora partnerja delujejo; nič za njim ne. Nekdo prebere konfiguracijo vmesnika, vidi predpono gostitelja in sklene, da je maska napačna. Razširitev na /24 popravi ping za nekaj časa in nato pokvari nekaj drugega. Predpona nikoli ni bila kriva, in manjkajoča pot ni tista, ki jo nadzoruje maska.
Kaj predpona vmesnika dejansko ustvari
V Linuxu dodelitev naslova vmesniku ustvari povezano pot za to predpono. Če dodelite predpono gostitelja, povezana pot pokriva en naslov. Če dodelite /24, jih pokriva 256 in vsak od njih zdaj velja za dosegljivega prek te povezave.
ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1
Predpona gostitelja je za predor od točke do točke povsem običajna izbira, ker je na drugem koncu točno en partner. Tretji ukaz je tisti, ki odgovori na uporabnikovo vprašanje: pove, kateri vmesnik bi jedro uporabilo za ta cilj, in ne bo pokazalo nič koristnega, če se ne ujema nobena pot.
To je celotna razlaga simptoma. En naslov se odziva, ker zanj obstaja povezana pot, ali ker seznam dovoljenih partnerja to pomotoma vključuje. Vse drugo nima poti in se zavrže, preden je WireGuard sploh vpleten. Predor je ves čas zdrav, zato števec rokovanj še naprej deluje pomirjujoče.
AllowedIPs sta dve pravili pod enim imenom
Seznam dovoljenih na partnerja v WireGuardu opravlja dve nalogi hkrati, in sintaksa konfiguracije poskrbi, da izgledata kot ena. Na vhodu dovoljuje, katere izvorne naslove lahko partner predstavi. Na izhodu izbira, kateremu partnerju se paket pošlje, tako da najde najbolj specifično ujemanje.
Nobena od nalog ni usmerjanje. Jedro mora še vedno odločiti, da paket spada na vmesnik predora, preden WireGuard pogleda nanj, in ta odločitev pride iz usmerjevalne tabele. Vnos partnerja s širokim seznamom dovoljenih sam po sebi ne namesti poti.
Zato je lahko konfiguracija videti popolna in se obnašati asimetrično. Odjemalec pošilja na drugo stran, ker pot obstaja, odgovori pa nikoli ne pridejo, ker seznam dovoljenih druge strani ne dovoljuje izvora odjemalca, ali ker druga stran nima povratne poti. Obe smeri sta ločeni odločitvi z ločenima načinoma odpovedi. Zapisati, katero preizkušate, je polovica diagnoze.
Od kod pride pot
Če uporabljate wg-quick, se poti ustvarijo za vas iz seznama dovoljenih vsakega partnerja, razen če ste nastavili Table = off in prevzeli nadzor sami. To je vedenje, ki ga orodje dokumentira, in je razlog, da konfiguracija brez izrecnih direktiv poti vseeno deluje.
sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0
Primerjajte seznam dovoljenih s potmi, ki dejansko obstajajo. Partner, ki dovoljuje celotno podomrežje, a je ustvaril le pot gostitelja, pomeni, da pomočnik ni nikoli tekel, ali da vmesnik upravljate neposredno z wg in ip, in v tem primeru nič ne ustvarja poti za vas.
Ko ga upravljate ročno, je pot ena vrstica in njena oblika je izrecna: cilj skozi vmesnik, brez prehoda, ker je povezava od točke do točke. Dodajanje ni obhod za slabo predpono; je manjkajoča polovica zasnove, ki se je odločila usmerjanje prevzeti sama.
Širša predpona ne doda vnosa partnerja
Mamljiv popravek je spremeniti naslov v /24, da povezana pot pokrije krajevno omrežje strežnika. Videti je, da deluje, in razlog, da je videti, da deluje, je, da se povezana pot zdaj ujema, ne pa, da bi se WireGuard česa novega naučil.
Kar ste storili tudi, je zahteva po celotnem obsegu kot neposredno dosegljivem prek te povezave, vključno z naslovi, ki pripadajo drugim partnerjem ali krajevnemu omrežju, ki je v resnici za strežnikom. Promet do teh naslovov zdaj vstopa v predor, in ali pride ven na drugi strani, je odvisno od usmerjanja in seznamov dovoljenih samega strežnika.
Kriptografska stran ni prizadeta v nobenem primeru. WireGuard še vedno potrebuje vnos na seznamu dovoljenih, ki pokriva cilj, da izbere partnerja, in druga stran še vedno potrebuje vnos, ki pokriva vaš izvor, da ga sprejme. Širša predpona vmesnika ne more zagotoviti nobenega od obeh.
Potrdite obe smeri, preden karkoli spremenite
Obravnavajte oba konca ločeno in zapišite, kaj pravi vsak. Na odjemalcu pot in vnos partnerja; na strežniku zrcalna slika plus njegova lastna povratna pot:
ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10
Zajem je tisto, kar razreši spore o smeri. Če se odhodni paketi pojavijo na vmesniku predora in strežnik ne zabeleži ničesar, jih oddaljeni konec zavrača, običajno zato, ker je vaš izvor zunaj njegovega seznama dovoljenih. Če se ne pojavi prav nič, pot manjka ali kaže drugam.
Nato popravite ožji konec. Vnos na seznamu dovoljenih na strani strežnika za naslov vašega odjemalca in vnos na strani odjemalca za ciljno podomrežje je običajna oblika, in pušča predpono vmesnika pri miru. Predpono razširite le, če naslovni načrt res želi skupno podomrežje na tej povezavi, in to storite kot spremembo načrta, ne kot korak razhroščevanja.