问题来源于学校里的IPTV使用的是多播技术,似乎现在用Linux+netfilter做的NAT不支持对multicast,所以内网的机器没法看IPTV了。
15号,Lazy@PKU提出这个问题,我查了一下文档,想到如下的解决方法
更具体的说,是不是要支持NAT下的multicast?
我觉得其实这跟netfilter没什么关系,只要netfilter不把multicast的包drop掉
问题归结到最后其实就是对multicast route 的管理
有两类方法,一个是应用层的deamon 比如:Zebra, mrouted, or pimd
我详细讲讲另一个就是用Linux kernel自身的功能
1。保证kernel支持IGMP协议,
2. 设置multicast的路由,比如内网接口是eth1
route add -net 224.0.0.0/8 eth1
3.打开forward,当然如果是NAT的话自然就打开了
echo 1 > /proc/sys/net/ipv4/ip_forward
这样,我觉得就应该行了:)
为什么可以呢:a.内网发送的加入组播的igmp包通过NAT的MASQUERADE发送到外网上一级
的router,等于是NAT主机加入了组播
b.发往组播地址(224.0.0.0/8)的包被NAT主机forwarding,根据route table 发往内网网
卡eth1,内网机器最终收到
我没有环境测试,大家有空试一下吧,:)
相关文档:http://lartc.org/lartc.html#LARTC.MULTICAST
【 在 lazy (draughts) 的大作中提到: 】
: 谁没事弄弄netfilter架构做透明网关对multicast
: 的支持把,否则看IPTV很麻烦。一直没精神折腾这个