如果您对某种TLDR手册不感兴趣,请跳过此消息。
我们从一个什么都不做的场景开始。Map设备有一个网桥和两个接口,DHCP服务器,就是这样。只是为了确保在生产者和消费者设备上没有问题。
模式(点击)
配置
/interface bridge add arp=enabled fast-forward=no name= con - br protocol-mode=none add name=dhcp_pool0 ranges=192.168.0.10-192.168.0.20 /ip dhcp-server add address-pool=dhcp_pool0 disabled=no interface= con - br request -time=2m name=dhcp1 /interface bridge port add bridge= con - br hw=no interface=ether1 add bridge= con - br hw=no interface=ether2 /ip address add address=192.168.0.1/24 interface= con - br network=192.168.0.0 /ip dhcp-server network add address=192.168.0.0/24 dns-none=yes网关= 192.168.0.1子网掩码= 24
下一步,我们将以太网端口移动到不同的桥中(可单击)。
这就是问题开始的地方。设备可以相互ping通,因为另一个网络通过默认网关可用。我可以在电脑上打开NAS管理页面。但是笔记本电脑无法发现NAS作为DLNA服务器。
/interface bridge add fast-forward=no name= con - br protocol-mode=none add fast-forward=no name=Prod-Br protocol-mode=none /ip pool add name=dhcp_pool0 ranges=192.168.0.10-192.168.0.20 add name=dhcp_pool2 ranges=192.168.1.10-192.168.1.20 /ip dhcp-server add address-pool=dhcp_pool0 disabled=no interface= con - br lease-time=2m name=dhcp1 add address-pool=dhcp_pool2 disabled=no interface=Prod-Br lease-time=2m name=dhcp2 /interface bridge port add bridge= con - br hw=no interface=ether1 addbridge=Prod-Br hw=no interface=ether2 /ip address add address=192.168.0.1/24 interface= con - br network=192.168.0.0 add address=192.168.1.1/24 interface=Prod-Br network=192.168.1.0 /ip dhcp-server network add address=192.168.0.0/24 dns-none=yes gateway=192.168.0.1 netmask=24 add address=192.168.1.0/24 dns-none=yes gateway=192.168.1.1 netmask=24
如果我没理解错的话,这个发现是SSDP的功劳。报文总是发送到UDP端口1900,但源端口可能不同。有许多帖子说SSDP数据包的TTL=1,因此这些数据包不会转发到任何地方。好吧,我想我们可以用一个轧布规则来解决这个问题:
/ip firewall mangle add action=change-ttl chain=prerouting disabled=yes dst-address-type=multicast \ log-prefix=TTL+ new-ttl=set:64 passthrough=yes port=1900 protocol=udp
请注意,根据规范,数据包必须以TTL=4发送,尽管有些设备忽略了这一点。我不确定更高的TTL是否会导致问题,至少我的设置不会。
然后我们需要配置PIM以确保在网桥之间路由组播数据包。困难的部分来了。在PIM示例中,它说在PIM接口中添加桥接器并配置静态会合点(RP)就足够了。我们不需要添加任何替代地址,因为设备可以很容易地相互连接。从维基:
您可能还需要进行配置alternative-subnets在上游接口-如果多播发送地址是在一个IP子网,不能从本地路由器直接访问
建议RP位于离Producer更近的位置,因为流量从Media服务器向下发送到订阅了某些组的所有设备。在我的例子中,我使用
Br-Prod 192.168.1.1RP。我不确定是否需要定义Bsr,我还没有理解它的目的。
/routing pim bsr-candidates add interface=Cons-Br /routing pim interface add interface=Cons-Br /routing pim rp add interface=Prod-Br /routing pim rp-candidates add interface= 192.168.1.1 /routing pim
在生产者上添加静态路由时提到的另一件事。DLNA使用239.255.255.250组。否则,我们可以指定所有默认的多播组224.0.0.0/4,所以我通过连接Nas的网桥的IP地址添加了到该网络的路由。命令在Nas上执行:
路由添加-net 224.0.0.0 netmask 240.0.0.0 gw 192.168.1.1 dev eth0
添加新路由。请注意,该路由在重启之前一直存在。检查
这个页面以了解如何使用autorun脚本永久地执行此操作。
route -n内核IP路由表目的网关通用掩码标志度量值Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 0 lo 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 qvs0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 224.0.0.0 192.168.1.1 240.0.0.0 UG 0 0 0 eth0
现在我需要确保NAS和笔记本电脑都在向路由器发送SSDP数据包。添加以下规则。第一个显示SSDP数据包到达网桥接口,第二个显示网桥之间转发的数据包。
/ip firewall filter add action=passthrough chain=input st-address-type=multicast st-port=1900 \ log=yes log-prefix=in-SSDP协议=udp添加action=passthrough chain=forward st-address-type=multicast log=yes \ log-prefix=fw-SSDP端口=1900协议=udp
到目前为止一切顺利,计数器在变化,日志显示数据包到达和转发。我可以看到从笔记本电脑发送到两个网桥的SSDP。笔记本电脑的尺寸较小,Nas的尺寸较大(可点击)。
PIM结果如下,在我看来是有效的。
/routing pim> bsr print区域类型=active bsr-address=192.168.0.1 scope-zone=224.0.0.0/4 bsr-priority=1 local-address=192.168.0.1 local-priority=1 state=elected timeout=31s区域类型=configured bsr-address=192.168.0.1 scope-zone=224.0.0.0/4 bsr-priority=1 local-address=192.168.0.1 local-priority=1 state=init /routing pim> mrib print标志:X - disabled, I - inactive, D - dynamic #目的网关METRIC INTERFACE 0 D 192.168.0.0/24 0.0.0.0 0 con - br 1 D 192.168.1.0/24 0.0.0.0 0 Prod-Br /routing pim> mfc print GROUP源RP 239.192.152.143 192.168.1.18 192.168.1.1 239.255.255.250 192.168.0.18 192.168.1.1 239.255.255.250 192.168.1.18 192.168.1.1 /routing pim> join print标志:RP - (*,*,RP), WC - (*,G), SG - (S,G), SG_rpt - (S,G) GROUP源RP WC 224.0.0.0 192.168.1.1 192.168.1.1 SG 239.192.168.2.143 0.0.0.0 192.168.1.1 SG_rpt 239.192.152.143 192.168.1.18 192.168.1.1 SG_rpt 239.255.255.250 192.168.0.18 192.168.1.1 SG_rpt 239.255.255.250 192.168.1.18 192.168.1.1 /routing pim> igmp-group print标志:v1 - IGMPv1, v2 - IGMPv2, v3 - IGMPv3, I - include, E - exclude, F - forward, D - not forward接口组源超时v2E Cons-Br 224.0.0.2 0.0.0.0 3m44s v2E Cons-Br 224.0.0.13 0.0.0.0 3m45s v2E Cons-Br 224.0.0.2 0.0.0.0 3m45s v2E Prod-Br 224.0.0.22 0.0.0.0 3m55s v2E Prod-Br 224.0.0.22 0.0.0.0 3m48s v2E Prod-Br 239.255.255.250 0.0.0.0 3m48s
但整个安排似乎并不奏效。设备嗅探工具来自
开发人员工具的UPnP技术让我可以查看我的笔记本电脑看到了哪些信息。使用ssdp的唯一合理的NOTIFY消息:来自Nas的alive消息(尽管这种情况非常罕见)。因此,似乎有什么东西在起作用
“文档。问题是数据包到达时带有NT头,这意味着是NAS通知网络他的存在。对M-Search的响应应该已经到达,并且在NOTIFY包内带有ST头。
这个问题使我得出结论,其他网桥没有收到一些IGMP数据包。首先,就像SSDP TTL一样,添加可以增加IGMP流量TTL的mangle规则。
Chain =prerouting action=change-ttl new-ttl=set:64 passthrough=yes protocol=igmp log=no log-prefix=""
在那之后,一切都开始正常运转。