关联内容:国内使用 openwrt 通过 IPoE 获取运营商 IPTV 机顶盒 IP 指北
距离上一次分享已经过去了两年半的时间,最近办的新宽带,正好也有送 IPTV 。同时客厅只有一根网线,我希望同时能够接入电视(看 IPTV )和路由器(作为 AP )。因此需求与上一篇不谋而合。
只不过最近路由器产品我已经全部切换到 RouterOS ,本文仅以 RouterOS 作为样例,其中绝大部分内容与上一篇文章内的 OpenWRT 相同,因此这里不再赘述,仅仅说明一些在 RouterOS 里不太一样的部分。
这部分可参考原文,内容完全一致。
下面内容以 RouterOS v7 为例。
/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 开始复制即可。
/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 地址与 RouterOS 本身分配的 IP 段相同即可,自行留意,不要分配其他设备已经使用的地址,同时配置 DNS 为 IPOE 接口分配的 DNS ,而不要使用互联网上的 DNS ,如果不清楚 IPOE 分配的 DNS 是什么,在上一步中获取到 IPOE 的 IP 后,通过如下命令可以查看:/ip/dhcp-client/print detail
这里有两种选择:
经过测试,我这里选择了第二种,原因是 mangle prerouting 可能会导致 RouterOS 的 fasttrack 失效,这在一些硬件配置不佳的设备上是致命的,会进一步导致包转发能力的下降(没错,就是我的设备)
这里分别介绍着两种方式的配置方法
/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 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
在 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"
}
完成上述步骤后,就实现在一根网线的情况下,将机顶盒的流量,全部流入专网,而其他流量,则正常流入互联网。
1
guiys 28 天前 via Android
支持折腾,支持分享。但这个方案和 vlan 单线复用相比,优势是啥?
|
2
xiaoke 28 天前
感谢分享,之前一直想弄找不到教程,最终买了俩交换机解决...
|
![]() |
3
M48A1 15 天前
感谢分享,最近想搞个 routeros 玩玩。
|