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
2
3
4
5
6
7
8
9
interface 'IPTV'
option proto 'dhcp'
option macaddr 'aa:bb:cc:dd:ee:ff'
option delegate '0'
option metric '20'
option hostname 'HOSTNAME'
option device 'lan1'
option sendopts '0x37:01792103060c0f1a1c2a33363a3b77'
option vendorid 'VENDORID'
  • 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。