Авариски прекинувач блокира само IPv4: зошто IPv6 сè уште излегува
Множество правила на огнен ѕид за IPv4 не кажува ништо за IPv6. На уред со двоен стек тунелот може да падне додека апликацијата одржува работна патека околу него.
Тунелот паѓа, аварискиот прекинувач известува дека се активирал, а преземањето продолжува. Ништо не е расипано во правилата за IPv4. Апликацијата едноставно се премести на патека за која тие правила никогаш не биле напишани.
Уредите со двоен стек имаат два независни излеза. Блокирање на еден од нив е половина блокирање.
Две множества правила, две стандардни вредности
На Linux, iptables и ip6tables се одделни табели со одделни политики. Поставување на синџирите INPUT и OUTPUT на табелата IPv4 на DROP не менува ништо во табелата IPv6, каде стандардната вредност обично е ACCEPT. Истото разделување постои во nftables, каде можете да прегледате едно семејство и да откриете дека само едно од нив ги носи вашите правила. Таа асиметрија е нормална, и тоа е целиот проблем.
Затоа аварискиот прекинувач може да изгледа темелно, а да дејствува делумно. Скриптата што ги напиша правилата за IPv4 се изврши, бројачите растат, линијата во дневникот се појавува, а пакет IPv6 излегува низ физичкиот интерфејс целосно недопрен.
Читајте што вашиот клиент навистина инсталира, а не што ветува маркетинг страницата. Некои клиенти насочуваат IPv6 во тунелот, некои намерно го блокираат, а некои го оставаат на мир додека заклучување на ниво на платформа применува друго правило. Документацијата на производителот е единствениот извор што вреди да му се верува овде.
Што ви кажува конфигурацијата на интерфејсот
Страницата на прирачникот на wg-quick во својата примерна конфигурација вклучува правила за IPv6, а причината е токму оваа празнина. Примерот не е украс. Тој постои затоа што само правилата за IPv4 би го оставиле второто семејство отворено.
Копирање на половина пример дава половина политика. Тоа е најчестото потекло на ова истекување. Објава на блог го скрати примерот поради должина. Потоа скратената верзија стана шаблонот што сите го користеа повторно.
# what is actually installed, per family?
sudo iptables -S OUTPUT | head -20
sudo ip6tables -S OUTPUT | head -20
# nftables: inspect each family separately
sudo nft list ruleset inet | head -40
# does this host even have a usable IPv6 path?
ip -6 route show default
Ако втората команда испечати дозволувачка политика, а првата испечати DROP, го најдовте одговорот без да го допрете клиентот. Таа асиметрија е грешката.
Зошто едно пребарување не е целата приказна
Едно име може да врати и запис A и запис AAAA, а апликациите не избираат сите на ист начин. Прелистувачот може да преферира IPv6 кога мрежата го нуди и да се врати при неуспех, додека позадинска синхронизација или ажурирање користи свој решавач и своја преференца. Затоа еден успешен тест преку IPv4 докажува една патека, а не политиката.
Мрежните премини исто така го менуваат одговорот. Приклучување на друга Wi-Fi мрежа, будење од сон или префрлање на мобилна мрежа може да му даде на уредот нов префикс IPv6, а политиката што изгледаше доволна на канцеларискиот LAN може да не го покрива.
Тестирајте ја состојбата кога тунелот е исклучен
Тестирањето додека сте поврзани ви кажува дека тунелот работи. Интересниот тест е недостапната состојба, зашто тогаш аварискиот прекинувач треба да издржи. Намерно запрете го тунелот, потоа испробајте ги важните одредишта од апликацијата што ја штитите.
# with the tunnel stopped, does anything still leave?
ip -6 route get 2606:4700:4700::1111
curl -6 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv6.example.net/
curl -4 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv4.example.net/
Двете семејства треба да паднат затворено. Ако барањето IPv4 истече, а барањето IPv6 врати статусен код, политиката е нецелосна, и никакво повторно тестирање на тунелот тоа нема да го промени.
Задржете ги документираните исклучоци и во тој тест. Откривањето на локалната мрежа, обновувањето на DHCP или патеката за подигање до крајната точка на VPN може да треба да останат достапни, и тие исклучоци треба да бидат именувани во политиката, наместо откриени за време на прекин. Тест за истекување што не успева затоа што тунелот не може да се врати не е безбедносен наод, туку наод за поврзаност.