Átmenjen az IPv6-forgalom a VPN-en vagy közvetlenül?
Döntse el, az ::/0 az alagútba tartozik-e, három feltétellel: a kijárat támogatása, a végpont elérhetősége és a csak helyi hálózatok.
Két ember kért tőlem múlt hónapban ellentétes eredményeket: az egyik azt akarta, hogy a VPN fedje le az IPv6-ot, a másik azt, hogy az irodai nyomtató tovább működjön. Egyetlen útvonal ::/0 nem tudja mindkettőt egyedül teljesíteni. Az, hogy ez az útvonal az alagútba tartozik-e, három feltételtől függ, és az első kizárja a legtöbb kereskedelmi kijárat esetében. Ha a kijárat nem hordoz IPv6-ot, az alapértelmezett útvonal odairányítása elrejti a forgalmát egy olyan alagútban, amelynek nincs hova küldenie.
Három feltétel dönti el a választ
Az alapértelmezett útvonal egy sor, ::/0, és minden olyan IPv6-célhoz illeszkedik, amelynek nincs pontosabb útvonala (RFC 4291). Telepíteni könnyű. Annak eldöntése, hogy meg kell-e tennie, három feltételre vezethető vissza.
Első feltétel: a kijárat, amelyhez csatlakozik, működő IPv6-tal rendelkezik, és hajlandó továbbítani. Második feltétel: az ügyfele meg tudja tartani az útvonalat az alagút végpontjához, amely általában abban a tartományban van, amelyet át fog irányítani. Harmadik feltétel: meg tudja nevezni azokat a helyi IPv6-célokat, amelyeknek az alagúton kívül kell maradniuk.
Minden feltétel a maga módján hiúsul meg, ezért a találgatás egy egész estébe kerül. A meghiúsult első feltétel csendet és helyesnek tűnő útvonaltáblát ad. A meghiúsult második feltétel néhány másodperccel az indulás után megöli a kézfogást. A meghiúsult harmadik feltétel működő alagutat és egy elégedetlen kollégát hagy a nyomtatónál.
| What you see | Decision |
|---|---|
| Exit answers IPv6 probes, no local IPv6 devices to protect | Route ::/0 into the tunnel |
| Exit answers IPv6 probes, printer or NAS reachable by a global address | Route ::/0, then give those prefixes a route of their own |
| Exit is IPv4-only inside the tunnel | Do not route ::/0; block IPv6 on the client |
Endpoint is reached over IPv6 and sits inside ::/0 | Install a host route for the endpoint first |
Valóban hordoz IPv6-ot a kijárat?
Az IPv6-címmel rendelkező alagút-interfész semmit sem bizonyít a túloldalról. Sok kereskedelmi profil belül csak IPv4: a szerver v4-címet ad, és minden mást eldob. Telepítsen fölé egy alapértelmezett útvonalat a AllowedIPs-ból, és a kernel szívesen küld IPv6-ot olyan interfészbe, amelynek partnere soha nem látja.
Teszteljen az ügyfélből, amíg az alagút fent van. ping -6 -c 3 2001:4860:4860::8888 és ip -6 route get 2001:4860:4860::8888 különböző kérdésekre válaszol: jön-e vissza válasz, és melyik eszközt választotta a kernel. Amikor a második az alagútját nevezi meg, az első pedig semmit nem ad vissza, a probléma a kijáratban van, nem az útvonalban.
Ha saját maga üzemelteti a kijáratot, az ügyfélteszt átmehet, és az útvonal mégis zsákutcába futhat. Erősítse meg, hogy a net.ipv6.conf.all.forwarding=1 be van állítva az átjárón, és hogy a tűzfala elfogadja az alagútból továbbított csomagokat. A helyesen irányított csomag egy továbbítást megtagadó kijáratba az ügyfél oldaláról pontosan úgy néz ki, mint egy útvonalhiba.
Meg tudja tartani az ügyfél az útvonalát a végponthoz?
Ez az az eset, amely egy csak IPv6-os WireGuard-végponttal rendelkező laptopon elkapott. A végpont címe közönséges globális cím, így a ::/0 belsejébe esik. Irányítsa a teljes előtagot az interfészbe, és a kézfogási csomagok önmagukat kergetik bele az alagútba, amelyet még megpróbálnak felépíteni. Az alagút soha nem jön fel, és az ügyfél kimenetében semmi nem mondja meg, miért.
wg-quick kezeli ezt Linuxon. Útvonalakat vezet le a AllowedIPs-ból, telepíti őket a saját táblájába, és hozzáad egy házirendszabályt, hogy a végpont felé irányuló forgalom először a fő táblán keresztül oldódjon fel: a suppress_prefixlength 0 szabályt, amelyet a ip -6 rule-ban talál. Ezért sikerül a wg-quick up ott, ahol a kézzel írt ip -6 route add default dev wg0 elvágja Önt.
Ellenőrizze mindkét állapotot a ip -6 route get <endpoint-v6>-gyel, az alagút felemelése előtt és után. Ha a válasz az alagúteszközére vált, eltávolította az útvonalat, amelyre az alagútnak szüksége van. Amikor saját maga írja az útvonalakat, adjon hozzá egy hosztútvonalat a végponthoz az eredeti átjárón keresztül, vagy csatlakozzon a végponthoz IPv4-en, és hagyja az IPv6-ot a hasznos terhelésre.
Mi maradjon az alagúton kívül?
A pontosabb útvonalak legyőzik az alapértelmezettet, így a kapcsolaton lévő előtag vagy saját útvonallal rendelkező ULA-tartomány extra erőfeszítés nélkül tovább működik. Ez a csendes oka annak, hogy olyan sok teljes alagutas IPv4-beállítás túlél: a LAN-előtagok pontosabbak az alapértelmezettnél, és soha nem kerülnek be az alagútba.
Akkor törik meg, ha egy helyi eszköz globális címen érhető el, ami normális egy nyomtatónak, amelynek ugyanaz a router adott nyilvános előtagot, egy NAS-nak vagy egy televíziónak. Ezek a címek a ::/0-ra illeszkednek, és semmi másra, így minden mással együtt az alagútba kerülnek, és eltűnnek.
Cél szerint döntsön, ne protokoll szerint. Ha két vagy három helyi hoszt számít, adjon nekik útvonalat a fizikai interfészen kifelé, vagy vegye ki őket az egyeztetett készletből. Ha a lista tovább nő, a tisztességes válasz az IPv6 split tunneling írásos kivétellistával, nem egy alapértelmezett útvonal, amelyet folyton foltoz.
Ha a válasz nem, blokkolja
Az IPv6 útvonal nélkül hagyása nem ugyanaz, mint békén hagyni. Egy működő IPv6-alapértelmezéssel rendelkező hoszt tovább használja, miközben az alagút IPv4-et szállít, így a forgalom a VPN mellett hagyja el, és minden IPv6-ot előnyben részesítő szolgáltatás látja a valódi címét. Ez szivárgás, nem split tunnel.
Válasszon egyet, és írja le, melyiket választotta. Irányítsa az alapértelmezettet, és fogadja el a fenti kompromisszumokat, vagy kapcsolja ki az IPv6-ot az alagút időtartamára. Az előtag elhagyása a AllowedIPs-ból önmagában nem elég, mert az operációs rendszer megtartja a saját alapértelmezését. Linuxon a nyers változat a sysctl -w net.ipv6.conf.all.disable_ipv6=1; a finomabb változat tűzfalszabállyal dobja ki az IPv6-ot az alagúton kívülre. A telefonos ügyfelek kifejezett IPv6-blokkoló kapcsolóval rendelkeznek, amely ugyanezt teszi.
Ellenőrizze szivárgásként
Emelje fel az alagutat, és olvassa ki az állapotot a kapcsolóban való bizakodás helyett. A ip -6 route show default-nak egy alapértelmezettet kell mutatnia, a ip -6 route get-nak pedig a LAN-ján kívüli cél esetén meg kell neveznie az alagúteszközt. Ismételje meg mindkettőt a kapcsolat bontása után: az alagutat túlélő alapértelmezett az a hiba, amelyet keresett.
Utána tesztelje a másik irányt. A helyi hálózat egy hosztjáról érje el az ügyfelet annak helyi IPv6-címén. Ha ez abbamarad, a harmadik feltétel soha nem teljesült, bármit is állított akkor az útvonaltábla.
Írja le az eredményt ott, ahol a következő ember megtalálja: mely előtagok maradnak helyiek, miért, és mit tesz az ügyfél a kapcsolat bontása után. Két sor egy runbookban megkíméli a következő mérnököt attól, hogy éjfélkor újra felfedezze a végpont hurkát.