V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sayoll
V2EX  ›  宽带症候群

028 用了快一年的 NAT4 电信还是转网到了移动

  •  
  •   sayoll · 10 小时 51 分钟前 · 623 次点击

    最近把用了 10 年的电信换为了移动,光猫改为了桥接,OpenWrt 拨号。有无大佬知道如何实现 单线复用 & 双线 IPTV

    尝试过以下配置,但仍无法播放:

    组播地址来源:四川移动组播地址

    OpenWrt 配置

    Wan 口配置

    config interface 'wan'
    	option proto 'pppoe'
    	option device 'eth2.101'
    	option username 'xxxxxx'
    	option password 'xxxxxx'
    	option ipv6 'auto'
    

    IPTV 口配置

    config interface 'IPTV'
    	option proto 'dhcp'
    	option device 'eth2.102'
    

    其他 VLAN (ID: 102)

    config device
    	option type '8021q'
    	option ifname 'eth2'
    	option vid '102'
    	option name 'eth2.102'
    

    上网 VLAN (ID: 101)

    config device
    	option type '8021q'
    	option ifname 'eth2'
    	option vid '101'
    	option name 'eth2.101'
    

    omcproxy 配置

    • 上行链路: IPTV
    • 下行链路: LAN

    防火墙 配置

    config rule
    	option src 'iptv'
    	option name 'Allow-IGMP-IPTV'
    	list proto 'icmp'
    	option target 'ACCEPT'
    
    config rule
    	option src 'iptv'
    	option dest 'lan'
    	option name 'Allow-Multicast-IPTV'
    	list proto 'udp'
    	list dest_ip '239.0.0.0/8'
    	option target 'ACCEPT'
    
    config zone
    	option name 'iptv'
    	option input 'ACCEPT'
    	option forward 'ACCEPT'
    	option output 'ACCEPT'
    	option masq '1'	
    

    光猫 配置

    1. 模式: 桥接 端口绑定:业务模式: 互联网 Vlan 模式: 改写 Tag VlanID: 101
    2. 模式: 桥接 端口绑定:业务模式: 其他 Vlan 模式: 改写 Tag VlanID: 102

    绑定模式

    LAN1 101/102

    9 条回复    2025-11-19 09:43:03 +08:00
    sayoll
        1
    sayoll  
    OP
       10 小时 39 分钟前
    补充一下,机顶盒上有个像 U 盘一样的设备不知道是不是 鉴权设备
    wtks1
        2
    wtks1  
       9 小时 46 分钟前
    一般来说除了上海之外的 iptv 都挺好搞单线复用 iptv 的,如果自己搞不定,可以直接买现成的交换机,HTK-SG1008D-ITV
    xqzr
        3
    xqzr  
       9 小时 1 分钟前
    VLAN 模式:透传
    应该是,电口入 Tag 不改变直接出光口?如果是,那可以试试...
    ruoyutx
        4
    ruoyutx  
       7 小时 33 分钟前 via iPhone
    0838 裝寬帶默認就是 v4 動態。無需申請
    Ipsum
        5
    Ipsum  
       2 小时 55 分钟前
    那个 usb 设备是遥控器的语音接收器。
    ysxb1145
        6
    ysxb1145  
       2 小时 26 分钟前 via Android
    @sayoll 那不是遥控器接收器吗
    很多地方不交钱看不了组播地址的
    Qazxcv123
        7
    Qazxcv123  
       2 小时 7 分钟前
    网上教程挺多的,给你个参考: https://github.com/luckyyyyy/blog/issues/75
    还有 iptv 代理的,可以用这个 OP 的插件: https://www.v2ex.com/t/971817
    glaucus
        8
    glaucus  
       1 小时 23 分钟前
    已经退掉 IPTV 用移动内网源了,虽然清晰度差点,省事多了
    bfdh
        9
    bfdh  
       1 小时 2 分钟前
    同 028 移动。
    1 、你前面链接中给出的地址已经转成 http 了,如果你直接用的话,肯定是播不了的。
    2 、如果你使用了正确的组播地址仍不能播放,有可能是组播代理的问题,可以尝试不经过路由器直接有线接 PC ,用 VLC 播放试试。
    3 、以下是我之前自己折腾的记录,你可以参考下。

    # 基本背景

    - 成都移动 IPTV 使用组播进行播放,使用 IPoE 认证( dhcp option 60 )。
    - 抓取直播源的目的是希望可以抛弃机顶盒,直接使用电视、手机、电脑等设备直接观看电视节目。
    - 抓取直播源之后可以多台设备同时观看 IPTV (设备间互不干扰),且无需向运营商申请额外的机顶盒。
    - 可以使得网络部署更加灵活,不必专门为所有的设备准备单独的 IPTV 网线。

    # 抓包

    抓取机顶盒正常连接 IPTV 时的所有报文,从机顶盒开机到播放任意频道时止。抓到的报文将用于后续分析。具体抓包过程此处不做赘述。

    # 解决 IPoE 认证问题

    ## 提取认证信息(不确定是否一定需要,后来好像没有这些也能用)

    认证信息包含以下三项内容,均可从 dhcp discover 报文中提取

    > Vendor class identifier 每次 dhcp 请求都会变,但通过测试发现提取任意一次的数据进行重放也可以通过认证。

    - mac
    - Host Name: android-xxxxxxxxxxxxxxxx
    - Vendor class identifier:(长度为 61 字节,转化为 16 进制文本则长度为 122 ) 00001545acd5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8a9342eac

    ## 路由器配置

    在 openwrt 路由器( MT7621+7530 方案)`/etc/config/network`中添加如下配置

    > port 3 原本是在其他 switch_vlan 的配置中,需要将其从中删除。
    >
    > 在配置之前,需要修改`/lib/netifd/proto/dhcp.sh`, 找到`${vendorid:+-V "$vendorid"} \`,修改为`${vendorid:+-V '' "-x 0x3c:$vendorid"} \`使得 dhcp vendorid 可以支持 16 进制数据.

    ```
    config switch_vlan
    option device 'switch0'
    option vlan '3'
    option vid '102'
    option ports '3 5t'

    config interface 'iptv'
    option proto 'dhcp'
    option hostname 'android-xxxxxxxxxxxxxxxx'
    option vendorid '00001545acd5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8a9342eac'
    option macaddr 'xx:xx:xx:xx:xx:xx'
    option ifname 'eth1.102'
    option delegate '0'
    option defaultroute '0'
    option peerdns '0'
    ```

    完成以上配置之后,执行`/etc/init.d/network reload`,然后将光猫 iptv 口用网线连接到路由器 port 3 ,此时路由器的 iptv interface 已经可以获取到 IP 。

    # 提取直播源

    继续分析抓包数据不难发现直播源是通过如下 http 请求明文传输的

    ```
    GET /taipan-search/getChannelIndexs.json?channelIndexUrl=............ HTTP/1.1
    Host: vipersearch.t.taipan.sca.bcs.ottcn.com:8080
    Connection: Keep-Alive
    Accept-Encoding: gzip
    User-Agent: okhttp/3.12.0
    ```

    提取该 http 请求的响应报文,得到如下 json ,livePlayUrl 即为每个频道的直播地址。

    ```json
    [{
    "index": "1",
    "uuid": "ysten-cctv-1",
    "channelName": "CCTV-1",
    "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV1.png",
    "livePlayUrl": "rtp://239.11.0.65:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65",
    "isShowBack": 1,
    "channel_code_bd": null,
    "channelType": "OpenChannel",
    "aiChannelUuid": null
    }, {
    "index": "2",
    "uuid": "cctv-2",
    "channelName": "CCTV-2",
    "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV2.png",
    "livePlayUrl": "rtp://239.11.0.108:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65",
    "isShowBack": 1,
    "channel_code_bd": "cctv2&CCTV2&cctv-2&CCTV-2",
    "channelType": "OpenChannel",
    "aiChannelUuid": null
    }, {
    "index": "3",
    "uuid": "cctv-3",
    "channelName": "CCTV-3",
    "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV3.png",
    "livePlayUrl": "rtp://239.11.0.101:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65",
    "isShowBack": 1,
    "channel_code_bd": "cctv3",
    "channelType": "OpenChannel",
    "aiChannelUuid": null
    },
    ......
    ]
    ```

    > 如果将前面提取到的 mac 地址以及通过 dhcp 获取的 IP/mask 均设置在一台 PC 上,并将 IPTV 网线也接入 PC ,此时 PC 可以通过 VLC 播放器直接播放每个 livePlayUrl 。

    # 配置 udpxy

    > 使用 udprxy 的目的是将组播流转换为 http 流,使得局域网内的设备可以更方便地播放直播源。理论上,配置好组播代理、igmpsnooping 局域网中的设备也可以直接播放组播源。不过 wifi 对组播支持不好,某些路由器可能无法通过 wifi 播放。

    在路由器安装好 udprxy ,并配置如下,然后执行`/etc/init.d/udpxy reload`

    ```sh
    root@Openwrt:~# cat /etc/config/udpxy

    config udpxy
    option respawn '1'
    option verbose '0'
    option status '1'
    option port '4022'
    option disabled '0'
    option bind 'br-lan'
    option source 'eth1.102'

    ```

    至此,局域网的设备便可以通过`http://<router-ip>:4022/<proto>/<multicast-addr>`播放每个直播源。比如 CCTV1 的播放地址为:`http://192.168.0.1:4022/rtp/239.11.0.65:5140`。

    # 生成 m3u8

    将前面提取到的 json 保存为文件,通过下面这个脚本(`gen_m3u8.sh`)可生成 m3u8 文件。

    命令格式为:`./gen_m3u8.sh <json file> <target file>`

    ```sh
    #!/bin/bash

    set -e

    function clean(){
    [ -n "$msg" ] && rm -f $TMPF
    [ -n "$msg" ] && {
    echo $msg
    return
    }
    echo "Failed"
    }

    JSON=$1
    TARGET=$2
    [ -z "$JSON" -o -z "$TARGET" ] && {
    echo "$0 <json file> <target file>"
    exit
    }

    [ -r "$JSON" ] || {
    echo "Can't open $JSON"
    exit
    }

    trap clean EXIT
    TMPF=$(mktemp)
    cat $1 | jq . | grep -E "channelName|livePlayUrl" > $TMPF
    echo "#EXTM3U" > "$TARGET"
    cat $TMPF | while true; do
    read name || break
    read url
    name=$(echo $name | cut -d'"' -f4)
    proto=$(echo $url | cut -d'"' -f4 | cut -d':' -f1)
    url=$(echo $url | cut -d'"' -f4 | cut -d'/' -f3)
    echo "#EXTINF:-1,$name" >> "$TARGET"
    echo "http://192.168.0.1:4022/$proto/$url" >> "$TARGET"
    done
    msg=Success
    ```

    > 将生成的 m3u8 文件上传至[http://epg.51zmt.top:8000/]( http://epg.51zmt.top:8000/%E5%8F%AF%E8%87%AA%E5%8A%A8%E5%8C%B9%E9%85%8D%E5%8F%B0%E6%A0%87)可自动匹配台标
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    ♥ Do have faith in what you're doing.