Адреса од опсегот 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 . Објавеното блокирање е политика. Исклучен протокол е заобиколување што никој не може да го ревидира, и од тест страницата изгледаат исто.

Поврзани статии