IPv6 路由配置有时才有效

IPv6 路由配置有时才有效

我有一个已上线并可通过隧道 tun0 访问的网络。此 tun0 使用以下 Python 脚本启动:

tun_name = 'tun0'.encode()
ifs = ioctl(self.virtualIf, TUNSETIFF, struct.pack("16sH", tun_name, IFF_TUN))
self.ifname = tun_name.decode()
print('[NetworkSideThread] Created virtual interface '+self.ifname+'.')

# configure IPv6 addresses of virtual interface
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' up', shell=True)
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' inet6 add ' + self.prefix + '::1/64', shell=True)
subprocess.check_call(CMD_IFCONFIG + ' ' + self.ifname + ' inet6 add fe80::1/64', shell=True)
print('[NetworkSideThread] Configured IPv6 address')

# set static route
subprocess.check_call(CMD_ROUTE+' -A inet6 add ' + self.prefix + '::/64 dev ' + self.ifname, shell=True)

网络内的设备均有一个 bbbb:: 地址(例如,bbbb::17:d00:30:6fb6 和 bbbb::17:d00:30:76f6)。目的是让从 76f6 发送到 6fb6 的流量到达隧道,然后正确发送到 6fb6。

奇怪的是:采用上述配置,它只在某些时候起作用!

执行“route -A inet6”显示:

Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2a02:2c40:500:a006::/64        [::]                       Ue   256 0     0 ens33
bbbb::/64                      [::]                       U    1   3   290 tun0
bbbb::/64                      [::]                       U    256 0     0 tun0
fe80::/64                      [::]                       U    256 1    38 ens33
fe80::/64                      [::]                       U    256 0     0 tun0
[::]/0                         gateway                    UG   100 1     1 ens33
[::]/0                         [::]                       !n   -1  1 16599 lo
ip6-localhost/128              [::]                       Un   0   5882117 lo
2a02:2c40:500:a006::/128       [::]                       Un   0   4     3 lo
ubuntu/128                     [::]                       Un   0   1     0 lo
ubuntu/128                     [::]                       Un   0   3    82 lo
bbbb::/128                     [::]                       Un   0   3     5 lo
ubuntu/128                     [::]                       Un   0   4    57 lo
fe80::/128                     [::]                       Un   0   3     6 lo
fe80::/128                     [::]                       Un   0   1     0 lo
ubuntu/128                     [::]                       Un   0   1     0 lo
ubuntu/128                     [::]                       Un   0   1     0 lo
ubuntu/128                     [::]                       Un   0   3    33 lo
ip6-mcastprefix/8              [::]                       U    256 4   610 ens33
ip6-mcastprefix/8              [::]                       U    256 0     0 tun0
[::]/0                         [::]                       !n   -1  1 16600 lo

我的猜测是,有时从 76f6 发送到 6fb6 的流量会采用“2a02:2c40:500:a006::/64 [::] Ue 256 0 0 ens33”路由,有时会采用“bbbb::/64 [::] U 1 3 290 tun0”路由。

在设备发送到 bbbb 地址的所有情况下,数据包都应通过隧道注入 bbbb 网络。

有没有什么办法可以解决这个问题?这很奇怪,因为它并不是一直发生的。

编辑:

请求的信息:

ip -6 路由获取 bbbb::17:d00:30:6fb6

给出

bbbb::17:d00:30:6fb6 来自 :: dev tun0 src bbbb::1 metric 1 pref medium

ip 路由显示匹配 bbbb::17:d00:30:6fb6

什么也没给出。

嗯,你的第一条评论很有道理,所以我最初的假设是错误的。为了补充信息,我在隧道上添加了 Wireshark 的屏幕截图,它显示了在 6fb6 收到数据包和未收到数据包的情况下数据包相同(数据包

这似乎表明我错了。那么无法立即知道问题是什么——接收设备在某些情况下可能会掉线,而在其他情况下则不会掉线,但这很奇怪。

Wireshark 也给出了相同的结果。前 3 个数据包是第一次传输并到达目的地,后 3 个数据包(虽然相同)是第二次传输,但未到达! 在此处输入图片描述

相关内容