Адреса из IPv6 опсега појављује се на тест страници, тунел је очигледно не преноси, а најпопуларнији савет на интернету је искључити IPv6 свуда. Та команда заиста утишава панел. Али она такође уклања протокол од којег приступна мрежа може да зависи, и оставља вас без идеје да ли је адреса била стварно цурење, link-local адреса интерфејса или resolver који ради свој посао. Три услова одређују исправну контролу, и само један од њих води ка блокирању.

Утврдите шта је алатка заправо измерила

Најчешћа лажна узбуна је link-local адреса, која почиње са fe80: и постоји на сваком интерфејсу способном за IPv6, без обзира на то да ли машина стиже на интернет преко IPv6. Појављује се у листама интерфејса и у неким дијагностикама апликација, и не говори ништа о путу вашег саобраћаја.

Друга лажна узбуна је јединствена локална адреса у fc00::/7, што је приватни опсег који се користи унутар мреже. Алатка која штампа сваку адресу домаћина радо ће је навести поред јавне. Ко брзо чита, назива то цурењем и затим проведе сат на проблему који не постоји.

Трећа уопште није лажна узбуна. Глобална адреса која стиже на интернет изван тунела је право цурење, и вреди је измерити пре него што било шта одлучите:

ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co

Ако прва команда испише глобалну адресу, а трећа врати јавну IPv6 адресу која није тунелова, имате стварну путању изван тунела. Ако прва не испише ништа осим link-local записа, цурења које треба поправити никада није било.

Контролу одређују три услова

Одлука није „IPv6 је добар“ или „IPv6 је лош“. Одлука је у којој од три ситуације се налазите, и свака има другачији исправан одговор са другачијом ценом ако погрешите.

SituationCorrect controlCost if you disable IPv6 instead
Exit has no IPv6, host doesBlock IPv6 deliberately in the tunnel policySame visible result, no documentation of intent
Exit carries IPv6, host leaksRoute IPv6 into the tunnel and verifyYou lose IPv6 reachability entirely
Access network is IPv6-onlyChange nothing; use the tunnel's IPv6Machine loses connectivity completely

Први ред је оно што људи обично мисле, и то је легитимно. Клијент чији излаз не подржава IPv6 не треба тихо да пусти сопствени IPv6 саобраћај домаћина напоље, јер је то документовано цурење при дуплом стеку. Поента је да се оно блокира као објављена политика, а не да се протокол искључи у језгру. Видљив резултат је идентичан и само један од њих може да се прегледа касније.

Трећи ред је место где општи савет постаје активно штетан. Мобилни оператери и неке кућне везе држе IPv6-only мреже са преводом за одредишта IPv4. Уклоните IPv6 тамо и уклонићете једини транспорт који мрежа нуди, што ствара много гори прекид од оног који сте отклањали.

Ако излаз нема IPv6, блокирајте га намерно

Претпоставите сопствени механизам клијента, јер важи тачно докле год је тунел подигнут и повлачи се када падне. OpenVPN има опцију за то, а iptables има еквивалентно правило за друге клијенте:

block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable

Директива припада профилу; правило припада firewall-у који можете да прегледате и уклоните. Оба пропадају затворена, што је оно што желите, и оба су видљива у diff-у конфигурације, што sysctl језгра закопан у стартној скрипти није.

Запишите зашто је тамо. Правило блокирања без коментара уклониће следећа особа којој IPv6 затреба за нешто неповезано, и тада се цурење тихо враћа.

Ако излаз преноси IPv6, рутирајте га и тестирајте обе фамилије

Преношење IPv6 је бољи одговор када сервер то подржава, и није много теже. Захтев је да интерфејс тунела има адресу у тој фамилији и да његова подразумевана рута води у тунел, а не из физичког интерфејса:

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

Претрага руте је одлучујући тест: ако именује интерфејс тунела, IPv6 саобраћај се преноси. Два curl позива затим потврђују шта свака фамилија види, и њихово поређење је начин да се докаже да обе путање сада излазе кроз исти излаз.

Не заустављајте се на успешној вези. Поново повежите тунел и проверите још једном, јер се гурнута IPv6 рута може изгубити при поновном успостављању ако је сервер шаље само у почетној конфигурацији. Затим проверите једно изузето одредиште, јер су правила split-tunnel места где се две фамилије најчешће разилазе.

Ако је приступна мрежа само IPv6, оставите је на миру

Неке мреже дају само IPv6 и очекују да уређај стигне до услуга IPv4 преко механизма превода на страни оператера. Искључивање IPv6 на таквој машини није безбедносно побољшање; оно уклања једину руту до било чега. То је прекид који сами себи приређујете због резултата теста који никоме није требао.

Симптом ове грешке је препознатљив и непријатан: тунел изгледа да се успоставља, резолуција имена ради, а ништа се не учитава. Ако то видите после промене IPv6, одмах вратите подешавање и наставите дијагностику другде.

Шта год да изаберете, држите одлуку експлицитном у профилу или firewall-у, повежите је са оним што излаз заиста подржава, и забележите понашање дуплог стека које описује дискусија о дуплом стеку у RFC 7359 . Објављено блокирање је политика. Искључен протокол је заобилажење које нико не може да ревидира, и са тест странице изгледају исто.

Повезани чланци