Skip to main content

IPTV 折腾记录

· 3 min read

为了防止后面又需要折腾所以记录一下。

参考:国内使用 openwrt 通过 IPoE 获取运营商 IPTV 机顶盒 IP 指北

配置 VLAN 单线复用

我这为了方便访问光猫,openwrt 上直接加了个 modem 接口用来 DHCP 光猫。

/etc/config/network

config interface 'modem'
option proto 'dhcp'
option device 'wan'
option defaultroute '0'
option delegate '0'

config route
option interface 'modem'
option target '192.168.1.1/24'
option gateway '192.168.1.1'

记得在防火墙设置里把 modem 加到 wan zone 也就是要 masquerade。

访问光猫管理页面,网络 - 宽带设置 - 网络连接

配置连接 2_Other_B_VID_45

  • 封装类型:PPPoE
  • 连接模式:桥接
  • 业务类型:其它
  • IP模式:IPv4
  • MTU:1500
  • 组播VLAN:50
  • 启用VLAN:已启用
  • VLAN ID:45
  • 802.1P:5
  • 组播上行通道:未启用

端口绑定应该可以不勾选。DHCP 也不勾(我是在INTERNET业务开了DHCP服务)。

然后来到 网络 - 宽带设置 - VLAN绑定

根据 关于光猫中端口绑定和 vlan 绑定的疑惑 的说法,VLAN绑定直接理解为 Trunk 口允许带绑定好的 TAG 数据通过即可。

所以直接添加一条用户侧端口千兆口1(和INTERNET共用),用户侧VLAN 45,绑定WAN连接名称 2_Other_B_VID_45的条目即可。

来到 openwrt 路由器设置,Network - Interfaces,添加一个新 device:

config device
option type '8021q'
option ifname 'wan'
option vid '45'
option name 'wan.45'

获取 IPoE 参数

机顶盒型号:UNT400B,反编译系统设置 apk 发现管理员密码是写死的 10000.

WireShark 抓取机顶盒数据包,找到 DHCP Discovery 的请求

Dynamic Host Configuration Protocol (Discover)

重点看这几项:

  • Client MAC address
  • Option: (60) Vendor class identifier
  • Option: (12) Host Name
  • Option: (55) Parameter Request List

修改 /etc/config/network 添加 IPTV 接口和路由。注意 WireShark 里的 hex 包含 DHCP 协议的 field 头,要去掉。

config interface 'iptv'
option proto 'dhcp'
option macaddr '' # !!!
option delegate '0'
option metric '20'
option hostname 'android-' # !!!
option device 'wan.45'
option sendopts '0x37:' # !!!
option vendorid '00001f39' # !!!
option defaultroute '0'

config route
option interface 'iptv'
option target '183.59.0.0/16'

config route
option interface 'iptv'
option target '125.88.0.0/16'

然后修改 /lib/netifd/proto/dhcp.sh

找到此行:

${vendorid:+-V "$vendorid"} \

修改为:

${vendorid:+-V "" "-x 0x3c:$vendorid"} \

此时应该可以拿到 IP 地址。现在配置接口的防火墙设置:

/etc/config/firewall

config zone
option name 'iptv'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
list network 'iptv'

config forwarding
option src 'iptv'
option dest 'lan'

config forwarding
option src 'lan'
option dest 'iptv'

也即 lan zone 发往 IPTV 接口的包做 NAT。为了让路由器上的 udpxy 正常工作,这里 input 也设置成了 ACCEPT,有一定安全风险。

igmpproxy 会自动设置放行规则,所以不用自己配置了。

配置 IGMP 组播

安装 igmpproxy

配置 /etc/config/igmpproxy

config igmpproxy
option quickleave 1
option verbose 3

config phyint
option network iptv
option zone iptv
option direction upstream
list altnet 0.0.0.0/0

config phyint
option network lan
option zone lan
option direction downstream

安装 udpxy

配置 /etc/config/udpxy

config udpxy
option disabled '0'
option respawn '1'
option status '1'
option port '4022'
option bind '192.168.50.1'
option source 'wan.45'