Apache (Linux) httpd 監聽連結本地 IPv6 地址
我希望 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 後綴附加到地址。您可以在和中使用介面 ID
3
或名稱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,但沒有方括號。見下文:
阿帕奇文件:
$ 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
我的配置:
$ 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
如您所見,我使用了介面 id 作為 80 埠的作用域 id 和 443 埠的作用域 id 的介面名稱。這只是為了表明介面 id 或名稱都可以成功用作範圍標識。
結果:
$ 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