经过一番通信后,我的 ISP 翻转了一些开关,使路由器能够获得路由器所谓的“默认 IPv6 网关”。我的以太网连接 PC 现在可以毫无问题地使用 IPv6:
$ ping -q -c 1 ipv6.google.com
PING ipv6.google.com(syd15s01-in-x0e.1e100.net (2404:6800:4006:806::200e)) 56 data bytes
--- ipv6.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 45.496/45.496/45.496/0.000 ms
笔记本电脑,正在运行相同的软件在同一发行版 (Arch Linux) 上,能够连接到 IPv4 主机,但不能连接到 IPv6 主机:
$ ping -q -c 1 ipv6.google.com
connect: Network is unreachable
当向我的 ISP 询问此事时,他们回答说
您的计算机无线适配器上是否配置了 IPv6?
我怎么知道?我能想到的最接近的是笔记本电脑似乎已经为网络接口分配了一个内部IP:
$ ip address show dev wlp1s0
2: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 54:8c:a0:52:3e:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.6/24 brd 192.168.1.255 scope global noprefixroute wlp1s0
valid_lft forever preferred_lft forever
inet6 fe80::f0ac:8fe:bb0d:619a/64 scope link
valid_lft forever preferred_lft forever
我的笔记本电脑没有以太网插头,因此我无法检查它是否会通过以太网接收 IPv6 地址。
我能想到的最接近的路由器配置页面是:
我已与我的 ISP 进一步联系,他们维持当前设置应该只是工作。我刚刚使用台式电脑连接到无线网络,并且可以确认它确实收到了 DHCPv6 租约。
两台机器都有相同的 /etc/dhcpcd.conf 和 /etc/netconfig 文件(使用 确认diff -u <(ssh laptop cat /etc/…) /etc/…
)。即便如此,当连接到 Wi-Fi 时,dhcpcd 日志还是有很大不同。在我的电脑上:
$ journalctl --follow --output=cat --unit=dhcpcd | grep ^eno1
eno1: rebinding lease of 192.168.1.2
eno1: leased 192.168.1.2 for 86400 seconds
eno1: adding route to 192.168.1.0/24
eno1: adding default route via 192.168.1.1
eno1: soliciting an IPv6 router
eno1: Router Advertisement from xxxx::xxxx:xxxx:xxxx:xxxx
eno1: adding address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64
eno1: adding route to xxxx:xxxx:xxxx:xxxx::/64
eno1: adding default route via xxxx::xxxx:xxxx:xxxx:xxxx
eno1: soliciting a DHCPv6 lease
在笔记本电脑上:
$ journalctl --follow --output=cat --unit=dhcpcd | grep ^wlp1s0
wlp1s0: rebinding lease of 192.168.1.6
wlp1s0: leased 192.168.1.6 for 86400 seconds
wlp1s0: adding route to 192.168.1.0/24
wlp1s0: adding default route via 192.168.1.1
wlp1s0: soliciting an IPv6 router
wlp1s0: no IPv6 Routers available
除了接口名称外,它们的 Wi-Fi 连接配置也相同:
Description='Automatically generated profile by wifi-menu'
Interface=wlo1
Connection=wireless
Security=wpa
ESSID=…
IP=dhcp
Key=…
Wireshark 报告称,笔记本电脑确实从正确的 MAC 地址收到了 ICMPv6 路由器通告,这支持了问题在于笔记本电脑未处理路由器通告的观点。
比较两台机器的 IP 表似乎给出了一条线索:自从多年前在我的笔记本电脑上安装 UFW 以来,遗留了一些规则。对比两台机器的 IP 表可以看出:
$ comm -23 <(ssh laptop cat iptable.txt) iptable.txt
-P INPUT DROP
-P FORWARD DROP
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
-N ufw-before-output
-N ufw-logging-allow
-N ufw-logging-deny
-N ufw-not-local
-N ufw-reject-forward
-N ufw-reject-input
-N ufw-reject-output
-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output
-N ufw-track-forward
-N ufw-track-input
-N ufw-track-output
-N ufw-user-forward
-N ufw-user-input
-N ufw-user-limit
-N ufw-user-limit-accept
-N ufw-user-logging-forward
-N ufw-user-logging-input
-N ufw-user-logging-output
-N ufw-user-output
…
我想-P INPUT DROP
可能是这个问题的责任? IPv6 表也显示出类似的差异:
-P INPUT DROP
-P FORWARD DROP
-N ufw6-after-forward
-N ufw6-after-input
-N ufw6-after-logging-forward
-N ufw6-after-logging-input
-N ufw6-after-logging-output
-N ufw6-after-output
-N ufw6-before-forward
-N ufw6-before-input
-N ufw6-before-logging-forward
-N ufw6-before-logging-input
-N ufw6-before-logging-output
-N ufw6-before-output
-N ufw6-logging-allow
-N ufw6-logging-deny
-N ufw6-reject-forward
-N ufw6-reject-input
-N ufw6-reject-output
-N ufw6-skip-to-policy-forward
-N ufw6-skip-to-policy-input
-N ufw6-skip-to-policy-output
-N ufw6-track-forward
-N ufw6-track-input
-N ufw6-track-output
-N ufw6-user-forward
-N ufw6-user-input
-N ufw6-user-limit
-N ufw6-user-limit-accept
-N ufw6-user-logging-forward
-N ufw6-user-logging-input
-N ufw6-user-logging-output
-N ufw6-user-output
答案1
tl;dr 修复:
这是由多种因素共同造成的:
-P INPUT DROP
在我的 iptables 规则中,有早期保护系统的工作遗留下来的规则。- 错误的假设Puppet 防火墙“清除”指令将完全重置防火墙。我们都知道假设会做什么......
非常感谢大家的帮助!特意向@比利叔叔用于询问防火墙规则的差异。