Antrojo potinklio įtraukimas į VPN tarp svetainių: du keliai
Politikos pagrindu veikiantiems tuneliams reikia abiejose pusėse atitinkančių selektorių; maršrutų pagrindu – maršruto. Pasirinkite tinkamą kelią ir pirmiausia sutvarkykite grįžimo maršrutą.
Antrojo potinklio įtraukimas į veikiantį tunelį tarp svetainių vienoje konstrukcijoje užima penkias minutes, kitoje – beveik visą popietę. Kai tunelis įdiegia maršrutus nurodytiems prefiksams, pridedate maršrutą ir srautas juo eina. Kai derasi dėl vienos fiksuotos selektorių poros, naujasis prefiksas lieka neapsaugotas, kol abi pusės susitaria dėl atitinkančios poros. Sprendžia trys dalykai: ką iš tikrųjų aprašo kiekvienos pusės konfigūracija, ar suderintas srautas susiaurėja iki mažiausios atitinkančios poros, ir kam priklauso naujojo diapazono grįžimo kelias.
Skaitykite branduolį, o ne būsenos etiketę
Tunelis, pranešantis apie ryšį, įdiegė bent vieną vaikinę asociaciją, bet nebūtinai tą, kurią manote. Linux branduolys rodo, kas taikoma: ip xfrm policy išvardija selektorių poras, o swanctl --list-sas (ar senesnis ipsec statusall) rodo, dėl ko pusės susitarė, įskaitant srauto selektorius kiekviena kryptimi. Jei naujojo prefikso nėra nė viename, jis neapsaugotas, kad ir ką sakytų konfigūracijos failas.
Palyginkite su maršrutų lentele. Maršrutų pagrindu veikiančioje sąrangoje tunelio įrenginys yra kitas šuolis saugomiems prefiksams. Politikos pagrindu veikiančioje sąrangoje dažnai nėra atskiro maršruto nutolusiam potinkliui, tik numatytasis maršrutas, nes srautą renkasi politika, o ne lentelė.
Politikos pagrindu: abi pusės turi išvardyti naująjį prefiksą
strongSwan terminais selektorius yra local_ts ir remote_ts vaikinėje konfigūracijoje, leftsubnet ir rightsubnet įpėdiniuose. Naujasis prefiksas turi atsirasti abiejose pusėse veidrodiškai: ką svetainė A vadina vietiniu, svetainė B vadina nutolusiu. Neatitikimas retai duoda švarią klaidą. Pusės susiaurėja iki sankirtos, senasis prefiksas veikia toliau, o naujasis tyliai nepavyksta.
swanctl --load-conns
swanctl --initiate --child <child-name>
swanctl --list-sas
ip xfrm policy
pfSense ar OPNsense tai reiškia antrą Phase 2 įrašą, suporuojantį naują vietinį potinklį su nauju nutolusiu, ir tada taikymą. Palikite seną įrašą; pakeitimas perkelia pradinį potinklį, o ne prideda. Jei esamas Phase 2 jau apima supertinklą kaip 0.0.0.0/0 ar apibendrintą diapazoną, nepridėkite siauresnio įrašo šalia: persidengiantys selektoriai įdiegia konkuruojančias politikas, o vertinimo tvarka nusprendžia nugalėtoją.
IKEv1 kiekvieną potinklių porą daro atskiru Phase 2, o pusė, kuri ima vieną porą per mainus, atmeta likusias. IKEv2 gali nešti kelias selektorių poras viename vaikiniame, bet tik jei abi realizacijos jas priima. Sąrašas iš swanctl --list-sas yra tiesa; tai, ką įvedėte, yra prašymas.
Maršrutų pagrindu: maršrutas yra politika
XFRM sąsaja ar VTI įrenginys neša srautą pagal maršrutų lentelę. Nukreipiate naują prefiksą į įrenginį abiejose svetainėse, ir taikoma būsena, susieta su sąsajos transformacija. Nėra selektorių poros, kurią reikėtų sinchronizuoti, todėl ši konstrukcija geriau skalėjasi daugėjant potinklių. strongSwan persiuntimo vadovas išsamiau nagrinėja branduolio pusę.
ip route add 192.168.60.0/24 dev xfrm0
ip route get 192.168.60.10
WireGuard eina toliau. AllowedIPs yra kartu kriptografinis leidžiamųjų sąrašas ir, per wg-quick, maršrutų lentelės įrašas. Pridėkite prefiksą tik vienoje pusėje ir gausite rankos paspaudimą, išeinančius paketus ir tylą, nes tolimoji pusė atmeta paketus, kurių šaltinis nėra jos sąraše. Forma wg set pakeičia visą sąrašą, todėl pakartokite jau veikusius prefiksus, kitaip juos nukirpsite:
wg set wg0 peer <PUBKEY> allowed-ips 192.168.10.0/24,192.168.60.0/24
ip route add 192.168.60.0/24 dev wg0
Antroji komanda nėra pasirenkama, kai naudojote wg set vietoj wg-quick. Branduolys naują sąrašą priima iš karto, bet niekas neprideda jam maršruto, todėl vietoje sukurtas srautas vis dar išeina per numatytąjį šliuzą. Tai dažniausia priežastis, kodėl naujas WireGuard potinklis veikia iš tunelio pagrindinio kompiuterio, o ne iš nešiojamojo.
Grįžimo kelias sugenda dažniau nei tunelis
Naujo nutolusio potinklio mazgai turi siųsti atsakymus atgal per VPN šliuzą. Kai tas šliuzas nėra jų numatytasis maršrutizatorius, atsakymas eina į LAN maršrutizatorių, kuris jį išmeta arba persiunčia į internetą su privačiu šaltinio adresu. Tikrinkite iš tolimosios pusės mazgo, o ne iš šliuzo: ip route get 10.30.20.15 Linux arba Find-NetRoute -RemoteIPAddress 10.30.20.15 PowerShell rodo kitą šuolį, kurį mazgas tikrai naudos. Jei atsakymas nėra tunelio galinis taškas, ten pridėkite statinį maršrutą naujam prefiksui.
Šaltinio NAT svetainėje, kuriai trūksta grįžimo maršruto, yra teisėta alternatyva ir būdas, kuriuo daug hub-and-spoke diegimų išvengia kiekvieno serverio lietimo. Taikykite jį ir naujam prefiksui paskirties pusės šliuze:
iptables -t nat -A POSTROUTING -s 10.30.20.0/24 -d 192.168.60.0/24 -j MASQUERADE
Kaina reali. Nutolę žurnalai nustoja rodyti atskirus šaltinio adresus, o ugniasienės taisyklės, susietos su pradiniu potinkliu, sutampa į vieną taisyklę šliuzui. Rinkitės tai sąmoningai, o ne todėl, kad trūko maršruto.
Ugniasienės yra kita grįžimo kelio pusė. Zonomis pagrįsti įrenginiai automatiškai neplėčia esamos tunelio sąsajos zonos naujam potinkliui, o taisyklė, parašyta senajam prefiksui, nesutaps. Pridėkite naują potinklį į zoną arba į taisyklių porą abiem kryptimis, prieš kaltindami IPsec.
Nuspręskite trimis klausimais, tada patikrinkite srautu
Trumpa versija: ar pusės konfigūracija įvardija prefiksus (politikos pagrindu), ar srautas maršrutizuojamas į sąsają (maršrutų pagrindu)? Ar abu galai išvardija naują prefiksą? Ar yra kelias atgal iš naujo potinklio į pradinį šaltinio diapazoną?
| Tunnel style | Where the prefix goes | What breaks if you skip it |
|---|---|---|
| Policy-based IPsec | Selector pair on both peers | Old subnets work, the new one fails with no clear error |
| Route-based XFRM or VTI | Route into the device on both sites | Packets routed but not transformed, or the state never matches |
| WireGuard | AllowedIPs on both peers plus a route | Handshake succeeds, replies are dropped |
| Overlapping supernet | Adjust the existing entry instead | A shadowed policy wins or loses by evaluation order |
Patikra yra vieta, kur dauguma pakeitimų uždaromi per anksti. Ping iš šliuzo mažai įrodo, nes šliuzas siunčia iš savęs ir dažnai atitinka kitą politiką nei mazgas. Pinginkite iš naujo potinklio mazgo, tada paleiskite programą, dėl kurios buvo pakeitimas, ir stebėkite skaitiklius, o ne būsenos piktogramą.
tcpdump -ni any host 192.168.60.10 and (esp or udp port 4500)
ip xfrm state
wg show
Politikos pagrindu veikiančiame tunelyje ip xfrm state skaitikliai turi augti abiem kryptimis; plokšti skaitikliai reiškia, kad paketas maršrutizuotas, bet nepasirinktas. WireGuard wg show rodo perdavimą kiekvienai pusei, o rankos paspaudimas su nuliu gautų baitų nurodo tolimosios pusės sąrašą arba jos grįžimo maršrutą.
Užbaikite užregistruodami prefiksą, pusės selektorių ar maršrutą, sprendimą dėl grįžimo kelio ir ugniasienės įrašą kartu su likusiu tunelio inventoriumi. Tada paleiskite iš naujo vieną šliuzą ir bandykite dar kartą: ranka pridėtas maršrutas dingsta, o kitam žmogui neturėtų tekti to vėl atrasti.