Назад | Перейти на главную страницу

Службы с привязкой к IPv6, доступные только с IPv4 на хосте Linux с двойным стеком: как это работает?

У меня такая ситуация, когда Apache прослушивает ::: 443 только на хосте Linux, на котором включены как IPv6, так и IPv4.

Я могу получить доступ к контенту, обслуживаемому этим Apache, с компьютера, поддерживающего только IPV4.

Может ли кто-нибудь помочь мне понять, что происходит, и как проверить эту конфигурацию на хосте Linux (CentOS в моем случае)

Я где-то читал это

[...] серверы привязываются к адресам IPv6 (на всех интерфейсах или на определенном, если необходимо) и рассматривают IPv4 как сопоставленные, потому что IPv6 и IPv4 используют одно и то же пространство портов на одной машине. Это работает прозрачно благодаря glibc и рекомендуется для написания сетевых приложений. За подробностями обращайтесь к man ipv6 (7).

Я предполагаю, что это означает, что это могло произойти только с помощью сопоставленного адреса Ipv4. Однако я не могу заставить это работать с ping6 ::ffff:127.0.0.1 или на мой общедоступный IPv4-адрес. Кроме того, я не вижу никакой конфигурации, которая поддерживала бы это, когда смотрю на ip a

Вы можете сказать, что они используются, когда ss вывод показывает сокеты с отображенными адресами.

Из ipv6 (7)

Соединения IPv4 могут обрабатываться с помощью API v6 с использованием типа адреса v4-mapped-on-v6; таким образом, программа должна поддерживать только этот тип API для поддержки обоих протоколов. Это прозрачно обрабатывается функциями обработки адресов в библиотеке C.

Отметьте «прозрачно». Вы не даете программам v4 сопоставленные адреса v6, вы даете им адреса v4.

Параметр сокета IPV6_V6ONLY по умолчанию равен v6, прослушивая v4, отображаемый v6, по умолчанию /proc/sys/net/ipv6/bindv6only.

Это поведение зависит от платформы. Примечательно, что это особенность Linux.