Получение серверов с двойным стеком IPv4/IPv6 для привязки к 0.0.0.0 вместо ::на машинах, где ipv6 отключен?

awk -v test="$(awk '{print $1+0}' A.txt)" '{ if ($1 > test && $2 < test) {print test,$3} }'  B.txt
0
15.08.2021, 21:54
1 ответ

Что вы можете сделать, так это скомпрометировать :включить IPv6, но запретить его эффективное использование где бы то ни было.

Загрузитесь с включенным IPv6, но отключите его на будущих и текущих интерфейсах, используя sysctl -w...с указанными ниже параметрами или добавив эти параметры в /etc/sysctl.conf//etc/sysctl.d:

  net.ipv6.conf.default.disable_ipv6=1
  net.ipv6.conf.all.disable_ipv6=1

При этом использование IPv6 фактически отключено, в то время как API сокетов IPv6 остается включенным. Таким образом, приложение по-прежнему может привязываться к ::и получать IPv4, также связанный с ним в режиме двойного стека (, это по умолчанию, согласно RFC 3493).

Вы можете рассмотреть исключения и проблемы, связанные с ::1 в интерфейсе lo , в зависимости от конфигурации и поведения приложений. Среди множества вариантов:

  • удалить из /etc/hostsзапись, которая выглядела бы так:

    ::1     localhost ip6-localhost ip6-loopback
    
  • или не отключайте IPv6 на lo(после предыдущих настроек ), чтобы получить ::1:

    net.ipv6.conf.lo.disable_ipv6=0
    
  • Если вы решили оставить запись в /etc/hosts, подумайте о том, чтобы дать приоритет 127.0.0.1 над ::1, или в любом случае просто IPv4 над IPv6, добавив в/etc/gai.conf:

    precedence ::ffff:127.0.0.1/128 100
    

    или:

    precedence ::ffff:0:0/96  100
    

Предупреждение :Некоторые инструменты настройки сети (, такие как NetworkManager ), будут сбрасывать переключатель disable_ipv6на свои собственные настройки и, следовательно, должны быть явно настроены для отключения IPv6 на сконфигурированном интерфейсе.

Альтернативный метод :, если он слишком громоздкий, чтобы быть приемлемым,вот альтернативный метод отключения IPv6 (на ядрах с CONFIG_IP_ADVANCED_ROUTER, все ядра основных дистрибутивов делают ).

Запретить правила маршрутизации IPv6 использовать таблицы маршрутизации, заменив правило предпочтения 0 правилом blackhole , делающим любой поиск маршрута IPv6 невозможным (можно просто удалить все правила, включая предпочтение 32766, чтобы получить Network is unreachableвместоInvalid argument):

ip -6 rule delete preference 0
ip -6 rule add preference 0 blackhole

Даже без каких-либо других настроек на любом интерфейсе:

$ ping ::1
ping: connect: Invalid argument
ping ff05::2
ping: connect: Invalid argument

При прослушивании IPv6 по-прежнему выполняется успешно (и по умолчанию используется двойной стек в соответствии с RFC):

$ socat tcp6-listen:4242 /dev/null &
[1] 430541
$ ss -tnle sport == 4242
State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port                     
LISTEN  0       5                   *:4242             *:*           uid:1000 ino:5971821 sk:1106 v6only:0 <->

Он по-прежнему может получать трафик IPv4 в режиме двойного стека, поскольку маршруты IPv4 остаются беспрепятственными.

1
23.08.2021, 00:47

Теги

Похожие вопросы