找回密码
 注册

QQ登录

只需一步,快速开始

查看: 134362|回复: 171

关于用软件VLAN处理IPTV的方法

[复制链接]
发表于 2011-8-18 22:34:46 | 显示全部楼层 |阅读模式
本帖最后由 spicahan 于 2011-8-18 23:33 编辑

之前在 H618C 刷 OpenWrt 并支持 IPTV VLAN 硬件处理的方法 里详细解释过上海地区光纤入户播放 IPTV 的原理和靠交换机直接处理VLAN的方法了。这两天有网友问如何用软件VLAN实现同样的功能,特意另开一帖介绍一下。

首先声明一下,我是在水星 MW300R (硬件上应该和 TP-LINK WR841N v5 还是 v6是一样的) 上实验成功的。然后现在手头已经没有机器了,所以只能写一下原理,和当时保留下来的配置文件。想实现的网友请根据自己的机器作一下相应的调整。

以 MW300R 为例,这个机器实际上有三块网卡,分别对应 WAN, LAN 和 WiFi
配完之后,这样用:光猫的输出接到 WAN 口,IPTV接 LAN 任意口,上网只能用 WiFi
解释一下为什么上网只能用WiFi: 因为 300R/841N 用的交换机芯片在 OpenWrt 下面无法打开硬件 VLAN 功能,这就意味着那四个LAN口只能属于同一个VLAN,所以要么 LAN 口接 IPTV, WiFi 用来上网;要么倒过来,WiFi 接 IPTV, LAN 口上网。

如果你的无线路由器用的是 broadcom 的交换机芯片,比如 H618 系列或者 HA910 系列,那么就没这个问题了,因为在 LAN 上可以给每一个端口独立分配 VLAN.

补充内容 (2011-8-31 11:55):
27楼和28楼有最新的关于如何用交换机硬件直接处理IPTV VLAN的方法,是用 RT-N16 实现的。理论上,其它用 Broadcom 的 bcm53115 交换机芯片的机器都可以实现。

补充内容 (2011-10-8 19:12):
Buffalo WZR HP G300NH 也可以用交换机硬件直接处理 VLAN, 请看
https://www.chinadsl.net/forum.php?mo ... &fromuid=266817

补充内容 (2011-11-23 10:42):
70楼有个用 H618C 软件实现的例子。
 楼主| 发表于 2011-8-18 22:39:43 | 显示全部楼层
本帖最后由 spicahan 于 2011-8-18 23:02 编辑

现在假设在 OpenWrt 下面,WAN 口的网卡名字是 eth1,
LAN 是 eth0,
WiFi 是 wlan0,

那么第一步要修改 /etc/config/network 这个文件。文件的内容如下
  1. config interface loopback
  2.        option ifname   lo
  3.        option proto    static
  4.        option ipaddr   127.0.0.1
  5.        option netmask  255.0.0.0

  6. config interface lan
  7.        option ifname   wlan0
  8.        option proto    static
  9.        option ipaddr   192.168.2.1
  10.        option netmask  255.255.255.0

  11. config interface wan
  12.        option ifname   eth1
  13.        option proto    pppoe
  14.        option username USERNAME
  15.        option password PASSWORD

  16. config interface iptv
  17.        option type     bridge
  18.        option proto    none
  19.        option ifname   'eth1.51 eth1.85 eth0'
复制代码
千万注意,看完我后面的帖子再改,不然如果你没有 TTL 线的话,很可能你就再也连不上你的无线路由器了!!
发表于 2011-8-18 22:59:18 | 显示全部楼层
看看,我现在就是用光猫加TP-LINK WR841N,IPTV还是直接从光猫里引线的。
 楼主| 发表于 2011-8-18 22:59:50 | 显示全部楼层
上面这个配置文件里,eth1.51 和 eth1.85, 这就是靠 Linux 内核的 8021q 模块用软件实现的 vlan 上对应的虚拟网卡。在这个配置文件里写过之后,OpenWrt 在启动的时候会自动调用 vconfig 来添加 eth1.51 和 eth1.85

那个文件的最后,新建了一个 interface 叫做 iptv, 把上面这两块虚拟网卡和 eth0 进行桥接,这样一来,LAN 口就既属于 VLAN 51, 又属于 VLAN 85 了,你们就可以看 IPTV 了,点播也可以,直播也可以~~

但严格来说,这个方法是不正确的,因为这样把 VLAN 51, 85 两个给绑起来了,这样到时候你看直播的时候,你的机器不仅会把从 VLAN 51 收到的直播包转发到你的 LAN 口上,还会转发到 VLAN 85 上,也就是从光猫收到的数据会被发回光猫,这是一件多么蛋痛的事情啊。。正确的做法似乎应该是要用 ebtables 来限制 VLAN 51/85 之间的转发。不过我觉得设 ebtables 太麻烦了,不高兴研究了,而且我自己也不用这个软件VLAN的方案,所以我用了个简单的方法:51/85之间其实只有直播数据会被转发,这样只要把 LAN 口,也就是 eth0 的组播功能给禁掉,那样它想转也转不出去了。所以在 /etc/rc.local 这个文件里加上这段内容就行了:
  1. echo 0 > /sys/devices/virtual/net/eth1.85/brport/multicast_router
复制代码
 楼主| 发表于 2011-8-18 23:17:06 | 显示全部楼层
本帖最后由 spicahan 于 2011-8-18 23:17 编辑

最后,我们要配置一下无线。修改 /etc/config/wireless 这个文件:
  1. config wifi-device  radio0
  2.        option type     mac80211
  3.        option channel  11
  4.        option macaddr  b0:48:7a:39:24:b4
  5.        option hwmode   11ng
  6.        option htmode   HT20
  7.        list ht_capab   SHORT-GI-20
  8.        list ht_capab   SHORT-GI-40
  9.        list ht_capab   TX-STBC
  10.        list ht_capab   RX-STBC1
  11.        list ht_capab   DSSS_CCK-40
  12.        # REMOVE THIS LINE TO ENABLE WIFI:
  13.        option disabled 0

  14. config wifi-iface
  15.        option device   radio0
  16.        option network  lan
  17.        option mode     ap
  18.        option ssid     OpenWrt
  19.        option encryption psk2
  20.        option key 'WiFiPassword'
复制代码
请注意,这样配置过后,你的无线路由器就只能通过无线来连接登录并修改了,万一你的无线配错了,你又没有 TTL 线的话,就彻底完蛋了,不要来找我哦~~

为了给自己留条后路,请重新看一下我前面写的 /etc/config/network 文件。最后 iptv 那里,proto 我设了 none, 这个意思是说 IPTV 那段不用设置 IP 地址。原理上讲这是完全正确的,你的无线路由器应该只有一个 WAN IP 地址和一个 NAT 之后的IP 地址,前者是通过 PPPoE 获得的,后者是绑在 WiFi 上了。但出问题的时候,从 WAN 口是没法登录进 OpenWrt 的,而 WiFi 是有可能配置出错的(我就碰到过。。。),这时候,如果 IPTV 那个 interface 有一个静态 IP 地址的话,你就可以从 LAN 口登录回 OpenWrt. 相应的修改是把 /etc/config/network 最后那段改成:
  1. config interface iptv
  2.        option type     bridge
  3.        option proto    static
  4.        option ipaddr   192.168.1.1
  5.        option netmask  255.255.255.0
  6.        option ifname   'eth1.51 eth1.85 eth0'
复制代码
声明一下,这个修改我没实际试过,只是觉得理论上是可行的,实际上可能还需要修改 iptables, 让它允许登录。

好了,就先写到这里吧,如果有人真的要弄的话,可以具体问题具体回答。
 楼主| 发表于 2011-8-18 23:29:48 | 显示全部楼层
wwkl 发表于 2011-8-18 22:59
看看,我现在就是用光猫加TP-LINK WR841N,IPTV还是直接从光猫里引线的。

如果你不需要 IPTV 和上网都通过有线的话,那么把841刷成OpenWrt之后,就可以只用光猫和841了。
发表于 2011-8-18 23:45:42 | 显示全部楼层
spicahan 发表于 2011-8-18 23:29
如果你不需要 IPTV 和上网都通过有线的话,那么把841刷成OpenWrt之后,就可以只用光猫和841了。

听说841N V8.0缩水严重,不知道能刷不?
 楼主| 发表于 2011-8-18 23:56:59 | 显示全部楼层
wwkl 发表于 2011-8-18 23:45
听说841N V8.0缩水严重,不知道能刷不?

openwrt官网上显示的状态是,暂不支持
发表于 2011-8-19 16:23:15 | 显示全部楼层
本帖最后由 redtears 于 2011-8-19 16:24 编辑
spicahan 发表于 2011-8-18 22:39
现在假设在 OpenWrt 下面,WAN 口的网卡名字是 eth1,
LAN 是 eth0,
WiFi 是 wlan0,


首先谢谢您回复,看了这些配置我大致明白了工作原理,是讲WAN口过来的数据分成两路vlan85和vlan51, 然后将lan和这两个vlan桥接起来就可以了,不知道我有没有理解错:)   但是我在设置的时候又遇到问题了,不好意思又要麻烦你了。

我遇到的现象是这样的, 我的openwrt里默认是启用vlan的, 默认有两个vlan。eth0.0(端口1 2 3 4 5)对应LAN, eth0.1(端口0 5)对应WAN, 这样的话我IPTV那块配置就不知道该怎么写了。想问下这种情况下我该怎么操作呢?
 楼主| 发表于 2011-8-19 21:46:07 | 显示全部楼层
redtears 发表于 2011-8-19 16:23
首先谢谢您回复,看了这些配置我大致明白了工作原理,是讲WAN口过来的数据分成两路vlan85和vlan51, 然后 ...

啊,你的无线路由器是什么型号的?如果只有 eth0 一块有线网卡的话,那是弄不了的。。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-4-26 13:37 , Processed in 0.028833 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表