У меня такая ситуация, когда 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.