Eu gostaria que o Apache escutasse no endereço ipv6 do link local em uma interface específica. Eu tenho a seguinte linha no meu httpd.conf:
Listen [fe80::a00:16ff:fe89:420f]:80
Que é baseado na documentação do Apache aqui: https://httpd.apache.org/docs/2.4/bind.html "endereços IPv6 devem ser colocados entre colchetes"
Os detalhes do meu sistema operacional/versão do Apache são os seguintes:
$ 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
O resultado mostrado usando journalctl -e
é:
(22) Argumento inválido: AH00072: make_sock: não foi possível vincular ao endereço [fe80.....
O IPv6 está funcionando porque tenho escuta sshd e dnsmasq. Tentei anexar dois sufixos de ID de escopo diferentes ao endereço. Você pode usar o id da interface 3
ou o nome net1
como um scopeid em ambos ping6
e 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 com:ListenAddress fe80::a00:16ff:fe89:420f%3
ou:ListenAddress fe80::a00:16ff:fe89:420f%net1
Então, com tudo isso em mente, tentei o seguinte em httpd.conf
Ouça [fe80::a00:16ff:fe89:420f%3]:80
eListen [fe80::a00:16ff:fe89:420f%net1]:80
A adição de um dos scopeid fez com que o Apache falhasse no início do processo de inicialização. journalctl -e
mostra um erro de sintaxe ao analisar httpd.conf da seguinte forma:
AH00526: Erro de sintaxe na linha 52 de /etc/httpd/conf/httpd.conf:
Scope id não é suportado
O Apache escuta no localhost ipv6 se eu fizer issoListen [::1]:80
Eu esperaria Listen 80
que o Apache se ligasse tanto ao ipv4 quanto ao ipv6, mas isso não acontece. Ele se liga apenas a endereços ipv6 - o netstat mostra:
tcp6 0 0 :::80 :::* LISTEN
Nesse caso, o Apache aceita solicitações no endereço link-local em net1. Eu tenho que especificar 0.0.0.0:80
ou um endereço ipv4 específico para que ele escute no ipv4.
Então, como faço o Apache ligar-se a um endereço local de link específico (não todos eles - quero evitar ouvir em outras interfaces) ou simplesmente não é possível para o Apache ouvir em um endereço ipv6 de link local?
Depois de passar algum tempo nisso, parece que a documentação do Apache pode ser enganosa, embora eu possa ter perdido alguma coisa. Ele diz que os endereços IPv6 devem ser colocados entre colchetes. Isso é verdade para endereços sem link local. Mas agora descobri que os endereços locais de link podem ser usados e devem incluir um ID de escopo, mas sem os colchetes. Veja abaixo:
Documentação do Apache:
Minha configuração:
Como você pode ver, usei o ID da interface para o ID do escopo com a porta 80 e o nome da interface para o ID do escopo com a porta 443. Isso é apenas para mostrar que o ID ou nome da interface pode ser usado com sucesso como o ID do escopo.
Resultados: