gam2046:
关联内容:国内使用 openwrt 通过 IPoE 获取运营商 IPTV 机顶盒 IP 指北
距离上一次分享已经过去了两年半的时间,最近办的新宽带,正好也有送 IPTV 。同时客厅只有一根网线,我希望同时能够接入电视(看 IPTV )和路由器(作为 AP )。因此需求与上一篇不谋而合。
只不过最近路由器产品我已经全部切换到 RouterOS ,本文仅以 RouterOS 作为样例,其中绝大部分内容与上一篇文章内的 OpenWRT 相同,因此这里不再赘述,仅仅说明一些在 RouterOS 里不太一样的部分。
获取 IPOE 相关信息
这部分可参考原文,内容完全一致。
RouterOS 配置
下面内容以 RouterOS v7 为例。
添加 IPOE 客户端
添加 IPOE Option 参数
/ip dhcp-client option
add code=60 name=VendorClassIdentifier value="0x12345678"
add code=55 name=ParameterRequestList value=0x12345678
add code=61 name=iptv_mac_addr value=0x1234567890aa
add code=12 name=iptv_hostname value=0x12345678
以 Option 55 为例,在 wireshark 里,显示的原始数据大概是这样的:373012345678
,其中第一个字节 55 代表 option 55 ,即 55 的十六进制表达 0x37 ,而第二个字节 30 代表这个 option 字段的长度,因此在 RouterOS 里添加这些 Option 项目时,头两个字节是需要跳过的,这会由 RouterOS 自行填充,直接从后面的 12345678 开始复制即可。
添加 IPOE ( DHCP )客户端
/ip dhcp-client option
add add-default-route=no comment=iptv default-route-tables=main dhcp-options=\
iptv_hostname,clientid,VendorClassIdentifier,ParameterRequestList interface=\
ether3
我这里因为直接修改了 interface 的 mac ,其与机顶盒一致,因此直接使用了 RouterOS 提供的 clientid option ,如果你不想/不能修改接口的 mac ,可以自行添加 option 61 指定 DHCP 时,发送的 MAC ,保持与机顶盒一致。同时 interface 需要修改为插入光猫 IPTV 口的接口。
此时,这个 dhcp client 应当已经能够获得机顶盒内网的 IP
单线复用
此时的网络结构如下
Optical modem -> RouterOS -> br-lan -> 机顶盒
br-lan -> 路由器
eth1 -> 互联网
eth2 -> IPTV 内网
机顶盒与路由器公用同一根网线,机顶盒需要能够访问 IPTV 的内网,而路由器需要能够访问互联网。因此需要配置一些路由规则。(在上一步的 IPOE 配置后,特地没有允许 RouterOS 添加默认路由)
固定机顶盒 IP
在机顶盒中,可以直接配置静态 IP ,IP 地址与 RouterOS 本身分配的 IP 段相同即可,自行留意,不要分配其他设备已经使用的地址,同时配置 DNS 为 IPOE 接口分配的 DNS ,而不要使用互联网上的 DNS ,如果不清楚 IPOE 分配的 DNS 是什么,在上一步中获取到 IPOE 的 IP 后,通过如下命令可以查看:/ip/dhcp-client/print detail
配置机顶盒出口路由
这里有两种选择:
- 使用 mangle 的 prerouting
- 使用 Routing -> Rules
经过测试,我这里选择了第二种,原因是 mangle prerouting 可能会导致 RouterOS 的 fasttrack 失效,这在一些硬件配置不佳的设备上是致命的,会进一步导致包转发能力的下降(没错,就是我的设备)
这里分别介绍着两种方式的配置方法
Magle Prerouting
/routing table
add disabled=no fib name=nat-iptv
# 下面的 IP 地址,修改为机顶盒固定的 IP
/ip firewall mangle
add action=mark-routing chain=prerouting comment=IPTV new-routing-mark=nat-iptv src-address-list=192.168.127.67
# 下面的网关地址需要修改为 IPOE 获取到的网关地址(后有脚本可自动更新)
/ip route
add dst-address=0.0.0.0/0 gateway=10.235.172.1 routing-table=nat-iptv
Routing Rules
/routing table
add disabled=no fib name=nat-iptv
# 下面的 IP 地址,修改为机顶盒固定的 IP
/routing rule
add action=lookup-only-in-table disabled=no src-address=192.168.127.67/32 table=nat-iptv
/ip route
add dst-address=0.0.0.0/0 gateway=10.235.172.1 routing-table=nat-iptv
IPTV 路由表网关自动更新
在 WinBox 里,通过 IP->DHCP Client->双击之前创建的用户 IPOE 的客户端->Advanced 选项卡->Script 文本框里输入:
:log info "DHCP script triggered. Gateway: $"gateway-address""
:local rTable "nat-iptv"
:local oldRoutes [/ip route find routing-table=$rTable dst-address=0.0.0.0/0]
:foreach r in=$oldRoutes do={
/ip route remove $r
}
:if ($bound=1) do={
/ip route add dst-address=0.0.0.0/0 gateway=$"gateway-address" routing-table=$rTable comment="Auto via IPTV"
}
完成上述步骤后,就实现在一根网线的情况下,将机顶盒的流量,全部流入专网,而其他流量,则正常流入互联网。