Isključiti IPv6 da popravimo curenje VPN-a? Radije odredite politiku
Link-local adresa nije curenje, a ni globalna IPv6 ruta nije. Prvo izaberite između blokiranja, prenošenja i ostavljanja.
Adresa iz IPv6 opsega pojavljuje se na testnoj stranici, tunel je očito ne prenosi, a najpopularniji savjet na internetu je isključiti IPv6 svuda. Ta naredba zaista ušuti panel. Ona i uklanja protokol o kojem pristupna mreža može ovisiti, i ostavlja vas bez pojma je li adresa bila stvarno curenje, link-local adresa interfejsa ili resolver koji radi svoj posao. Tri uslova odlučuju o ispravnoj kontroli, a samo jedan od njih vodi ka blokiranju.
Utvrdite šta je alat zapravo izmjerio
Najčešća lažna uzbuna je link-local adresa, koja počinje s fe80: i postoji na svakom IPv6-sposobnom interfejsu, bez obzira može li mašina doći na internet preko IPv6. Pojavljuje se u listama interfejsa i u nekim dijagnostikama aplikacija i ne govori ništa o vašoj putanji saobraćaja.
Druga lažna uzbuna je jedinstvena lokalna adresa u fc00::/7, a to je privatni opseg koji se koristi unutar mreže. Alat koji ispisuje svaku adresu koju host ima rado će je prikazati pored javne. Ko brzo čita, nazove to curenjem i onda potroši sat na problem koji ne postoji.
Treća uopće nije lažna uzbuna. Globalna adresa koja dolazi na internet izvan tunela pravo je curenje i vrijedi je izmjeriti prije nego što išta odlučite:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
Ako prva naredba ispiše globalnu adresu, a treća vrati javnu IPv6 adresu koja nije tunelova, imate stvarnu putanju izvan tunela. Ako prva ne ispiše ništa osim link-local unosa, curenja koje treba popraviti nikada nije bilo.
Tri uslova odlučuju o kontroli
Odluka nije "IPv6 je dobar" ili "IPv6 je loš". Odluka je u kojoj ste od tri situacije, a svaka ima drugačiji ispravan odgovor i drugačiju cijenu ako pogriješite.
| 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 |
Prvi red je ono što ljudi obično misle i to je legitimno. Klijent čiji izlaz ne podržava IPv6 ne smije tiho puštati hostov vlastiti IPv6 saobraćaj, jer je to dokumentirano curenje kod dvojnog steka. Poenta je blokirati ga kao objavljenu politiku, a ne isključiti protokol u kernelu. Vidljiv ishod je identičan i samo se jedan od njih može kasnije pregledati.
Treći red je mjesto gdje opći savjet postaje aktivno štetan. Mobilni operateri i neke kućne veze drže IPv6-only mreže s prevođenjem za odredišta IPv4. Uklonite IPv6 tamo i uklanjate jedini transport koji mreža nudi, što daje mnogo gori prekid od onoga koji ste otklanjali.
Ako izlaz nema IPv6, blokirajte ga namjerno
Preferirajte vlastiti mehanizam klijenta, jer djeluje tačno dok je tunel podignut i vraća se kad padne. OpenVPN ima opciju za to, a iptables ima ekvivalentno pravilo za druge klijente:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
Direktiva pripada profilu; pravilo pripada firewallu koji možete pregledati i ukloniti. Oba odbijaju zatvoreno, što je ono što želite, i oba su vidljiva u diffu konfiguracije, što kernel sysctl zakopan u startup skriptu nije.
Zapišite zašto je tamo. Pravilo blokiranja bez komentara uklonit će sljedeća osoba kojoj IPv6 zatreba za nešto nepovezano, a onda se curenje tiho vraća.
Ako izlaz prenosi IPv6, rutirajte ga i testirajte obje familije
Prenošenje IPv6 je bolji odgovor kad server to podržava i nije mnogo teže. Zahtjev je da interfejs tunela ima adresu u toj familiji i da njegova zadana ruta vodi u tunel, a ne iz fizičkog interfejsa:
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
Pretraga rute je odlučujući test: ako imenuje interfejs tunela, IPv6 saobraćaj se prenosi. Dva curl poziva zatim potvrđuju šta svaka familija vidi, a njihovo poređenje je način da dokažete da oba puta sada izlaze kroz isti izlaz.
Ne zaustavljajte se na uspješnoj vezi. Ponovo povežite tunel i provjerite opet, jer se gurnuta IPv6 ruta može izgubiti pri ponovnom uspostavljanju ako je server šalje samo u početnoj konfiguraciji. Zatim provjerite jedno izuzeto odredište, jer su pravila split-tunela mjesto gdje se dvije familije najčešće razilaze.
Ako je pristupna mreža samo IPv6, ostavite je na miru
Neke mreže daju samo IPv6 i očekuju da uređaj dođe do usluga IPv4 preko mehanizma prevođenja na strani operatera. Isključivanje IPv6 na takvoj mašini nije sigurnosno poboljšanje; ono uklanja jedinu rutu do bilo čega. To je prekid koji sami sebi priređujete zbog rezultata testa koji nikome nije trebao.
Simptom ove greške je prepoznatljiv i neprijatan: tunel kao da se uspostavlja, razrješavanje imena radi, a ništa se ne učitava. Ako to vidite nakon promjene IPv6, odmah vratite postavku i nastavite dijagnostiku drugdje.
Šta god odabrali, držite odluku eksplicitnom u profilu ili firewallu, vežite je za ono što izlaz stvarno podržava i zabilježite ponašanje dvojnog steka koje opisuje RFC 7359 rasprava o dvojnom steku . Objavljeno blokiranje je politika. Isključen protokol je zaobilazno rješenje koje niko ne može revidirati, a sa testne stranice izgledaju identično.