Dauguma žmonių AllowedIPs lauką skaito kaip leidimų sąrašą – adresų rinkinį, kurie gali prisijungti prie partnerio, panašiai kaip tuneliui parašyta ugniasienės taisyklė. Taip nėra. Šis laukas yra maršrutų lentelė, veikianti abiem kryptimis: ji parenka partnerį išeinančiam paketui ir tikrina įeinančio paketo šaltinį. Skaitymas kaip prieigos sąrašo sukuria konfigūracijas, kurios maršrutizuoja srautą, kurio niekas neprašė.

Vienas laukas, du skaitytojai: išėjimo pasirinkimas ir šaltinio patikra

Kliente prefiksai nusprendžia, kurie tikslai keliauja pas tą partnerį, o kurie lieka įprastame tinkle. Todėl įrašas 0.0.0.0/0 apima kiekvieną IPv4 tikslą, ir todėl viso tunelio profilio importavimas siunčia įprastą naršymą per nuotolinę mašiną. Siauri įrašai daro priešingai: maršrutizuoja tik išvardytus tinklus, o visa kita palieka ten, kur buvo. „WireGuard“ dokumentacijos kriptovaliutų maršrutizavimo skyrius abu darbus nurodo vienoje vietoje: išeinančio partnerio pasirinkimą ir įeinančio šaltinio patikrą.

Serveryje tas pats laukas aprašo, kokius šaltinio adresus kiekvienas partneris gali naudoti. Tai kriptografinė patikra, o ne paketų filtras: paketas, kurio vidinis šaltinis neatitinka partnerio sąrašo, išmetamas „WireGuard“ viduje, dar prieš jį pamatant bet kuriai pagrindinio kompiuterio ugniasienei. Abu darbai dalijasi vienu sąrašu, ir būtent todėl iš kitur nukopijuotas sąrašas netinkamai veikia vietoje, kurios neapsvarstėte.

Kliento blokas yra vieta, kur prasideda didžioji dalis šios painiavos. Padalintas tunelis įvardija nuotolinius tinklus, o visas tunelis yra tas pats laukas su numatytuoju prefiksu:

[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24

[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0

Abi formos yra savarankiškos, ir tai yra alternatyvos, o ne žingsniai. Pirmoji per tunelį siunčia tik tuos du tinklus; antroji siunčia kiekvieną tikslą, o įrašas ::/0 prideda IPv6 prie numatytojo IPv4. Kad ir ką pasirinktumėte, šie prefiksai yra visas to partnerio maršrutizavimo sprendimas, kai wg-quick pradeda diegti maršrutus.

Šakotuvui reikia kito sąrašo

Šakotuvas išvardija kiekvieno kliento tunelio adresą kaip pagrindinio kompiuterio prefiksą, be to, kiekvieną tinklą, kuris tikrai yra už to kliento. Kliento plataus sąrašo kopijavimas į kiekvieną šakotuvo partnerį pasako šakotuvui, kad daug partnerių gali naudoti tuos pačius adresus kaip šaltinį, ir tai nėra adresų planas. Laukas Endpoint priklauso visiškai kitam sluoksniui: jis nurodo išorinį partnerio adresą ir prievadą, niekada tikslo tunelio viduje.

[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24

Pagrindinio kompiuterio prefiksas neša tunelio adresą, o tinklo prefiksas neša tai, kas yra už kliento, ir abu reikalingi. Be pagrindinio kompiuterio prefikso šakotuvas negali grąžinti paties kliento srauto, o be tinklo prefikso LAN už jo lieka nepasiekiamas; partneris, už kurio nieko nėra, gauna tik pagrindinio kompiuterio prefiksą.

Praleidus maršrutų diegimą lieka spraga

wg-quick, pagalbinė priemonė, kuri iš konfigūracijos failo pakelia sąsają, įdiegia sąsajos adresus ir maršrutus kaip to darbo dalį. Nustačius Table = off, pagalbinė priemonė nurodoma praleisti maršrutų darbą, kuris neįdiegia pakaitalų ir nepadaro privataus tinklo pasiekiamo. Kai automatiniai maršrutai jau atlieka darbą, reikalingų prefiksų įvardijimas yra aiškesnė konfigūracija. Išjungti maršrutų valdymą ir palikti pakaitalą neparašytą nėra dizainas, tai yra praleidimas.

Pagrindinis wg įrankis elgiasi kitaip: jis konfigūruoja sąsają ir niekada neliečia maršrutų, todėl tiesiogiai juo pastatyta sąranka turi savo maršrutų komandas. Instrukcijos, parašytos vienam įrankiui, gali atrodyti neteisingai, kai jų laikomasi su kitu. Sėkmingas ping taip pat yra silpnas įrodymas, nes jis tikrina vieną kelią, o ne kiekvieną reikalingą programos kelią.

DNS ir IPv6 sprendžiami atskirai

Patikrinkite DNS serverio adresą, kurį skelbia tunelis, ir įsitikinkite, kad per pasirinktus prefiksus egzistuoja maršrutas į tą adresą. Rezolverio nustatymas nepadaro rezolverio pasiekiamo, o tunelio susiaurinimas gali tyliai pašalinti maršrutą, kuris ten vedė. Atskirai apžiūrėkite ir IPv6, nes teisingas IPv4 padalijimas nieko nesako apie IPv6 numatytąjį maršrutą, kuris vis dar rodo į fizinę jungtį. Trys atskiri sprendimai gali pasikeisti iš karto, kai redaguojate vieną partnerio bloką.

Tada atidarykite vieną privatų išteklių ir vieną įprastą svetainę iš žinomos pradinės konfigūracijos. Jei išteklius atsako ir naršymas vis dar išeina per vietinį ryšį, padalijimas daro tai, ko prašėte. Jei naršymas sugenda tą pačią akimirką, tunelis paėmė numatytąjį maršrutą, ir prefiksų sąrašas yra vieta, kur reikia žiūrėti.

Susiję straipsniai