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 seeDecision
Exit answers IPv6 probes, no local IPv6 devices to protectRoute ::/0 into the tunnel
Exit answers IPv6 probes, printer or NAS reachable by a global addressRoute ::/0, then give those prefixes a route of their own
Exit is IPv4-only inside the tunnelDo not route ::/0; block IPv6 on the client
Endpoint is reached over IPv6 and sits inside ::/0Install 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.

Kapcsolódó cikkek