IPTV 异地二层桥接方案 - 完整配置文档
项目概述
将 A 端的 IPTV 信号通过公网 VPN 隧道透传到 B 端(异地),使得 B 端的 IPTV 机顶盒可以像在 A 端一样进行 PPPoE 拨号,正常观看直播和回看。核心采用 SoftEther VPN 的二层桥接功能,实现异地网络的无缝二层互通。
网络拓扑
【A 端(IPTV 源头)】
光猫(桥接) → 中兴路由器(PPPoE 拨号)
│
├─ LAN 口(上网,192.168.5.x)
└─ IPTV 口(专用 VLAN,连接服务器 enp9s0)
│
┌────┴────┐
│ Linux 服务器 │
│ - enp9s0:连接 IPTV 口
│ - enp8s0:连接局域网(192.168.5.x)
│ - SoftEther VPN Server
│ - 虚拟 HUB:iptv-iot
│ - 本地桥接:iptv-iot ↔ enp9s0
│ - 监听端口:5555(TCP)
│ - DDNS:dailys.top
└─────────┘
│
【公网 VPN 隧道】
│
【B 端(异地播放)】
┌────┴────┐
│ OpenWrt 路由器 │
│ - WAN 口:上网(DHCP)
│ - LAN 口:lan1~lan4(192.168.10.x)
│ - SoftEther VPN Client
│ - 虚拟网卡:vpn_vpn_iptv(TAP 模式)
│ - 桥接:br-iptv(lan1 + vpn_vpn_iptv)
└─────────┘
│
┌────┴────┐
│ IPTV 机顶盒 │
│ - 插入 lan1 口
│ - PPPoE 拨号(自动)
│ - 获取 IP:10.114.166.66
└─────────────┘A 端配置步骤(服务器)
1. 安装 SoftEther VPN Server
cd ~/install
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.44-9807-rtm/softether-vpnserver-v4.44-9807-rtm-2025.04.16-linux-x64-64bit.tar.gz
tar xzvf softether-vpnserver-*.tar.gz
cd softether-vpnserver-v*
make
sudo ./vpnserver start2. 初始化管理员密码(vpncmd)
sudo ./vpncmd
# 选择 1 (VPN Server 管理)
# 直接回车连接本地
ServerPasswordSet
# 输入并确认密码3. 创建虚拟 HUB 并桥接到 IPTV 网卡
sudo ./vpncmd
# 选择 1,输入管理员密码
HubCreate iptv-iot
Hub iptv-iot
SecureNatDisable
BridgeCreate /DEVICE:enp9s0 /TAP:no
BridgeList4. 创建 VPN 用户
UserCreate cascade_user /GROUP:bridge /REALNAME:bridge /NOTE:bridge
UserPasswordSet cascade_user
# 输入密码(如 123456),选择 standard5. 开启 L2TP/IPsec
L2TPEnable yes
IPsecEnable /L2TP:yes /L2TPRAW:yes /ETHERIP:no /PSK:your_psk /DEFAULTHUB:iptv-iot6. 开放防火墙与端口转发
# 服务器防火墙(firewall)
sudo firewall-cmd --add-port=5555/tcp --permanent
sudo firewall-cmd --reload
# 路由器端口转发:将公网 TCP 5555 和 UDP 500/4500/1701 转发到服务器内网 IP---
B 端配置步骤(OpenWrt)
1. 安装 SoftEther VPN Client
apk update
apk add softethervpn-client
//我是京东云AX6600,自定义插件apk编译时集成2. 启动客户端并设置开机自启
/etc/init.d/softethervpnclient start
/etc/init.d/softethervpnclient enable3. 创建虚拟网卡和 VPN 连接
vpncmd
# 选择 2 (VPN Client 管理)
NicCreate vpn_iptv
AccountCreate vpn_account /SERVER:dailys.top:5555 /HUB:iptv-iot /USERNAME:cascade_user /NICNAME:vpn_iptv
AccountPasswordSet vpn_account
# 输入 standard,然后输入密码
AccountConnect vpn_account
AccountStatusGet vpn_account4. 设置开机自动连接
AccountStartupSet vpn_account5. 配置网桥 br-iptv
登录 LuCI
浏览器打开 http://192.168.10.1(或你的 B 端路由器 IP),输入密码登录。
进入设备配置页面
点击 网络(Network) → 接口(Interfaces),切换到 设备(Devices) 标签页。
添加新网桥设备
点击 添加设备(Add device)
设备类型(Device type):选择 网桥设备(Bridge device)
设备名称(Device name):填入 br-iptv
网桥端口(Bridge ports):
勾选物理端口 lan1(用于连接机顶盒)
勾选虚拟端口 vpn_vpn_iptv(VPN 虚拟网卡,如果列表中没有,先确认 VPN Client 已连接)
点击 保存(Save)
创建新接口(可选)
进入 网络(Network) → 接口(Interfaces)
点击 添加新接口(Add new interface)
名称(Name):iptv
协议(Protocol):选择 不配置协议(Unmanaged)
设备(Device):选择 br-iptv
点击 创建接口(Create interface)
在 防火墙设置(Firewall settings) 中,选择 新建(Create new),区域名称为 iptv,入站/出站/转发均设为 接受(Accept)
点击 保存并应用(Save & Apply)
确保 lan1 从 br-lan 中移除
回到 网络(Network) → 接口(Interfaces) → 设备(Devices)
找到 br-lan 设备,点击 配置(Configure)
在 网桥端口(Bridge ports) 列表中,取消勾选 lan1(如果之前有勾选)
点击 保存并应用(Save & Apply)
6. 重启网络服务
/etc/init.d/network restart
验证与测试
1. 检查 VPN 状态(B 端)
vpncmd
# 选择 2 -> AccountList
# 状态应为 Online
ifconfig vpn_vpn_iptv2. 检查桥接状态(B 端)
brctl show
# 应看到 br-iptv 包含 lan1 和 vpn_vpn_iptv3. A 端抓包验证 PPPoE 透传
在 A 端服务器执行:
sudo tcpdump -i enp9s0 -e -n -s 1500 ether proto 0x8863 or ether proto 0x8864
插拔 B 端机顶盒电源,观察输出应出现完整的 PPPoE 发现和 LCP 协商。
4. 认证成功标志
抓包中出现:
CHAP Success, Authentication success, Welcome!
IPCP Conf-Ack, IP 10.114.166.66
机顶盒指示灯变绿,电视画面正常播放。
---
最终成果
B 端 IPTV 机顶盒成功完成 PPPoE 拨号,获取 IP 10.114.166.66
直播、回看、EPG 功能正常
关键要点总结
1. 二层桥接是核心,确保 PPPoE 广播帧完整透传。
3. 账号密码:必须与运营商记录一致。
4. 防火墙:A 端需开放 TCP 5555,B 端需允许 VPN 区域转发。
5. 端口转发:A 端路由器必须将公网对应端口转发到服务器内网 IP。
6. MTU:建议设置隧道 MTU 为 1400 左右。
参考资料
SoftEther VPN 官方文档:https://www.softether.org/
OpenWrt 网络配置:https://openwrt.org/docs/guide-user/network/start