我有客户端和服务器 ipv6 应用程序,每个应用程序都使用虚拟 TAP 接口和用户空间 Ipv6 堆栈。我用网桥连接两个 Tap 接口,并启用了 ipv6 转发,但我发现邻居发现在客户端和服务器之间不起作用,因为网桥(或 Linux)会减少 IPv6 标头中的跳数(跳数用户空间堆栈预计为 255)。
有没有办法在没有网桥的情况下连接tap接口,或者让邻居发现数据包不加修改地通过?
更新 ...
我认为跳数因 ip 转发而减少的原因是,我认为应该禁用它,实际上网桥应该在第 2 层处理转发。出于某种原因,网桥不想传递单播 ICMP6 消息。
我使用的是 Debian 9,基本设置是:
ip tuntap add dev tap0 mode tap user YOUR-USER-NAME
ip a a dev tap0 192.168.0.1/24
ip tuntap add dev tap1 mode tap user YOUR-USER-NAME
ip a a dev tap1 192.168.0.2/24
brctl addbr br0
brctl addif br0 tap0
brctl addif br0 tap1
我有一个连接到 tap0 的服务器应用程序和一个连接到 tap1 的客户端应用程序,我希望这些应用程序能够进行通信,以便测试用户空间 IP6 堆栈。当我运行命令“brctl showmacs br0”时,我得到:
port no mac addr is local? ageing timer
1 2e:5f:ae:db:71:b1 yes 0.00
1 2e:5f:ae:db:71:b1 yes 0.00
2 92:9f:e7:8f:8d:a4 yes 0.00
2 92:9f:e7:8f:8d:a4 yes 0.00
对于客户端和服务器 MAC 地址来说,这看起来是正确的,从接口 br0 上查看时,我还可以在 Wireshark 中看到单播数据包,只是由于某种原因这些数据包没有到达另一端。