同一个无线路由器下面,为什么 Windows10 电脑可以使用 ipv6 上网, ubuntu22 下能看到 ipv6 地址,但是不能通过 ipv6 上网,也不能 ping 到 ipv6 的地址

218 天前
 gdb

我有一个 tplink 的无线路由器。

此无线路由器下面,如果我无线连接的是 windows10 的笔记本电脑,可以正常获取 ipv6 的地址,也可以正常使用 ipv6 的网络上网。

如果我用一个 ubuntu22 的电脑通过 wifi 连接这个路由器,我看到 ubuntu22 的系统也可以获取到 ipv6 的地址,但是如果我去 ping 某些 ipv6 的地址,一点返回信息都没有,而且我也无法通过浏览器访问 ipv6 的网站。

大家有遇到过这种情况么?不知道如何解决这个问题。

PS:在 ubuntu22 下面,我如果运行 ifconfig ,我的无线 wlan 接口得到的内容如下:

wlxcdddddddddd: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.87.104  netmask 255.255.255.0  broadcast 192.168.87.255
        inet6 2001:ddd:dddd:d::d:dddd  prefixlen 128  scopeid 0x0<global>
        inet6 fe80::9b9f:7ce6:bd5c:d445  prefixlen 64  scopeid 0x20<link>
        ether c8:dd:dd:dd:dd:dd  txqueuelen 1000  (Ethernet)
        RX packets 2019255  bytes 787493044 (787.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2967086  bytes 1884873281 (1.8 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

为保护隐私,我把输出的真实的 ipv6 的地址的最后一些位都改成 ddddd 这样的值了,真实的值都是一些 16 进制的数据。

实际 ping 的时候,结果如下:

ping6 www.baidu.com
PING www.baidu.com(240e:e9:6002:15c:0:ff:b015:146f (240e:e9:6002:15c:0:ff:b015:146f)) 56 data bytes
^C
--- www.baidu.com ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3054ms

谢谢!

1169 次点击
所在节点    宽带症候群
19 条回复
DataPipe
218 天前
yyzh
218 天前
教育网?
ip -6 r 看看有啥?
gdb
218 天前
@yyzh

这个和教育网与否有关系么?我这个测试地点是教育网。但是为啥 windows10 的系统都工作正常?

你这命令的输出结果如下:

~~~~
::1 dev lo proto kernel metric 256 pref medium
2001:ddd:dddd:d::d:dddd dev wlxcdddddddd proto kernel metric 600 pref medium
fe80::/64 dev wlxcdddddddd proto kernel metric 1024 pref medium
default via fe80::42ee:ddff:fe60:1d9d dev wlxcdddddddd proto ra metric 20600 pref medium
~~~~
gdb
218 天前
@DataPipe

谢谢,这个 chatGPT 给的建议还挺多,不过我大部分都试了,好像都正常,但是也无法解决问题。

目前我还有一个没测试,就是这个:

禁用 IPv6 隐私扩展

这个不知道是否有影响,我找时间测试一下。
yyzh
218 天前
🤔没咋玩过 dhcpv6,不过默认路由的 metric 有那么大的么?
不行就去 tp 路由器里把 ipv6 局域网设置调成 SLAAC 分配看看能不能上网.
feedcode
218 天前
防火墙上有 mac 地址过滤? 能 ping 通其他节点吗

ping6 -I eth0 ff02::1
ping6 -I eth0 ff02::2

ff02::1 All Nodes Address
ff02::2 All Routers Address
gdb
217 天前
@yyzh

你好,谢谢,我这个路由器,我看了一下,因为 wlan 口的 ipv4 的地址,是通过自动获取 ip 地址的方式得到的。

然后根据路由器的设置手册,我这个 ipv6 的地址获取方式,只能通过桥模式来获得,见如下说明:

家用路由器 IPv6 上网设置方法 - TP-LINK 商用网络 — https://smb.tp-link.com.cn/service/detail_article_4739.html

在这种桥模式下面,我无法设置 SLAAC 这种方式。
gdb
217 天前
@feedcode

看起来好像不行,你提供的这个命令,我把 eth0 改成了我自己的那个 interface 的名字,但是提示有问题,我最终使用的是如下命令:


ping6 ff02::1
PING ff02::1(ff02::1) 56 data bytes
^C
--- ff02::1 ping statistics ---
13 packets transmitted, 0 received, 100% packet loss, time 12273ms

似乎没有办法 ping
gdb
217 天前
补充几个信息:

1 ,我的 ubuntu 里面没有防火墙,防火墙的状态是 disable 的状态

2 ,我设置了 “禁用 IPv6 隐私扩展”,设置如下:

net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0

然后重启了电脑,但是结果还是一样的,还是不能 ipv6 上网。
gdb
217 天前
@feedcode

我一直在折腾这个问题,你这个 ping 的问题,我看了一下,似乎是可以 ping 通的,如下的结果:

~~~~
ping6 -I wlxcddddddddddd ff02::1
ping6: Warning: source address might be selected on device other than: wlxcddddddddddd
PING ff02::1(ff02::1) from :: wlxcddddddddddd: 56 data bytes
64 bytes from fe80::9b9f:7ce6:bd5c:d445%wlxcddddddddddd: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=1 ttl=64 time=541 ms
64 bytes from fe80::9b9f:7ce6:bd5c:d445%wlxcddddddddddd: icmp_seq=2 ttl=64 time=0.023 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=2 ttl=64 time=4.34 ms
64 bytes from fe80::9b9f:7ce6:bd5c:d445%wlxcddddddddddd: icmp_seq=3 ttl=64 time=0.023 ms


ping6 -I wlxcddddddddddd ff02::2
ping6: Warning: source address might be selected on device other than: wlxcddddddddddd
PING ff02::2(ff02::2) from :: wlxcddddddddddd: 56 data bytes
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=1 ttl=64 time=13.0 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=2 ttl=64 time=12.0 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=3 ttl=64 time=8.16 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=4 ttl=64 time=5.05 ms
64 bytes from fe80::82ea:7ff:febd:ee50%wlxcddddddddddd: icmp_seq=5 ttl=64 time=2.98 ms
~~~~

请问这个 ff02::1 和 ff02::2 是什么东西?
gdb
217 天前
我还修改了另外一个选项:

~~~~
/etc/netplan$ cat 01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
wlxcddddddddddd:
accept-ra: false
~~~~

这里我模仿了此链接:
IPv6 over PPPoe? - Ask Ubuntu — https://askubuntu.com/questions/56890/ipv6-over-pppoe

但是好像关闭掉 ra ,也没能解决我的问题

哦,我看了一下, 这个 ff02::1 和 ff02::2 是两个广播地址,能 ping 通这两个广播地址能说明什么问题?
feedcode
217 天前
ff02::2 通的话你加下默认路由试试

ip -6 route replace default via fe80::82ea:7ff:febd:ee50 dev wlxcddddddddddd

fe80::82ea:7ff:febd:ee50 是 ping 的返回地址
gdb
217 天前
@feedcode 谢谢,我试了一下,似乎还是不行。

我用的是如下命令:

ip -6 route replace default via fe80::82ea:7ff:febd:ee50 dev wlxc83a35c042a2


而且我看了一下, 这个地址 fe80::82ea:7ff:febd:ee50 实际上就是我的无线路由器的 ipv6 的 LAN 的端口的本地地址,这个在无线路由器的管理 web 界面的 ipv6 相关配置的地方能看到。

以上命令运行完了之后,还是 ipv6 的网站都没法 ping ,也没法访问 ipv6 的网站。
gdb
217 天前
我又继续分析了一下,如下的 tracepath 命令

~~~~
$ tracepath -6 fe80::82ea:7ff:febd:ee50
1?: [LOCALHOST] 0.028ms pmtu 1500
1: fe80::82ea:7ff:febd:ee50%wlxc83a35c042a2 123.421ms reached
1: fe80::82ea:7ff:febd:ee50%wlxc83a35c042a2 46.814ms reached
Resume: pmtu 1500 hops 1 back 1


$ tracepath -6 fe80::42ee:ddff:fe60:1d9d
1?: [LOCALHOST] 0.013ms pmtu 1500
1: no reply
2: no reply
3: no reply
4: no reply
5: no reply
^C
~~~~

上面这两个命令很奇怪,第一个命令,这个尾巴是 ee50 的 ipv6 地址,实际上是我的 bridge 模式的无线路由器的 LAN 口的 ipv6 的 Local Link 的地址
这个尾巴是 1d9d 的 ipv6 的地址,实际上是上级路由器分配给我的 ubuntu 电脑的网关地址。我就觉得很奇怪,为啥网关是无法 ping 通的,反而是桥接模式的无线路由可以访问到。正常来说网关应该直接 ping 到才对。
ChaosAttractor
215 天前
你这个网络环境是不能通过 dhcp-pd 等方法拿到 ipv6 段吗?(一般就是校园网,光猫无论桥接与否一般都可以 dhcp-pd ) tplink 这个桥接模式应该是 slaac-relay ,也就是中续并篡改 RA/RS 包的 mac 地址,然后配合 NDP-Proxy ,网关做三层转发(也有不用 NDP-Proxy 纯二层的实现,参考 https://blog.men.ci/ipv6-slaac-relay-and-bridge ),这是一种没有办法的情况下(需要鉴权且只允许有一个 mac 地址联网)才会使用的很窒息很 hack 的模式

如果可以接受 NAT 的话,可以找找路由器有没有 ULA+NAT66/NTPv6 的选项

这种模式下应该只能使用 SLAAC ,DHCPv6 的话需要额外实现 DHCPv6 报文的中续和篡改(具体实现方法取决与你的 NDP-Proxy 的实现会不尽相同)

但是很显然你用了 DHCPv6 (显然你的地址不是 eui64 生成的),以及你拿到的地址也有些奇怪,很少见到 ::d:dddd 这种风格的地址,大概率不是你的路由器给的,是上游的网关给的,你可以用 ip -6 route 来查看一下 Default Route 是什么地址,看看是不是你的路由器

你的路由表里关于二层的路由应该没什么问题,但是 Default Route (网关)大概不是你的路由器而是上游的网关,那么就要看你路由器的 NDP-Proxy 是怎么实现的了,如果它的中续是双向的,那么你就可以联网,否则你可以理解为是你的路由器的实现有问题

此外你说 Windows 可以联网,Windows 是通过 DHCPv6 联网的??你试试看安卓能不能联网,安卓只支持 SLAAC
ChaosAttractor
215 天前
你之前 ping 网关时候网关的地址都是典型的 SLAAC 地址,你确定是只能用 DHCPv6 而不是只能有 SLAAC?
gdb
215 天前
@ChaosAttractor 谢谢你的回复,你这回复内容太丰富了。我一块一块回答一下:

我这个校园网,基本上是房间里面有物理网线口,物理网线口上面,我接了一个 tplink 的无线路由器 WLAN 口,然后无线路由器下面我是挂了一些无线设备,比如设备 1:Windows10 的笔记本电脑,设备 2:Linux ( ubuntu22 )的电脑,设备 3:Android 的手机。

tplink 的无线路由器里面,ipv4 的地址是 DHCP 自动分配模式,ipv6 的设置选项,我是根据 tplink 官网介绍的,设置为桥接模式。

我现在的情况是:

Windows10 的笔记本,可以分配到 ipv6 的地址,ipv6 的地址开头是 2001:xxxx 后面我这些 ddddd 的东西,主要是为了保护隐私,我在 v2 网站发帖的时候改掉的,实际上是一个正常的 ipv6 的全局地址。然后 Windows10 的笔记本可以正常通过 ipv6 上网,我可以 ping 一些 ipv6 的网站,比如 ping ipv6.baidu.com 都是正常的,用专门测试 ipv6 连接的网页,测试也都全部通过。

但是我的 Linux 电脑,虽然也能获取到一个 2001 开头的 ipv6 地址,就是死活不能通过 ipv6 上网。

我也试了我的 Android 手机,也不能通过 ipv6 上网( ipv6 的测试网页都是测试失败的)。


同样一台一模一样型号的 tplink 无线路由器(固件也一样),我在别的地方使用,在 tplink 无线路由器的前面(上一级)我是接了一个 openwrt 的拨号设备,我看了一下,这种情况下 tplink 后面挂的无论是 windows ,还是 linux ,还是 android ,都是可以正常使用 ipv6 网络的。

所以我的怀疑是我们的校园网的最顶端的路由器有点问题。但是也不知道怎么去解决。按我的理解,为啥 Windows 下可以用,但是 Linux 下就不行呢。( Android 是一种 Linux )。

我后续再回复你的其他问题。
gdb
215 天前
@ChaosAttractor

关于你说的 ip -6 route 的命令的结果,我之前的回复帖子里面发过,我再发一遍:

~~~~
::1 dev lo proto kernel metric 256 pref medium
2001:ddd:dddd:d::d:dddd dev wlxcdddddddd proto kernel metric 600 pref medium
fe80::/64 dev wlxcdddddddd proto kernel metric 1024 pref medium
default via fe80::42ee:ddff:fe60:1d9d dev wlxcdddddddd proto ra metric 20600 pref medium
~~~~

这个里面,除了 2001 开头的那个地址后面的 ddddd 的内容我是改过的(为保护隐私),其他我没动过。
gdb
215 天前
@ChaosAttractor 关于你说的如下问题:


[但是很显然你用了 DHCPv6 (显然你的地址不是 eui64 生成的),以及你拿到的地址也有些奇怪,很少见到 ::d:dddd 这种风格的地址,大概率不是你的路由器给的,是上游的网关给的,你可以用 ip -6 route 来查看一下 Default Route 是什么地址,看看是不是你的路由器

你的路由表里关于二层的路由应该没什么问题,但是 Default Route (网关)大概不是你的路由器而是上游的网关,那么就要看你路由器的 NDP-Proxy 是怎么实现的了,如果它的中续是双向的,那么你就可以联网,否则你可以理解为是你的路由器的实现有问题]


你说的没错,我的 ip -6 route 的结果里面,那个 fe80::42ee:ddff:fe60:1d9d 的地址并不是 tplink 无线路由器的的地址,我也感觉应该是上一级的网关的地址。另外,我看了一下,tplink 无线路由器的 ipv6 的一个 local 的地址,我可以在路由器里面看到,也是 fe80 开头的一个地址。



[此外你说 Windows 可以联网,Windows 是通过 DHCPv6 联网的??你试试看安卓能不能联网,安卓只支持 SLAAC] 安卓在这种情况下连上无线 tplink 后,ipv6 不能用。
我现在的问题是:能否设置一下 ubuntu22 的电脑,让它能像 windows10 的电脑那样工作,我不知道这个怎么设置,因为 Windows10 下的 ipv6 是工作正常的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1033417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX