更新

更新

我在 ubuntu 20.04 上 ping google.com 时遇到问题

david@Ptolemy:~$ ping google.com
PING google.com(syd09s22-in-x0e.1e100.net (2404:6800:4006:80e::200e)) 56 data bytes
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=1 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=2 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=3 Destination unreachable: Address unreachable
^C
--- google.com ping statistics ---
6 packets transmitted, 0 received, +3 errors, 100% packet loss, time 5071ms

我可以从同一网络上的 Windows 计算机 ping google。

我可以从我的 ubuntu 电脑 ping 默认网关

david@Ptolemy:~$ ip r
default via 10.0.0.138 dev eno1 proto dhcp metric 100 
10.0.0.0/24 dev eno1 proto kernel scope link src 10.0.0.28 metric 100 
169.254.0.0/16 dev eno1 scope link metric 1000 

david@Ptolemy:~$ ping 10.0.0.138
PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data.
64 bytes from 10.0.0.138: icmp_seq=1 ttl=64 time=0.528 ms
64 bytes from 10.0.0.138: icmp_seq=2 ttl=64 time=0.492 ms
64 bytes from 10.0.0.138: icmp_seq=3 ttl=64 time=0.491 ms
64 bytes from 10.0.0.138: icmp_seq=4 ttl=64 time=0.491 ms
64 bytes from 10.0.0.138: icmp_seq=5 ttl=64 time=0.565 ms
64 bytes from 10.0.0.138: icmp_seq=6 ttl=64 time=0.507 ms
^C
--- 10.0.0.138 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5113ms
rtt min/avg/max/mdev = 0.491/0.512/0.565/0.027 ms

以下是一些其他设置:

david@Ptolemy:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 04:92:26:5c:a2:ea brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.28/24 brd 10.0.0.255 scope global dynamic noprefixroute eno1
       valid_lft 85865sec preferred_lft 85865sec
    inet6 2001:8003:7405:1200:b479:aa32:55aa:acf5/64 scope global temporary dynamic 
       valid_lft 2911sec preferred_lft 2911sec
    inet6 2001:8003:7405:1200:88b2:8fdf:2a6e:c736/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2911sec preferred_lft 2911sec
    inet6 fe80::318d:29eb:dfbb:ab2e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

我的 iptables 有如下默认规则:

david@Ptolemy:~$ sudo iptables -L
[sudo] password for david: 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

有人知道如何修复这个问题吗?谢谢。

更新 回复:@Jurrie 问题 我尝试在两台机器上 ping -4 google.com,确实有效。然后我明确尝试在两台机器上 ping -6 google.com。现在两台机器上都出现了相同的目标无法到达错误,所以谢谢你,我们走上了正确的道路。

david@Ptolemy:~$ ip -6 r
::1 dev lo proto kernel metric 256 pref medium
2001:8003:7405:1200::/64 via fe80::faab:5ff:feca:8050 dev eno1 proto ra metric 100 pref medium
fe80::/64 dev eno1 proto kernel metric 100 pref medium
default via fe80::faab:5ff:feca:8050 dev eno1 proto ra metric 20100 pref medium

因此,我进入了网关页面,网络设置“本地 IPv4 地址”设置为我们看到的 10.0.0.138,但是在此表的底部有两个 IPv6 设置留空,即未设置。链接本地网关 IPv6 地址全局网关 IPv6 地址

我认为我必须找出如何为我的网关配置 ipv6,或者我是否将 ubuntu 配置为使用 ipv4。哪个更可取?

更多测试结果和奇怪的行为 -

我通过注释掉您建议的行precedence ::ffff:0:0/96 100重新启动,将 gai.conf 改回原始状态,然后运行以下测试。请注意,不带任何选项的 ping google 会失败,并显示主机无法访问的消息,而 ping amazon 则有效。然后请注意,ping -6 对两者都不起作用,但会产生不同的消息。我认为 ubuntu 又回到使用 ipv6 进行 ping,但如果是这样,为什么 amazon.com 可以正常 ping?

david@Ptolemy:~$ ping www.google.com
PING www.google.com(syd09s23-in-x04.1e100.net (2404:6800:4006:80f::2004)) 56 data bytes
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=1 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=2 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=3 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=4 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=5 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=6 Destination unreachable: Address unreachable
^X^C
--- www.google.com ping statistics ---
8 packets transmitted, 0 received, +6 errors, 100% packet loss, time 7090ms

david@Ptolemy:~$ ping www.amazon.com
PING d3ag4hukkh62yn.cloudfront.net (13.224.176.180) 56(84) bytes of data.
64 bytes from server-13-224-176-180.syd1.r.cloudfront.net (13.224.176.180): icmp_seq=1 ttl=244 time=22.1 ms
64 bytes from server-13-224-176-180.syd1.r.cloudfront.net (13.224.176.180): icmp_seq=2 ttl=244 time=21.9 ms
64 bytes from server-13-224-176-180.syd1.r.cloudfront.net (13.224.176.180): icmp_seq=3 ttl=244 time=21.8 ms
^X64 bytes from server-13-224-176-180.syd1.r.cloudfront.net (13.224.176.180): icmp_seq=4 ttl=244 time=21.7 ms
^C
--- d3ag4hukkh62yn.cloudfront.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 21.661/21.860/22.090/0.160 ms
david@Ptolemy:~$ ping -6 www.google.com
PING www.google.com(syd09s23-in-x04.1e100.net (2404:6800:4006:80f::2004)) 56 data bytes
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=1 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=2 Destination unreachable: Address unreachable
From 2001:8003:7405:1200:faab:5ff:feca:8050 (2001:8003:7405:1200:faab:5ff:feca:8050) icmp_seq=3 Destination unreachable: Address unreachable
^C
--- www.google.com ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3026ms

david@Ptolemy:~$ ping -6 www.amazon.com
ping: www.amazon.com: Name or service not known
david@Ptolemy:~$ ping -4 www.google.com
PING www.google.com (142.250.66.196) 56(84) bytes of data.
64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=1 ttl=115 time=22.3 ms
64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=2 ttl=115 time=27.1 ms
64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=3 ttl=115 time=22.3 ms
64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=4 ttl=115 time=22.3 ms
64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=5 ttl=115 time=21.9 ms
^X64 bytes from syd09s23-in-f4.1e100.net (142.250.66.196): icmp_seq=6 ttl=115 time=22.2 ms
^C
--- www.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5007ms
rtt min/avg/max/mdev = 21.931/23.008/27.081/1.825 ms
david@Ptolemy:~$ ping -4 www.amazon.com
PING e15316.e22.akamaiedge.net (23.217.176.20) 56(84) bytes of data.
64 bytes from a23-217-176-20.deploy.static.akamaitechnologies.com (23.217.176.20): icmp_seq=1 ttl=60 time=9.58 ms
64 bytes from a23-217-176-20.deploy.static.akamaitechnologies.com (23.217.176.20): icmp_seq=2 ttl=60 time=9.31 ms
64 bytes from a23-217-176-20.deploy.static.akamaitechnologies.com (23.217.176.20): icmp_seq=3 ttl=60 time=9.36 ms
^C
--- e15316.e22.akamaiedge.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 9.305/9.414/9.578/0.117 ms

答案1

从你的 Ubuntu 安装中 ping google.com 可以使用IPv6

您提到您可以从同一网络上的 Windows ping google.com - 这也是使用 IPv6 吗?还是使用较旧的 IPv4 变体?

如果 Windows 使用的是 IPv4 - 您可以ping -4 google.com在 Ubuntu 中尝试一下,看看是否可行?如果可行,我们可以肯定问题出在 IPv6 上。如果不可行,那么问题就完全不同了。(虽然我不知道具体是什么。)

您给出的诊断命令都是基于 IPv4 的。我们需要 IPv6 等效命令。

你可以尝试:

  • ip -6 r列出你的 IPv6 路由
  • ping -6 [your-default-gateway-here]%[iface-to-use-for-default-gateway]使用 IPv6 ping 你的默认网关
  • sudo ip6tables -L列出你的 IPv6 防火墙规则

并在此列出这些输出?

更新

使用 IPv6 还是不使用 IPv6?

您询问是否优先选择 IPv4 还是 IPv6。

连接到网络(如互联网)的计算机被赋予唯一的编号。这些是 IPv4 编号或 IPv6 编号。IPv4 编号看起来像52.142.124.215,而 IPv6 编号看起来像2001:9a8:0:e:1337:0:80:1。IPv4 编号方案允许最多 2³² 个唯一地址(尽管其中许多地址是为特殊目的或私有网络保留的)。信不信由你,如今这已经不够了。IPv6 就是为了解决这个问题(以及更多)而发明的 - 它最多允许 2¹²⁸ 个唯一地址。这就是为什么我一般会说你应该更喜欢 IPv6。

但是,你说你的 ISP 不支持 IPv6。真遗憾,ISP 有足够的时间来支持 IPv6。但是,如果你的 Ubuntu 机器和 Google.com 之间的所有设备都不支持 IPv6,你就无法实现“真正的 IPv6”。(可以选择IPv4 上的 IPv6,但不要担心——切换 ISP 可能是更好的解决方案。)坚持使用 IPv4。

当 ISP 不支持 IPv6 时,Ubuntu 为什么会尝试 IPv6?

如上所述,计算机使用唯一数字来指代其他主机。但我们人类不擅长记住这样的数字52.142.124.215。我们擅长记住有趣的随机单词,例如“Duck Duck Go!”。(事实上,你现在已经记住了:duckduckgo.com是一个隐私友好的搜索引擎。)因此,在后台,我们使用一个名为DNS翻译duckduckgo.com过来就是52.142.124.215

ISP 都为此运行 DNS 服务器,并且还存在非 ISP 特定的公共 DNS 服务器。

您的 Ubuntu 计算机向其 DNS 解析器询问:“嘿, 的 IP 号码是多少google.com?”,DNS 服务器回答“好的,2404:6800:4006:80e::200e先生”。但是,这是一个 IPv6 地址,您的 ISP 不支持它。

所以我很好奇你使用哪个 DNS 服务器?你能在网络设置中检查一下吗?尝试使用 ISP 提供的 DNS 服务器。大多数情况下,ISP 建议使用 DHCP,这将使你的计算机自动使用 ISP DNS 服务器。

如果您已经在使用 ISP 的 DNS 服务器,或者您不能使用它们,或者您不想使用它们,那么您应该将 Ubuntu 配置为优先使用 IPv4 地址,即使所请求的 DNS 名称的 IPv6 地址可用。

进行 DNS 查找时首选 IPv4 地址

Linux 上的程序使用函数 进行 DNS 到 IP 的解析getaddressinfo。该函数有一个配置文件:/etc/gai.conf。使用文本编辑器打开它,并在底部添加一行:

precedence ::ffff:0:0/96  100

在我的系统上,这ping google.com从使用 IPv6 更改为 IPv4。(请注意,这部分内容getaddressinfo取自这个答案

相关内容