我有一个无效的 Linux 服务器,有些网站无法在其上运行。如果我 ping google.com,就会出现超时错误
PING google.com(fra24s04-in-x0e.1e100.net (2a00:1450:4001:827::200e)) 56 data bytes
^C
--- google.com ping statistics ---
12 packets transmitted, 0 received, 100% packet loss, time 11258ms
尝试使用 wget 也会导致超时错误
--2022-06-28 22:03:18-- https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso
Resolving releases.ubuntu.com (releases.ubuntu.com)... 2620:2d:4000:1::17, 2001:67c:1562::28, 2620:2d:4000:1::1a, ...
Connecting to releases.ubuntu.com (releases.ubuntu.com)|2620:2d:4000:1::17|:443... failed: Connection timed out.
Connecting to releases.ubuntu.com (releases.ubuntu.com)|2001:67c:1562::28|:443... failed: Connection timed out.
Connecting to releases.ubuntu.com (releases.ubuntu.com)|2620:2d:4000:1::1a|:443... failed: Connection timed out.
Connecting to releases.ubuntu.com (releases.ubuntu.com)|2001:67c:1562::25|:443...
ip -6 addr
输出
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2a01:7e01::7c6e:8f34:70a3:3aa4/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 5284sec preferred_lft 1684sec
inet6 fe80::bf7e:a39f:fdf4:2bb1/64 scope link
valid_lft forever preferred_lft forever
ip -6 route
输出
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via fe80::1 dev eth0 proto ra metric 1002 mtu 1500 pref medium
ip -6 rule
输出
32766: from all lookup main
ip6tables-save
不输出任何内容
一些 IP 地址和网站可以正常工作,但不是很多。我尝试更改 DNS 服务器和网络管理器,但都不起作用。我该如何解决这个问题并让互联网正常工作?
答案1
所有“不起作用”的示例都显示 IPv6 连接 - 这意味着服务器可能有一个真正的 IPv6 地址和一个 IPv6 默认路由(否则它不会尝试这样做),但由于某种原因它仍然无法将 v6 数据包发送到任何地方。
根据ip addr
输出,该服务器有一个来自 Linode 的一个“共享”子网的 IPv6 地址(其中每个服务器使用 SLAAC 选择自己的地址)。
然而,Linode 数据中心不允许服务器选择任何随机地址——它们有反欺骗过滤功能,因此要求服务器使用仅有的其基于 MAC(又名基于 EUI64)的 IPv6 地址。
同时,您当前的 IPv6 地址肯定不是基于 EUI64 的——它缺少ff:fe
插入基于 MAC 地址中间的中缀,这意味着它可能是 RFC7217“不透明”地址。(出于隐私原因,网络管理工具越来越多地使用不透明的 IPv6 地址——正是为了避免泄露 MAC 地址,这对于移动设备来说很重要,但对于虚拟服务器来说则不那么重要。
如果要继续通过 SLAAC 使用自动 IPv6 配置,则需要让 SLAAC 客户端始终使用 EUI64 地址:
dhcpcd:
编辑您的 dhcpcd.conf 以说
slaac hwaddr
而不是slaac private
。网络管理器:
跑步。
nmcli con modify "Profile name here" ipv6.addr-gen-mode eui64
systemd-networkd(EUI64 已经是默认值):
在*.network 配置文件部分中指定
Token=eui64
(或者根本不指定令牌) 。[IPv6AcceptRA]
内核内置 SLAAC 客户端(EUI64 已经是默认):
添加
net.ipv6.conf.eth0.addr_gen_mode = 0
到您的系统控制目录。