【发布时间】:2015-06-05 00:11:47
【问题描述】:
我正在为 contiki 实现多播。 我在 NAT 和 eth0 接口上有几个 Ubuntu VM。
其中一个虚拟机连接了一个 Contiki 边界路由器(一个 zigduino),它有自己的接口 tun0。 (另见http://anrg.usc.edu/contiki/index.php/RPL_Border_Router)
其中一个 VM 将 udp 数据包多播到 ff1e:: 。我可以在wireshark 上看到每个VM 都会收到这个多播数据包。我的边界路由器 tun0 接口永远不会看到这个 udp 数据包。我想将连接到边界路由器的虚拟机收到的所有多播数据包从 eth0 接口转发到 tun0 接口,从而允许我的边界路由器看到数据包并将其注入他的网络。
如何在 Ubuntu 中做到这一点?我有点卡住了,尝试添加路线但不起作用。
附录: 我的带有路由器的 vm 的 ifconfig:
eth0 Link encap:Ethernet HWaddr 00:50:56:24:dd:45
inet addr:192.168.59.131 Bcast:192.168.59.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe24:dd45/64 Scope:Link
inet6 addr: bbbb::2/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:40205 errors:0 dropped:0 overruns:0 frame:0
TX packets:25436 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:25834566 (25.8 MB) TX bytes:4091267 (4.0 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:734 errors:0 dropped:0 overruns:0 frame:0
TX packets:734 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:51481 (51.4 KB) TX bytes:51481 (51.4 KB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.1.1 P-t-P:127.0.1.1 Mask:255.255.255.255
inet6 addr: fe80::1/64 Scope:Link
inet6 addr: aaaa::1/64 Scope:Global
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:586 (586.0 B) TX bytes:1046 (1.0 KB)
这是针对 IPv6 的! 我试过这样的事情:
sudo ip -6 route add ff1e::/64 via fe80::1 dev tun0
没用。
编辑:
我尝试了以下建议。 我的路由现在看起来像这样:
sudo ip -6 route
aaaa::/64 dev tun0 proto kernel metric 256
aa00::/8 via bbbb::2 dev eth0 metric 1024
bbbb::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev tun0 proto kernel metric 256
ff1e::/64 via fe80::1 dev eth0 metric 1024
请注意,第二条路由是我的虚拟机(地址为 bbbb::3、bbbb::4、...)用来联系网络中我的节点(地址为 aaaa::11 :22ff:fe33:4402) 这有效。节点连接到 bbbb::2 VM。
但是,当 VM 发布到 ff1e:101:a::4 时,我在 bbbb::2 上的 eth0 接口会检测到这一点,但仍不会将其转发到 tun0。 Tun0 有一个 aaaa::1/64 全局地址,但“sudo ip -6 route add ff1e::/64 via aaaa::1 dev eth0”命令给出“RTNETLINK 答案:没有到主机的路由”。尝试添加完整的 IPv6 多播地址(例如“sudo ip -6 route add ff1e:101:a::4/128 via fe80::1 dev eth0”)也不会产生任何结果,但会添加路由。
编辑编辑:在第二个建议之后添加表格:
looci@looci:~$ sudo ip -6 route add ff1e::/64 dev tun0 table local
looci@looci:~$ ip -6 route
aaaa::/64 dev tun0 proto kernel metric 256
aa00::/8 via bbbb::2 dev eth0 metric 1024
bbbb::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev tun0 proto kernel metric 256
ff1e::/64 via fe80::1 dev eth0 metric 1024
ff1e:101:a::4 via fe80::1 dev eth0 metric 1024
looci@looci:~$ ip -6 route show table local
local ::1 via :: dev lo proto none metric 0
local aaaa:: via :: dev lo proto none metric 0
local aaaa::1 via :: dev lo proto none metric 0
local bbbb:: via :: dev lo proto none metric 0
local bbbb::2 via :: dev lo proto none metric 0
local fe80:: via :: dev lo proto none metric 0
local fe80:: via :: dev lo proto none metric 0
local fe80::1 via :: dev lo proto none metric 0
local fe80::250:56ff:fe24:dd45 via :: dev lo proto none metric 0
ff1e::/64 dev tun0 metric 1024
ff00::/8 dev eth0 metric 256
ff00::/8 dev tun0 metric 256
looci@looci:~$ ip -6 route show table main
aaaa::/64 dev tun0 proto kernel metric 256
aa00::/8 via bbbb::2 dev eth0 metric 1024
bbbb::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev tun0 proto kernel metric 256
ff1e::/64 via fe80::1 dev eth0 metric 1024
ff1e:101:a::4 via fe80::1 dev eth0 metric 1024
【问题讨论】: