Проблема и цель
Мы не получаем IPv6 от нашего интернет-провайдера, поэтому у меня есть туннель IPv6, который работает нормально, но, конечно, не очень быстро. И не совсем надежный. Мне нравится, чтобы IPv6 был доступен «на всякий случай», но я хочу, чтобы определенные хосты (домены) были связаны только с IPv4.
Протокол по умолчанию
Мне кажется, что все приложения сначала пробуют IPv6; вероятно, это настройка glibc. Было бы хорошо, если бы это значение по умолчанию было отменено (для всех приложений).
Netfilter
Было бы возможно заблокировать IPv6-адреса / сети с помощью Netfilter, но есть две проблемы:
Замечу лишь, что справочная страница для ip route
говорит о типе маршрутизации unreachable
:
Локальные отправители получают ошибку EHOSTUNREACH.
То же самое происходит с Netfilter DROPs или REJECTs? Такая ошибка не должна вызывать соответствующей задержки.
DNS фильтрация
Другое решение (довольно простое, если это возможно) - фильтровать записи AAAA для определенных доменов. Если это не (легко) возможно: можно ли подключить DNS-сервер и Netfilter, чтобы я знал, что «IP-адрес X принадлежит домену Y», чтобы я мог добавить его в Netfilter? Что-нибудь более элегантное, чем регистрация всего и сборка журнала?
Как идти?
Какие (другие) возможности существуют и какой самый простой?
Вы можете контролировать выбор адреса с помощью /etc/gai.conf
. Файл конфигурации хорошо документирован и уже содержит значения по умолчанию, так что вы можете просто начать настройку.
Вот интересные значения по умолчанию:
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 10
Последняя строка дает наименьшее предпочтение всем адресам IPv4.
Если вы хотите дать более высокий приоритет всему IPv4, вы можете изменить его на:
precedence ::ffff:0:0/96 100
Если вы хотите отдать большее предпочтение только конкретным адресам или блокам IPv4, вы также можете указать их. Помните, что вам нужно использовать IPv6-сопоставленный IPv6 в шестнадцатеричном формате.
Итак, чтобы отдать предпочтение 203.0.113.0/24 над всем IPv6, вы должны добавить:
label ::ffff:cb00:7100/120 5
precedence ::ffff:cb00:7100/120 100
Перезапустите запущенные приложения, чтобы они приняли внесенные вами изменения.
В системах, производных от Debian, /etc/gai.conf
уже присутствует. В системах, производных от Red Hat, он отсутствует, но образец файла находится по адресу /usr/share/doc/glibc-common-*/gai.conf
; просто скопируйте это в /etc
.
Хорошо, вот совершенно другой ответ.
Поместите хосты-нарушители с дрянным подключением IPv6 в /etc/hosts
с их соответствующим IPv4-адресом.
Например:
199.7.53.74 whois.verisign-grs.com
Не забудьте удалить их, когда их (в данном случае) или ваше соединение IPv6 улучшится.