我希望 Apache 监听特定接口上的链接本地 ipv6 地址。我的 httpd.conf 中有以下行:
Listen [fe80::a00:16ff:fe89:420f]:80
这基于此处的 Apache 文档:https ://httpd.apache.org/docs/2.4/bind.html “IPv6 地址必须用方括号括起来”
我的操作系统/Apache 版本详情如下:
$ 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
使用显示的结果journalctl -e
是:
(22)无效参数:AH00072:make_sock:无法绑定到地址[fe80.....
IPv6 正在工作,因为我有 sshd 和 dnsmasq 监听。我尝试将两个不同的范围 ID 后缀附加到地址。您可以在和中使用接口 ID3
或名称net1
作为范围ID 。ping6
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 适用于:ListenAddress fe80::a00:16ff:fe89:420f%3
或者:ListenAddress fe80::a00:16ff:fe89:420f%net1
所以考虑到这一切,我在 httpd.conf 中尝试了以下内容
听 [fe80::a00:16ff:fe89:420f%3]:80
和Listen [fe80::a00:16ff:fe89:420f%net1]:80
添加任何一个 scopeid 都会导致 Apache 在其启动过程中更早地失败。journalctl -e
解析 httpd.conf 时显示语法错误,如下所示:
AH00526:/etc/httpd/conf/httpd.conf 第 52 行的语法错误:
不支持范围 ID
如果我这样做,Apache 会在 localhost ipv6 上侦听Listen [::1]:80
我希望Listen 80
让 Apache 绑定到 ipv4 和 ipv6,但事实并非如此。它只绑定到 ipv6 地址 - netstat 显示:
tcp6 0 0 :::80 :::* LISTEN
在这种情况下,Apache 确实接受 net1 上链接本地地址上的请求。我必须指定0.0.0.0:80
或特定的 ipv4 地址才能在 ipv4 上侦听。
那么,如何让 Apache 绑定到一个特定的链接本地地址(不是全部 - 我想避免监听其他接口),还是 Apache 无法监听链接本地 ipv6 地址?
在这方面花了一些时间后,似乎 Apache 文档可能具有误导性,尽管我可能遗漏了一些东西。它说 IPv6 地址必须用方括号括起来。这适用于非本地链接地址。但是我现在发现可以使用链接本地地址,并且必须包含范围 ID,但没有方括号。见下文:
阿帕奇文档:
我的配置:
如您所见,我使用了接口 id 作为 80 端口的作用域 id 和 443 端口的作用域 id 的接口名称。这只是为了表明接口 id 或名称都可以成功用作范围标识。
结果: