apache-2.4 – Apache (Linux) httpd escucha en la dirección IPv6 local de enlace

Pregunta:

Me gustaría que Apache escuchara la dirección ipv6 de link-local en una interfaz en particular. Tengo la siguiente línea en mi httpd.conf:

Listen [fe80::a00:16ff:fe89:420f]:80

Que se basa en la documentación de Apache aquí: https://httpd.apache.org/docs/2.4/bind.html "Las direcciones IPv6 deben estar entre corchetes"

Los detalles de mi sistema operativo / versión de Apache son los siguientes:

$ httpd -v
Server version: Apache/2.4.18 (Unix)
Server built:   Dec 14 2015 08:05:54
$ uname -rv
4.3.3-3-ARCH #1 SMP PREEMPT Wed Jan 20 08:12:23 CET 2016

El resultado que se muestra con journalctl -e es:

(22) Argumento no válido: AH00072: make_sock: no se pudo enlazar a la dirección [fe80 …..

IPv6 está funcionando porque tengo sshd y dnsmasq escuchando. Intenté agregar dos sufijos de ID de alcance diferentes a la dirección. Puede usar el ID de interfaz 3 o el nombre net1 como un ID de ping6 tanto en ping6 como en sshd .

$ ip addr | grep -Po "^\d: \S+"
1: lo:
2: net0:
3: net1:

$ for scopeid in 3 net1; do ping6 -c 1 fe80::a00:16ff:fe89:420f%$scopeid; done | grep loss
1 packets transmitted, 1 received, 0% packet loss, time 0ms
1 packets transmitted, 1 received, 0% packet loss, time 0ms

sshd_config funciona con: ListenAddress fe80::a00:16ff:fe89:420f%3

o: ListenAddress fe80::a00:16ff:fe89:420f%net1

Entonces, con todo esto en mente, probé lo siguiente en httpd.conf

Escuche [fe80 :: a00: 16ff: fe89: 420f% 3]: 80

y Listen [fe80::a00:16ff:fe89:420f%net1]:80

Agregar cualquier scopeid hizo que Apache fallara antes en su proceso de inicio. journalctl -e muestra un error de sintaxis al analizar httpd.conf de la siguiente manera:

AH00526: Error de sintaxis en la línea 52 de /etc/httpd/conf/httpd.conf:
El ID de alcance no es compatible

Apache escucha en el localhost ipv6 si lo hago Listen [::1]:80

Esperaría que Listen 80 lograra que Apache se vincule a ipv4 e ipv6, pero no es así. Solo se une a direcciones ipv6; netstat muestra:

tcp6  0  0    :::80    :::*     LISTEN

En este caso, Apache acepta solicitudes en la dirección local de enlace en net1. Tengo que especificar 0.0.0.0:80 o una dirección ipv4 específica para que escuche en ipv4.

Entonces, ¿cómo hago para que Apache se vincule a una dirección local de enlace específica (no todas, quiero evitar escuchar en otras interfaces), o simplemente no es posible que Apache escuche en una dirección ipv6 local de enlace?

Respuesta:

Después de haber dedicado algún tiempo a esto, parece que la documentación de Apache podría ser engañosa, aunque es posible que me haya perdido algo. Dice que las direcciones IPv6 deben estar entre corchetes. Esto es cierto para direcciones no locales de enlace. Pero ahora descubrí que se pueden usar direcciones de enlace local y deben incluir una identificación de alcance, pero sin los corchetes. Vea abajo:

Documentación de Apache:

$ wget -q -O- https://httpd.apache.org/docs/2.4/bind.html | grep -Pao "(?<=p.)IPv6[ a-z]+"
IPv6 addresses must be enclosed in square brackets

Mi configuración:

$ grep -R ^Listen /etc/httpd/conf/
/etc/httpd/conf/httpd.conf:Listen fe80::a00:16ff:fe89:420f%3:80
/etc/httpd/conf/extra/httpd-ssl.conf:Listen fe80::a00:16ff:fe89:420f%net1:443

Como puede ver, he usado la identificación de la interfaz para la identificación del alcance con el puerto 80 y el nombre de la interfaz para la identificación del alcance con el puerto 443. Esto es solo para mostrar que la identificación o el nombre de la interfaz se pueden usar con éxito como id de alcance.

Resultados:

$ sudo netstat -pant | grep -i httpd
tcp6   0    0 fe80::a00:16ff:fe89::80 :::*  LISTEN   709/httpd
tcp6   0    0 fe80::a00:16ff:fe89:443 :::*  LISTEN   709/httpd

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım