IPoE 获取 IPTV 机顶盒 IP 地址
由于运营商提供的 IPTV 网络不能够访问外网,而连通外网后看 IPTV 则需要占用公网带宽。在此背景下,让 Openwrt 替代机顶盒,直接通过 IPoE 认证,从而直接获得机顶盒私有网络 IP ,能够在路由上进行分流。
本文不包含什么
- 本文不包含手把手的教学,纯新手向读者可能无法通过本文获得足够的指引
- 本文不包含机顶盒内容的破解
- 本文不包含具体策略路由的指引
- 本文不包含 openwrt 、Linux 的使用指引
本文包含什么
- 本文仅包含,如何让 OpenWRT 通过运营商的 IPoE 认证的关键步骤和注意事项
建议了解的前置知识
- 了解简单的 Linux 命令行,能够通过命令行编辑文件
- 具有抓包的能力
- 使用过 wireshark 或 tcpdump
正文
获取机顶盒正常登录的抓包信息
方法包括但不限于带有端口镜像功能的交换机、tcpdump 等等,此处各显神通,不再赘述。
获取 IPoE 的关键信息
此处以 wireshark 举例
Wireshark 过滤条件可设置为 dhcp
找到 DHCP Discovery 的请求
打开抓包信息后,一般可获得下列信息
主要需要设置划线的几项
Openwrt 配置
创建接口
- 创建一个新的接口
- 在接口使用的设备中选择你实际接入的网口
- 输入一个接口标识,如 IPTV
- 保存
- 此处不设置过多参数
- 所有参数均通过修改配置文件实现
- 因部分参数无法通过 GUI 修改,故无论如何最终都要修改配置文件
配置接口
ssh 到 openwrt ,修改文件/etc/config/network
,找到上一步创建接口的相关配置项,内容如下
1 | interface 'IPTV' |
aa:bb:cc:dd:ee:ff 修改为你机顶盒的 MAC 地址 也就是上图抓包中显示的 Client MAC address
HOSTNAME 修改为上图抓包中显示的 option 12 内容,形如这样 00123456789AABBCCDDEEFF
VENDORID 为上图中 option 60 的内容,如果此内容包含非 ASCII 字符,需要在 Wireshark 中以原始数据查看,并粘贴在此处。
如果显示为这样,则需要将显示为设置成原始数据
并将这个值填入配置文件中
如果写入的是原始数据格式,则需要额外进行后面提到的额外操作
0x37:01792103060c0f1a1c2a33363a3b77 这一行对应抓包图中 option 55 ,其中 0x37 即为 55 的 16 进制表述
- 一般来说填入这几项数据就可以正常获取到 IP ,如果不能正常获取,请对比抓包数据中的 option 数据,在配置文件中参考这一行数据的格式,分别填入其他 option 数据
上述所有配置项,如果不存在则手动直接输入,如果已存在则修改即可
修改完毕后,保存文件,重启接口,即可获取到 IP
关于 Option 60 填写原始数据( hex string )的额外操作
如果 option 60 ,即 Vendor Class 填入的是 ASCII 字符,则不需要进行此部分操作。
- 修改文件:
/lib/netifd/proto/dhcp.sh
- 找到此行:
${vendorid:+-V "$vendorid"} \
- 修改为:
${vendorid:+-V "" "-x 0x3c:$vendorid"}
保存文件,重启端口即可。
其他一些建议
如果在操作过程中,使用无法正常获取到 IP ,可以在 openwrt 中执行tcpdump -i lan1 port 67 or port 68 -vvv
(其中 lan1 为实际网口名)用于辅助对比 wireshark 中的数据,查看是否缺少了某些 option。