Адрес от диапазона IPv6 се появява в тестова страница, тунелът очевидно не го пренася, а най-популярният съвет в интернет е да изключите IPv6 навсякъде. Тази команда наистина прави панела тих. Тя също премахва протокол, от който мрежата за достъп може да зависи, и ви оставя без представа дали адресът е бил истински теч, адрес на интерфейс link-local или резолвер, който си върши работата. Три условия определят правилния контрол и само едно от тях води до блокиране.

Определете какво всъщност е измерил инструментът

Най-честата фалшива тревога е адрес 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

Директивата принадлежи в профила; правилото — в защитна стена, която можете да прегледате и премахнете. И двете отказват затворено, което е желаното, и двете се виждат в разлика на конфигурацията, каквото не може да се каже за 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 може да се загуби при повторно установяване, ако сървърът го изпраща само в началната конфигурация. После проверете една изключена дестинация, защото правилата на разделения тунел са мястото, където двете семейства най-често се разминават.

Ако мрежата за достъп е само IPv6, оставете я на мира

Някои мрежи предоставят само IPv6 и очакват устройството да достига услуги IPv4 през механизъм за транслация от страна на оператора. Изключването на IPv6 на такава машина не е подобрение на сигурността; то премахва единствения маршрут до каквото и да е. Това е прекъсване, което сам си причинявате в името на резултат от тест, който никой не е поискал.

Симптомът на тази грешка е отличителен и неприятен: тунелът сякаш се установява, разрешаването на имена работи, а нищо не се зарежда. Ако видите това след промяна на IPv6, върнете настройката веднага и продължете диагностиката другаде.

Каквото и да изберете, дръжте решението явно в профила или защитната стена, свържете го с това, което изходът наистина поддържа, и отбележете поведението при двоен стек, което описва обсъждането на двоен стек в RFC 7359 . Обявеното блокиране е политика. Изключеният протокол е заобиколно решение, което никой не може да одитира, и от тестовата страница изглеждат еднакво.

Подобни статии