Я потратил много времени на то, чтобы выяснить, как можно маршрутизировать пакеты 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.
Я надеюсь, что моя публикация поможет другим и позволит не тратить больше недели на ее работу.