Išjungti IPv6, kad sutvarkytume VPN nuotėkį? Geriau nuspręskite politiką
Link-local adresas nėra nuotėkis, o globalus IPv6 maršrutas taip pat ne. Pirmiausia pasirinkite tarp blokavimo, pernešimo ir palikimo.
IPv6 diapazono adresas pasirodo bandymo puslapyje, tunelis akivaizdžiai jo neperneša, o populiariausias interneto patarimas – išjungti IPv6 visur. Ta komanda tikrai nutildo skydą. Tačiau ji taip pat pašalina protokolą, nuo kurio gali priklausyti prieigos tinklas, ir palieka jus be supratimo, ar adresas buvo tikras nuotėkis, link-local sąsajos adresas, ar sprendėjas, atliekantis savo darbą. Tinkamą kontrolę lemia trys sąlygos, ir tik viena iš jų veda prie blokavimo.
Nustatykite, ką įrankis iš tikrųjų išmatavo
Dažniausiai pasitaikantis klaidingas aliarmas yra link-local adresas, kuris prasideda fe80: ir egzistuoja kiekvienoje IPv6 palaikančioje sąsajoje, nesvarbu, ar įrenginys pasiekia internetą per IPv6. Jis rodomas sąsajų sąrašuose ir kai kuriose programų diagnostikose, ir nieko nesako apie jūsų srauto kelią.
Antrasis klaidingas aliarmas yra unikalus vietinis adresas fc00::/7 diapazone, tai privatus diapazonas, naudojamas tinklo viduje. Įrankis, spausdinantis kiekvieną prieglobos adresą, mielai jį išvardys šalia viešojo. Kas skaito greitai, vadina tai nuotėkiu, o paskui praleidžia valandą sprendžiant problemą, kurios nėra.
Trečiasis visai ne klaidingas aliarmas. Globalus adresas, pasiekiantis internetą už tunelio, yra tikrasis nuotėkis, ir verta jį išmatuoti prieš ką nors nusprendžiant:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
Jei pirmoji komanda atspausdina globalų adresą, o trečioji grąžina viešą IPv6 adresą, kuris nėra tunelio, turite tikrą kelią už tunelio. Jei pirmoji atspausdina tik link-local įrašus, nuotėkio, kurį reikėtų taisyti, niekada nebuvo.
Kontrolę lemia trys sąlygos
Sprendimas nėra „IPv6 geras“ ar „IPv6 blogas“. Sprendimas yra tai, kurioje iš trijų situacijų esate, ir kiekviena turi kitokį teisingą atsakymą su kitokia kaina, jei suklysite.
| 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 |
Pirmoji eilutė yra tai, ką žmonės paprastai turi omenyje, ir tai teisėta. Klientas, kurio išėjimas nepalaiko IPv6, neturėtų tyliai išleisti prieglobos savojo IPv6 srauto, nes tai yra dokumentuotas dvigubo kamino nuotėkis. Esmė – blokuoti jį kaip paskelbtą politiką, o ne išjungti protokolą branduolyje. Matomas rezultatas identiškas, ir tik vieną iš jų galima peržiūrėti vėliau.
Trečioji eilutė yra vieta, kur bendras patarimas tampa aktyviai žalingas. Mobilieji operatoriai ir kai kurie namų ryšiai valdo IPv6-only tinklus su vertimu IPv4 paskirties vietoms. Pašalinkite ten IPv6 ir pašalinsite vienintelį transportą, kurį tinklas siūlo, o tai sukels daug blogesnį sutrikimą nei tas, kurį šalinote.
Jei išėjimas neturi IPv6, blokuokite jį sąmoningai
Pirmenybę teikite paties kliento mechanizmui, nes jis galioja būtent tol, kol tunelis pakeltas, ir atsitraukia, kai jis krinta. OpenVPN turi tam parinktį, o iptables turi lygiavertę taisyklę kitiems klientams:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
Direktyva priklauso profiliui; taisyklė priklauso ugniasienei, kurią galite peržiūrėti ir pašalinti. Abi nepavyksta uždaros, ko ir norite, ir abi matomos konfigūracijos diffe, ko negalima pasakyti apie paleidimo scenarijuje palaidotą branduolio sysctl.
Užrašykite, kodėl ji ten yra. Blokavimo taisyklę be komentaro pašalins kitas žmogus, kuriam IPv6 prireiks kitam dalykui, ir tada nuotėkis tyliai grįš.
Jei išėjimas perneša IPv6, maršrutizuokite jį ir išbandykite abi šeimas
Pernešti IPv6 yra geresnis atsakymas, kai serveris tai palaiko, ir tai nėra daug sunkiau. Reikalavimas – tunelio sąsaja turi turėti tos šeimos adresą, o jos numatytasis maršrutas turi rodyti į tunelį, o ne už fizinės sąsajos:
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
Maršruto paieška yra lemiamas bandymas: jei ji įvardija tunelio sąsają, IPv6 srautas pernešamas. Tada du curl iškvietimai patvirtina, ką mato kiekviena šeima, ir jų palyginimas yra būdas įrodyti, kad abu keliai dabar išeina per tą patį išėjimą.
Nesustokite ties sėkmingu ryšiu. Iš naujo prijunkite tunelį ir patikrinkite dar kartą, nes stumiamas IPv6 maršrutas gali būti prarastas atkuriant, jei serveris jį siunčia tik pradinėje konfigūracijoje. Tada patikrinkite vieną išskirtą paskirties vietą, nes split-tunnel taisyklės yra ten, kur dvi šeimos dažniausiai nesutaria.
Jei prieigos tinklas yra tik IPv6, palikite jį ramybėje
Kai kurie tinklai teikia tik IPv6 ir tikisi, kad įrenginys pasieks IPv4 paslaugas per vertimo mechanizmą operatoriaus pusėje. Išjungti IPv6 tokiame įrenginyje nėra saugumo pagerinimas; tai pašalina vienintelį kelią į bet ką. Tai savarankiškai sukeltas sutrikimas dėl bandymo rezultato, kurio niekam nereikėjo.
Šios klaidos simptomas yra išskirtinis ir nemalonus: atrodo, kad tunelis susidaro, vardų skyrimas veikia, ir niekas nesikrauna. Jei tai matote po IPv6 pakeitimo, nedelsdami atkurkite nustatymą ir tęskite diagnostiką kitur.
Kad ir ką pasirinktumėte, laikykite sprendimą aiškiai profilyje arba ugniasienėje, susiekite jį su tuo, ką išėjimas iš tikrųjų palaiko, ir užsirašykite dvigubo kamino elgseną, kurią aprašo RFC 7359 dvigubo kamino diskusija . Paskelbtas blokavimas yra politika. Išjungtas protokolas yra apėjimas, kurio niekas negali audituoti, ir iš bandymo puslapio jie atrodo vienodai.