Izklopiti IPv6, da popravimo uhajanje VPN? Raje določite politiko
Naslov link-local ni uhajanje in globalna pot IPv6 tudi ne. Najprej izberite med blokiranjem, prenosom in pustitvijo pri miru.
Naslov iz obsega IPv6 se pojavi na testni strani, tunel ga očitno ne prenaša, in najbolj priljubljen nasvet na internetu je izklopiti IPv6 povsod. Ta ukaz res utiša ploščo. Odstrani pa tudi protokol, od katerega je lahko odvisno dostopovno omrežje, in vas pusti brez pojma, ali je bil naslov resnično uhajanje, naslov vmesnika link-local ali razreševalnik, ki opravlja svoje delo. O pravilnem nadzoru odločajo trije pogoji in le eden od njih vodi v blokiranje.
Ugotovite, kaj je orodje dejansko izmerilo
Najpogostejši lažni alarm je naslov link-local, ki se začne z fe80: in obstaja na vsakem vmesniku, ki podpira IPv6, ne glede na to, ali naprava doseže internet prek IPv6. Pojavi se na seznamih vmesnikov in v nekaterih diagnozah aplikacij ter ne pove ničesar o poti vašega prometa.
Drugi lažni alarm je edinstven lokalni naslov v fc00::/7, kar je zasebni obseg, ki se uporablja znotraj omrežja. Orodje, ki izpiše vsak naslov gostitelja, ga bo z veseljem navedlo poleg javnega. Kdor bere hitro, to imenuje uhajanje in nato preživi uro pri problemu, ki ne obstaja.
Tretji sploh ni lažni alarm. Globalni naslov, ki doseže internet zunaj tunela, je resnično uhajanje in vredno ga je izmeriti, preden karkoli odločite:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
Če prvi ukaz izpiše globalni naslov in tretji vrne javni naslov IPv6, ki ni naslov tunela, imate resnično pot zunaj tunela. Če prvi ne izpiše ničesar razen vnosov link-local, uhajanja za popravilo nikoli ni bilo.
O nadzoru odločajo trije pogoji
Odločitev ni "IPv6 dober" ali "IPv6 slab". Odločitev je, v kateri od treh situacij ste, in vsaka ima drugačen pravilen odgovor z drugačno ceno, če se zmotite.
| Situation | Correct control | Cost if you disable IPv6 instead |
|---|---|---|
| Exit has no IPv6, host does | Block IPv6 deliberately in the tunnel policy | Same visible result, no documentation of intent |
| Exit carries IPv6, host leaks | Route IPv6 into the tunnel and verify | You lose IPv6 reachability entirely |
| Access network is IPv6-only | Change nothing; use the tunnel's IPv6 | Machine loses connectivity completely |
Prva vrstica je tisto, kar ljudje običajno mislijo, in je legitimna. Odjemalec, katerega izhod ne podpira IPv6, ne sme tiho spustiti lastnega prometa IPv6 gostitelja ven, ker je to dokumentirano uhajanje pri dvojnem skladu. Bistvo je, da ga blokirate kot razglašeno politiko, ne da izklopite protokol v jedru. Viden izid je enak in le enega od obeh je mogoče pozneje pregledati.
Tretja vrstica je mesto, kjer splošni nasvet postane aktivno škodljiv. Mobilni operaterji in nekatere domače povezave upravljajo omrežja IPv6-only s prevajanjem za cilje IPv4. Odstranite tam IPv6 in odstranili boste edini prenos, ki ga omrežje ponuja, kar povzroči veliko hujšo prekinitev od tiste, ki ste jo odpravljali.
Če izhod nima IPv6, ga blokirajte namerno
Dajte prednost mehanizmu samega odjemalca, ker velja natanko toliko, dokler je tunel pokonci, in se umakne, ko pade. OpenVPN ima za to možnost, iptables pa ima enakovredno pravilo za druge odjemalce:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
Direktiva spada v profil; pravilo spada v požarni zid, ki ga lahko pregledate in odstranite. Oba odpovesta zaprto, kar želite, in oba sta vidna v diffu konfiguracije, kar sysctl jedra, zakopan v zagonski skript, ni.
Zapišite, zakaj je tam. Pravilo blokiranja brez komentarja bo odstranil naslednji, ki IPv6 potrebuje za kaj drugega, in takrat se uhajanje tiho vrne.
Če izhod prenaša IPv6, ga usmerite in preizkusite obe družini
Prenos IPv6 je boljši odgovor, ko ga strežnik podpira, in ni veliko težje. Zahteva je, da ima vmesnik tunela naslov v tej družini in da njegova privzeta pot kaže v tunel, ne iz fizičnega vmesnika:
ip -6 route get 2606:4700:4700::1111
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
curl -4 -sS --max-time 6 https://ifconfig.co
Iskanje poti je odločilni test: če poimenuje vmesnik tunela, se promet IPv6 prenaša. Dva klica curl nato potrdita, kaj vidi vsaka družina, in njuna primerjava je način, kako dokazati, da obe poti zdaj izhajata skozi isti izhod.
Ne ustavite se pri uspešni povezavi. Znova povežite tunel in preverite še enkrat, ker se potisnjena pot IPv6 lahko izgubi pri ponovni vzpostavitvi, če jo strežnik pošilja le v začetni konfiguraciji. Nato preverite en izključen cilj, ker so pravila razdeljenega tunela tisto mesto, kjer se družini najpogosteje razhajata.
Če je dostopovno omrežje samo IPv6, ga pustite pri miru
Nekatera omrežja ponujajo samo IPv6 in pričakujejo, da naprava doseže storitve IPv4 prek prevajalnega mehanizma na strani operaterja. Izklop IPv6 na takem stroju ni varnostna izboljšava; odstrani edino pot do česar koli. To je prekinitev, ki si jo povzročite sami zaradi rezultata testa, ki ga nihče ni potreboval.
Simptom te napake je izrazit in neprijeten: tunel se zdi, da se vzpostavi, razreševanje imen deluje, in nič se ne naloži. Če to vidite po spremembi IPv6, takoj obnovite nastavitev in nadaljujte z diagnostiko drugje.
Karkoli izberete, držite odločitev izrecno v profilu ali požarnem zidu, povežite jo s tem, kar izhod dejansko podpira, in zabeležite vedenje dvojnega sklada, ki ga opisuje razprava o dvojnem skladu v RFC 7359 . Razglašena blokada je politika. Izklopljen protokol je obhod, ki ga nihče ne more pregledati, in s testne strani sta videti enako.