V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gam2046
V2EX  ›  路由器

国内使用 RouterOS 通过 IPoE 获取运营商 IPTV 机顶盒 IP 指北

  •  
  •   gam2046 · 28 天前 · 716 次点击

    关联内容:国内使用 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

    配置机顶盒出口路由

    这里有两种选择:

    1. 使用 mangle 的 prerouting
    2. 使用 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"
    }
    
    

    完成上述步骤后,就实现在一根网线的情况下,将机顶盒的流量,全部流入专网,而其他流量,则正常流入互联网。

    guiys
        1
    guiys  
       28 天前 via Android
    支持折腾,支持分享。但这个方案和 vlan 单线复用相比,优势是啥?
    xiaoke
        2
    xiaoke  
       28 天前
    感谢分享,之前一直想弄找不到教程,最终买了俩交换机解决...
    M48A1
        3
    M48A1  
       15 天前
    感谢分享,最近想搞个 routeros 玩玩。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2340 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:59 · PVG 23:59 · LAX 08:59 · JFK 11:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.