Перенаправить многоадресный пакет IP6 на другой интерфейс

Я работаю над реализацией многоадресной рассылки для contiki. У меня есть пара виртуальных машин Ubuntu на NAT и интерфейс eth0.

К одной из этих виртуальных машин подключен пограничный маршрутизатор Contiki (zigduino), который создает свой собственный интерфейс tun0. (см. также http://anrg.usc.edu/contiki/index.php/RPL_Border_Router < / а>)

Одна из виртуальных машин выполняет многоадресную рассылку пакетов udp на ff1e ::. Я вижу на wirehark, что каждая виртуальная машина получает этот многоадресный пакет. Интерфейс tun0 моего пограничного маршрутизатора никогда не видит этот пакет udp. Я хотел бы пересылать все многоадресные пакеты, полученные виртуальной машиной, подключенной к пограничному маршрутизатору, с интерфейса eth0 на интерфейс tun0, тем самым позволяя моему пограничному маршрутизатору видеть пакет и внедрять его в свою сеть.

Как я могу это сделать в Ubuntu? Я как бы застрял, пытался добавить маршруты, но не работает.

Приложение: Мой 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.

Однако, когда виртуальная машина публикует, скажем, ff1e: 101: a :: 4, мой интерфейс eth0 на bbbb :: 2 обнаруживает это, но все равно не пересылает его на 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 

person Community    schedule 31.03.2015    source источник


Ответы (1)


Я бы предпочел написать sudo ip -6 route add ff1e::/64 via fe80::1 dev eth0, что означает, что все пакеты, полученные на eth0 в пункте назначения для ff1e ::, идут по адресу fe80 :: 1. Но не забудьте включить переадресацию IP в Linux с помощью sudo sysctl -w net.ipv6.conf.all.forwarding=1.

Кроме того, я предполагаю, что если вы хотите внедрить этот многоадресный udp-пакет в сеть 6LoWPAN, вам нужно активировать многоадресную пересылку с помощью UIP_CONF_IPV6_MULTICAST в своем rpl-border-router и выбрать один из механизмов многоадресной рассылки с UIP_MCAST6_CONF_ENGINE.

ОБНОВИТЬ:

Тогда вы можете попробовать что-нибудь вроде этого:

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

Полное объяснение можно найти здесь.

person Darko P.    schedule 31.03.2015
comment
Спасибо. Однако все еще не работает. Я проверил параметры и могу выполнять многоадресную передачу в пределах 6lowpan, так что я думаю, что это нормально. Я обновил свой основной пост дополнительной информацией - person ; 01.04.2015
comment
Хорошо, тогда хорошие вещи. Я обновил свой пост одинаково, думаю, это может вам помочь в дальнейшем. - person Darko P.; 01.04.2015
comment
Хммм, все еще не работает. Я добавил свои таблицы в основной пост. Чтобы уточнить, tun0 не видит многоадресных пакетов - person ; 01.04.2015
comment
Возможно, это как-то связано с типом интерфейса на хосте. Например, мне удалось перенаправить многоадресные пакеты RS от узла к машине с виртуальной машиной ubuntu через пограничный маршрутизатор в прозрачном режиме и подключиться через интерфейс моста (eth0 ‹-› br0), а не через туннель. Не знаю, имеет ли это значение здесь. - person Darko P.; 01.04.2015
comment
Вы имеете в виду интерфейс tun0 или eth0? Приведенные выше таблицы маршрутизации звучат нормально? Я просмотрел вашу ссылку и, кажется, понял, в чем может быть проблема, но не могу ее решить. - person ; 01.04.2015
comment
Я имею в виду, что tun0 может быть интерфейсом tap0. Мостовое соединение с интерфейсом br0 и eth0 с тапом вместо tun. Отвод находится на более низком уровне и работает с канальным уровнем. - person Darko P.; 01.04.2015
comment
Вы можете взглянуть на проект 6lbr здесь, чтобы получить более гибкую границу - роутер. - person Darko P.; 01.04.2015
comment
К сожалению, я не могу использовать другой маршрутизатор и не знаю, как сделать то, что вы предлагаете. Однако я обнаружил, что мой туннельный интерфейс даже не получает многоадресные эхо-запросы. Итак, на виртуальной машине с tun0 и eth0 выполнение ping6 ff1e :: 1 показывает пакеты ICMP только для eth0! Это важно? - person ; 01.04.2015