我在服务器 (#1) 上使用 IPv4 + IPv6。
有时 IPv4 地址会映射到另一台服务器(#2),因此 #1 无法通过 IPv4 访问,但仍然可以通过 IPv6 访问。
在这种情况下,IPv6 DNS 查找将不起作用。
$ ping6 mirror.ipv6.hetzner.de
unknown host
如果我禁用 IPv4 地址,一切都会正常运行。
$ ping6 mirror.ipv6.hetzner.de
PING mirror.ipv6.hetzner.de(2a01:4f8:0:a101::1:1) 56 data bytes
64 bytes from 2a01:4f8:0:a101::1:1: icmp_seq=1 ttl=60 time=0.469 ms
这怎么可能?如果 IPv4 地址映射到另一台服务器,IPv6 网络应该可以作为后备。但如果我无法解析任何主机名,我就无法使用它。
无论 IPv4 是否可用,是否有可能使 IPv6 DNS 正常工作?
编辑:
/etc/resolv.conf
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 213.133.99.99
nameserver 213.133.100.100
nameserver 213.133.98.98
nameserver 2a01:4f8:0:a0a1::add:1010
nameserver 2a01:4f8:0:a102::add:9999
nameserver 2a01:4f8:0:a111::add:9898
路由:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 5.9.61.167 0.0.0.0 UG 100 0 0 eth0
5.9.61.167 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
$ route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2a01:4f8:162:7ffe:1::2/128 :: U 1024 0 1 eth0
2a01:4f8:162:7ffe:6::/80 :: U 256 0 0 eth0
fe80::/64 :: U 256 0 0 eth0
::/0 2a01:4f8:162:7ffe:1::2 UG 1024 0 0 eth0
::/0 :: !n -1 1 6 lo
::1/128 :: Un 0 1 5 lo
2a01:4f8:162:7ffe:6::2/128 :: Un 0 1 190 lo
fe80::5054:ff:fe3d:5f4c/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 0 0 eth0
::/0 :: !n -1 1 6 lo
答案1
您将情况描述为“IPv4 地址已映射到另一台服务器”。这是否意味着 IPv4 地址实际上已从服务器 #1 中删除(从网络接口取消配置)还是只是它没有路由到系统?
我问这个问题是因为 resolv.conf 中的顺序将首先尝试 IPv4,然后尝试 IPv6,所以当服务器“认为”它有 IPv4 时,它将通过 IPv4 发送一个数据包,并且永远不会看到答案(并且服务器#2 将忽略它)。
解决方案是找出哪个进程导致 resolvconf 配置中的 IPv4 地址以及哪个进程导致 IPv6 地址,然后在 /etc/resolvconf/interface-order 中切换它们