【问题标题】:Forward multicast IP6 packet to another interface将多播 IP6 数据包转发到另一个接口
【发布时间】: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 

【问题讨论】:

    标签: multicast contiki


    【解决方案1】:

    我宁愿写sudo ip -6 route add ff1e::/64 via fe80::1 dev eth0,这意味着在目的地的 eth0 上接收到的每个数据包都发送到 ff1e:: 到地址 fe80::1。但不要忘记在 Linux 中使用sudo sysctl -w net.ipv6.conf.all.forwarding=1 启用 IP 转发。

    此外,我想如果您想将此多播 udp 数据包注入 6LoWPAN 网络,您必须在 rpl-border-router 中使用 UIP_CONF_IPV6_MULTICAST 激活多播转发,并选择带有 UIP_MCAST6_CONF_ENGINE 的多播引擎之一。

    更新:

    那你可以试试这样的:

    ip -6 route add ff1e::/64 dev tun0 table local

    完整的解释可以在here找到。

    【讨论】:

    • 谢谢。但是仍然不起作用。我已经检查了参数并且可以在 6lowpan 内进行多播,所以我认为这没问题。我已经用其他信息更新了我的主要帖子
    • 好吧,那是好事。我同样更新了我的帖子,我认为它可以进一步帮助您。
    • 嗯,似乎仍然无法正常工作。我已将我的表格添加到主帖中。澄清一下,tun0 没有看到多播数据包
    • 这可能与主机上的接口类型有关。例如,我设法通过透明模式下的边界路由器将 RS 多播数据包从节点转发到 VM ubuntu 机器,并通过桥接接口 (eth0 br0) 而不是隧道连接。不知道这里有没有它的重要性。
    • 你是说tun0接口还是eth0?上面的路由表听起来不错吗?我浏览了您的链接,我想我知道问题可能是什么,但无法解决。
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 2013-10-18
    • 2019-08-31
    • 1970-01-01
    • 2015-01-22
    • 2012-05-03
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多