|
本帖最后由 鲲翔 于 2017-11-16 20:48 编辑
http://www.jinghuasoft.com/smthview.jsp?board=DigiHome&id=583709
发信人: pheyx (), 信区: DigiHome
标 题: 北京联通光猫桥接下,IPTV和第三方App共存免切换网络的设置教程
发信站: 水木社区 (Fri Jun 17 22:03:43 2016), 站内
北京联通IPTV机顶盒破解后可以安装各种视频App,但在光猫桥接的情况下IPTV和App不能同时使用。本文通过设置多WAN的方式来解决这个问题。
原理:用mwan3在路由器上设置多wan,pppoe(连接到光猫lan1)和iptv dhcp(连接到光猫lan4),根据目的ipset来决定走哪个wan接口,通过一个脚本来侦听机顶盒所要连接的目标ip,并用ping来测试:如果在路由器上ping不通这个ip,就说明这个ip属于iptv的专网ip,并把它加入到名为iptv的ipset里,然后mwan3把这个set相关流量的出口都切换为iptv dhcp这个wan口,同时其他流量还是走pppoe。
实现步骤:
1.破解机顶盒并安装App(这个根据你的机顶盒的型号在网上找教程)。
2.光猫设为桥接模式。
3.需要一个刷成OpenWrt的路由器,且路由器交换芯片支持Vlan(检查方法:看Network菜单下有没有Switch的菜单项)。光猫lan1(Internet)接到路由器的wan口,把路由器的一个lan口设成单独的vlan,untagged模式,然后接到光猫的lan4口(IPTV口)。在路由器上新建一个wan,名称是iptv,物理接口选刚才新建的vlan接口,设为DHCP模式,防火墙区域设成wan。
4.安装所需的软件包:
- opkg update && opkg install mwan3 ipset igmpproxy
复制代码
5.创建名为iptv的set,在终端输入:
- mkdir /etc/ipsets
- ipset create iptv nethash
- ipset save iptv > /etc/ipsets/iptv.set
复制代码
创建恢复ipset的开机脚本/etc/init.d/ipset
- #!/bin/sh /etc/rc.common
- START=22
- start() {
- cat /etc/ipsets/*.set | ipset -exist restore
- }
复制代码
将该脚本设成可执行(chmod +x /etc/init.d/ipset),并设成开机启动:
/etc/init.d/ipset enable
6.配置mwan3,可以参考我的截图。注意需要先在/etc/config/network 里把所有wan接口的metric值设成不同的,即需要显式地加入option metric 'xx'(xx是数字)。这是mwan3所要求的。然后在/etc/hotplug.d/iface/16-mwancustom里的exit 0前加入:
7.修改/etc/firewall.user,加入以下几句,需要替换成你的机顶盒的mac。
- _ipt() {
- cmd="$(echo "$@" | sed 's|-A|-D|g;s|-I|-D|g')"
- while iptables $cmd &>/dev/null; do
- :
- done
- iptables $@
- }
- IPTV_MAC='11:22:33:44:55:66'
-
- #由于机顶盒虽然可以从路由器获取IP,网关,但它的dns
- #总是固定在2个联通的预设值,所以需要劫持机顶盒的dns请求到路由器的dns。
- _ipt -t nat -A PREROUTING -m mac --mac-source $IPTV_MAC -p udp --dport 53 -j REDIRECT --to-ports 53
-
- #我们需要把机顶盒发出的连接请求打到log里,配合我们的脚本。
- #由于仅仅记录state为NEW的包,并不频繁,并不会影响路由器性能。
- _ipt -t nat -I PREROUTING -m mac --mac-source $IPTV_MAC -m state --state NEW -j LOG --log-prefix "[iptv] "
复制代码
8.创建/opt/iptv.sh脚本。
---------------------------------------------------------------
- #!/bin/sh
- add_to_set(){
- local ip=$1
- local subnet=$ip/24
- ping -W1 -c1 $ip &> /dev/null && return
- if ! ipset -q test iptv $subnet; then
- ipset add iptv $subnet
- echo added $subnet to set iptv
- ipset save iptv > /etc/ipsets/iptv.set
- fi
- }
-
- logread -e "\[iptv\]" -f | \
- while read line; do
- ip=$(echo "$line" | sed -r 's|.*DST=([0-9.]+).*|\1|')
- echo requested $ip
- add_to_set $ip &
- done
复制代码
---------------------------------------------------------------
需要chmod +x /opt/iptv.sh
自动运行iptv.sh的开机脚本/etc/init.d/iptv:
-----------------------------------------------------------
- #!/bin/sh /etc/rc.common
-
- START=96
-
- SERVICE_USE_PID=1
- SERVICE_WRITE_PID=1
- SERVICE_DAEMONIZE=1
-
-
- start() {
- service_start /opt/iptv.sh
- }
-
- stop() {
- service_stop /opt/iptv.sh
- killall logread
- }
复制代码
---------------------------------------------------
同样需要chmod +x /etc/init.d/iptv && /etc/init.d/iptv enable
9.因为机顶盒处在NAT的后面,所以需要igmp proxy来转发组播流量到LAN,对于直播是必需的。
创建/etc/config/igmpproxy
------------------------------------------
- config igmpproxy
- option quickleave 1
-
- config phyint wan
- option network iptv
- option direction upstream
- list altnet 0.0.0.0/0
-
- config phyint lan
- option network lan
- option direction downstream
复制代码
------------------------------------------
在/etc/config/firewall里加入:
---------------------------------------
- config rule
- option src 'wan'
- option proto 'igmp'
- option target 'ACCEPT'
-
- config rule
- option src 'wan'
- option proto 'udp'
- option dest 'lan'
- option dest_ip '224.0.0.0/4'
- option target 'ACCEPT'
- option family 'ipv4'
复制代码
---------------------------------------
然后运行
/etc/init.d/network reload
/etc/init.d/firewall restart
/etc/init.d/igmpproxy start
mwan3
10.现在测试一下/opt/iptv.sh,在终端里运行之,打开机顶盒,在IPTV的界面里把它的菜单项都试一遍,同时查看iptv.sh的输出:
一般会有
requested x.x.x.x
added x.x.x.x/24 to set iptv
说明iptv.sh运行没问题。
遍历菜单项的时候,通常第一次IPTV会显示错误信息,这时按遥控器的返回键,然后再进入应该就可以了。
这样的话点播直播应该都没问题了。再试试你装的其他App,也应该可以了。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|