Решено маршрутизация / переадресация многоадресного туннеля gre gretap pmtu df mtu upnp dlna сетевой мост EoGRE Layer 2 udp - PullRequest
0 голосов
/ 18 марта 2020

Я потратил много времени на то, чтобы выяснить, как можно маршрутизировать пакеты UPNP udp через сеть и, таким образом, разрешать обнаружение SSDP. Кроме того, я хотел сделать мобильное устройство (ipad в LAN2 или лучше физическое на сайте LAN2) клиентом dhcp удаленной сети (LAN1) с сервером Upnp (DLNA) и маршрутизацией многоадресного трафика upnp / udp c между LAN1 и LAN2. Маршрутизатору 1 нужен только один сетевой интерфейс, но он не может быть беспроводным, поскольку его нельзя добавить к мосту, а маршрутизатору 2 нужны два сетевых интерфейса.

Для иллюстрации настройки:

+--------------------+     +-----------------------------+     +------------------------------+
|                    |     |                             |     |                              | 
| Server (uPNP, DLNA)|     |  Router1 LAN Bridge         |     |  Internet Router LAN1 (IR1)  |
| eth0: 192.168.0.99 | LAN1| eth0: manual                | LAN1| eth0: 192.168.0.1            |
|                    |-----| br0(eth0 gre): 192.168.0.5  |-----| Public Address from Provider |  
|                    |     | gre: gretap                 |     |                              |
+--------------------+     +-----------------------------+     +------------------------------+
                                          ^                                  ^              
                                          | GRETAP Tunnel                    | Internet     
                                          | (DHCP UDP Multicast)             | and VPN IR1<->IR2             
                                          v                                  v              
+--------------------+     +-----------------------------+     +------------------------------+
|                    |     |                             |     |                              |
|      Client Ipad   |     |  Router2 LAN Bridge         |     |  Internet Router LAN2 (IR2)  |
| wlan0: DHCP from   | LAN2| eth0: 192.168.1.5           | LAN2| eth0: 192.168.1.1            |
| IR1 (192.168.0.27) |-----| br0(gre wlan0): manual no ip|-----| Public Address from Provider |
| upnp discovery     |     | wlan0 AP mode, gre: gretap  |     |                              |
+--------------------+     +-----------------------------+     +------------------------------+

Таким образом, клиентское устройство является непосредственно клиентом сети LAN1, которая содержит сервер dlna / upnp. IR1 и IR2 настроены на VPN, так что устройство в LAN2 может пропинговать устройство в LAN1 и наоборот. Это также является обязательным условием, маршрутизатор 1 и маршрутизатор 2 должны «видеть» друг друга. Маршрутизаторы IR1 и IR2 настроены на автоматическое создание VPN между собой с использованием dynDNS.

Мне пришлось читать и решать проблемы pmtu, режим gre не может быть добавлен в tunnel et c. и не нашел руководство, которое охватывает все опытные вопросы. Router1 и Router2 - устройства оранжевого пи, работающие под управлением Debian с ядром Sunxi. Любой другой Linux будет достаточно. Окончательно сработала следующая настройка: обратите внимание, что значение mtu для интерфейсов gre должно быть выше (1600), чем для физического интерфейса mtu (1500), в противном случае полноразмерные пакеты не переносятся, но ping работает. На моих устройствах не требуется настройка iptables. Добавление wlan0 к мосту работает, только если wlan0 находится в режиме AP. Кроме того, параметры nopmtudis c и ignore-df при настройке туннеля gretap помогли заставить его работать.

Router1 (при условии, что eth0 настроен и подключен):

brctl addbr br0
brctl stp br0 disable
ip link add gre type gretap local 192.168.0.5 remote 192.168.1.5 ttl 255 nopmtudisc ignore-df
ip link set gre mtu 1600
ifconfig gre up
brctl addif br0 eth0 gre

Router2 ( при условии, что eth0 настроен и подключен, и настройка интерфейса wlan0 была выполнена с wpa_supplicant для режима AP без stati c IP):

brctl addbr br0
brctl stp br0 disable
ip link add gre type gretap local 192.168.1.5 remote 192.168.0.5 ttl 255 nopmtudisc ignore-df
ip link set gre mtu 1600
ifconfig gre up
brctl addif br0 wlan0 gre

ifconfig выход для Router1:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.5  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::7aee:eee2:46f2:b084  prefixlen 64  scopeid 0x20<link>
        ether 00:13:3b:12:09:98  txqueuelen 1000  (Ethernet)
        RX packets 205590  bytes 24124349 (23.0 MiB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 307562  bytes 111204971 (106.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:13:3b:12:09:98  txqueuelen 1000  (Ethernet)
        RX packets 348182  bytes 116051837 (110.6 MiB)
        RX errors 0  dropped 8  overruns 0  frame 0
        TX packets 383946  bytes 125552620 (119.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

gre: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1600
        inet6 fe80::44e0:1fff:fea6:666a  prefixlen 64  scopeid 0x20<link>
        ether 46:e0:1f:a6:66:6a  txqueuelen 1000  (Ethernet)
        RX packets 76384  bytes 14347638 (13.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 251492  bytes 96156235 (91.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

brctl show для маршрутизатора 1:

bridge name     bridge id               STP enabled     interfaces
br0             8000.00133b120998       no              eth0
                                                        gre

вывод ifconfig для маршрутизатора 2:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::1001:73ff:fe65:29ce  prefixlen 64  scopeid 0x20<link>
        ether 12:01:73:65:29:ce  txqueuelen 1000  (Ethernet)
        RX packets 119175  bytes 7447694 (7.1 MiB)
        RX errors 0  dropped 100514  overruns 0  frame 0
        TX packets 36  bytes 2712 (2.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.5  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::1:73ff:fe65:29ce  prefixlen 64  scopeid 0x20<link>
        ether 02:01:73:65:29:ce  txqueuelen 1000  (Ethernet)
        RX packets 306308  bytes 109331172 (104.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 87393  bytes 19167491 (18.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 25

gre: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1600
        inet6 fe80::f074:c5ff:feda:7253  prefixlen 64  scopeid 0x20<link>
        ether f2:74:c5:da:72:53  txqueuelen 1000  (Ethernet)
        RX packets 247772  bytes 97600212 (93.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 76670  bytes 13566153 (12.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::1001:73ff:fe65:29ce  prefixlen 64  scopeid 0x20<link>
        ether 12:01:73:65:29:ce  txqueuelen 1000  (Ethernet)
        RX packets 243215  bytes 18693273 (17.8 MiB)
        RX errors 0  dropped 374  overruns 0  frame 0
        TX packets 198582  bytes 100127106 (95.4 MiB)
        TX errors 0  dropped 50266 overruns 0  carrier 0  collisions 0

brctl show для маршрутизатора 2:

bridge name     bridge id               STP enabled     interfaces
br0             8000.1201736529ce       no              gre
                                                        wlan0

Я обнаружил, что IP4 Routing и загрузка модуля ядра br_netfilter не требуется. Как упоминалось ранее, я также много играл с iptables через gre, forwarding, пробовал pimd, quagga, ospf, upnp прокси и т. Д. c. и большинство из них имели только частичную функциональность, если работали вообще. Маршрутизация TCP - самая простая часть, upnp и multicast были сложными. Как уже говорилось, я использовал два оранжевых пи-устройства (одно с просто ethe rnet, а другое с ethe rnet и беспроводным сетевым интерфейсом), но Raspberry или любое другое устройство, способное работать с недавним Linux, должно работать. Хотя выходные данные ifconfig показывают конфигурации IPV6, я пробовал только IPV4.

Я надеюсь, что моя публикация поможет другим и позволит не тратить больше недели на ее работу.

...