兰彻 发表于 2013-3-17 19:07:16

电信联通bras如何共存摸索的一些结果。

本帖最后由 兰彻 于 2013-3-18 00:20 编辑

不知道有多少小区和我的情况一样,我们这里的小区到用户家的链路是自己搭建的,搞到比较早,不是olt+epon那样打到用户家的,就是用光收发+交换机打到用户家的。后期电信联通想重新在小区布线,出于各种原因,没有让电信联通的链路进来。本来的计划是租用电信的以太线路,然后自己搭建bras,提供上网服务。电信哪里死活谈不下来以太带宽。后来和电信谈的方案是电信拉一条pppoe链路过来,小区要上网必须通过电信的bras。没办法出口在电信手里只能用这样的方法合作。所以的用户其实和小区没有关系,只是到用户的最后一公里是小区自己搞的。后来联通也拉了一条pppoe链路。其实是共用一条链路。通过划分vlan来区分电信用户和联通用户。打个比方valn1000-vlan3000这vlan是电信的用户,vlan3000-vlan6000是联通的。例如一幢楼,有电信的用户,也有联通的用户。2种用户共用一个楼道交换机。例如交换机的端口1的vlan是1003,那么这个端口属于电信,端口2的vlan是3002,那么这个端口属于联通。然后用trunk口透传上去,丢给电信的bras,或者联通的bras。如果一个用户要重电信换到联通怎么办。我就要把这个交换机的端口重新划分一下,让端口属于vlan3000—vlan6000这个值。说起来很简单但是实在是件很麻烦的是。如何做到用户换isp时不要重新划分vlan这个问题就摆在了面前。
要解决这个问题首先就要理解几个理论。一个是vlan,一个是pppoe。
先说下vlan,开始一直不明白routeros是如何实现acesses,trunk,hybrid,几种模式。直到看到这样一篇文章。链接如下
http://wiki.mikrotik.com/wiki/Vlans_on_Mikrotik_environment

/interface vlan add name=vlan-10 vlan-id=10 interface=ether5 disabled=no
/interface vlan add name=vlan-20 vlan-id=20 interface=ether5 disabled=no
To be able to forward the packets from access-ports to vlans we need bridges:

/interface bridge add name=br-vlan10 disabled=no
/interface bridge add name=br-vlan20 disabled=no
Now just add the ports to the bridges:

/interface bridge port add interface="vlan-10" bridge="br-vlan10" disabled=no
/interface bridge port add interface="ether1" bridge="br-vlan10" disabled=no
/interface bridge port add interface="vlan-20" bridge="br-vlan20" disabled=no
/interface bridge port add interface="ether2" bridge="br-vlan20" disabled=no
想这样routeros就运行在trunk模式。

/interface vlan add name=vlan-10 vlan-id=10 interface=br-trunk disabled=no
/interface bridge add name=br-vlan10 disabled=no
/interface bridge port add interface="vlan-10" bridge="br-vlan10" disabled=no
/interface bridge port add interface="ether1" bridge="br-vlan10" disabled=no
想这样就运行在hybrid的模式。
然后在说说pppoe拨号过程吧。
pppoe拨号过程分成2部分,第一部分是pppoe discovery,第二部分是pppoe session。
我这里需要处理的就是pppoe discovery。这个数据包是广播包。并且打了一层vlan。
电信的vlan和联通的vlan不在同一范围,所以要和电信联通协商,让电信和联通的vlan有个交集。例如电信的vlan是1000-4000.联通的vlan是2000-6000.我就去他们vlan的一个交集,2500-3500.我的楼道交换机的vlan就划分在2500-3500这个范围。这样用户的pppoe discovery的请求不仅会跑到电信也会跑到联通的bras上去。
新的问题又产生了。例如一个电信的用户,vlan是2501,首先拨号,这个pppoe discovery可能发到电信的bras也可能到联通的bras。这取决于那个bras收到这个请求。
如果电信的用户拨号到联通就会回应691错误。因此问题简化为如何转发控制pppoe discovery这个请求的方向。pppoe是2层协议,只有在mac入手。
因此所以的思路全部集中在桥防火墙这里了。

这里是我在虚拟机里的试验


这里3台ros模拟了小区的环境。
第一台上联电信联通的bras,下联trunk口的交换机
第二台模拟电信的bras,允许vlan10-vlan60的pppoe拨号
第三台模拟交换机和用户,模拟打标拨号


这台是选择线路的ros,我首先在这台ros上搭建一个pppoeserve。目的是为了收集用户名和mac地址。我假设电信的用户名是dx1,dx2,dx3,联通的用户名是lt1,lt2,lt3.
根据这个用户名的特征来识别这个用户属于电信还是联通。然后为这个mac指定出口

看到一个有意义的参考文档 http://mdbrasil.com.br/en/downloads/Seguranca_camada2_Brasil_2009_Maia.pdf

lzhwe 发表于 2013-3-17 19:59:29

http://www.ccbn.com.cn/forum.php?mod=viewthread&tid=151465 这个可能对你有帮助

11 发表于 2013-3-17 20:06:42

本帖最后由 11 于 2013-3-17 20:41 编辑

用网桥肯定是解决不了vlan的问题。

有一个办法,应该是可行的。
ros不设置为网桥,然后在ros中安装一个pppoe-relay程序。这个程序可以中继pppoe包。

ros的外网卡1添加电信vlan,
ros的外网卡2添加联通的vlan,
确保ros与它们能通信成功。

内网卡接用户端。

pppoe-relay程序作适当改造,把不同mac的用户中继到对应的vlan网卡上。

11 发表于 2013-3-17 20:08:29

PPPoE穿透 : PPPOE是2层技术,所以是不能跨路由使用的,用PPPoE穿透(pppoe-relay)使用网桥使PPPoE能够跨路由使用,

典型应用:
为了使用IPHONE等不支持或使用PPPoE不便的设备,需要使用路由器.
但使用路由器后发现自己的电脑需要独立的公网IP(如迅雷),
当你的电脑连接在路由器后却无法再拔的通ADSL了
这时候你开启了PPPoE穿透功能后便可以使你的ADSL拔通了.(当然能够双拔是前提)

安装程序完成后再运行命令:pppoe-relay -S wan_vlan -C lan就完成了PPPoE的穿透

将这条命令放到了启动脚本中

jike106397 发表于 2013-3-18 01:08:22

问题已经解决,3.5个小时,测试完毕。

lcgjk 发表于 2013-3-18 09:07:26

非常不错的技术帖子!认真学习!

坐井观天 发表于 2013-3-18 09:42:40

目前他们都搞成默认走一种,电信或联通,另一PPPOE加服务名。

楼主成功搞个教程出来,大家学习一下。

qiznstar 发表于 2013-3-18 09:42:46

本帖最后由 qiznstar 于 2013-3-18 09:47 编辑

恭喜楼主终于解决了问题,也给大家提供了借鉴的方案,pppoe穿透是不行的,穿透后MAC都变成那张穿透的网卡MAC了,对于电信联通来讲只能拔上一个账号,也不利于用户账号的管理。
不过ROS本身不是能很好的管理账号,能另外开发是最好的了呵。

rosabc 发表于 2013-3-18 09:54:36

做复杂的VLAN实验最好用真实设备实验,有时在虚拟环境下,有些网卡不支持tagged包。

兰彻 发表于 2013-3-18 10:51:16

qiznstar 发表于 2013-3-18 09:42 static/image/common/back.gif
恭喜楼主终于解决了问题,也给大家提供了借鉴的方案,pppoe穿透是不行的,穿透后MAC都变成那张穿透的网卡MA ...

大师能交流下吗?我没有解决,我不知道应该怎么解决vlan的问题。大师求指教

兰彻 发表于 2013-3-18 17:13:44

rosabc 发表于 2013-3-18 09:54 static/image/common/back.gif
做复杂的VLAN实验最好用真实设备实验,有时在虚拟环境下,有些网卡不支持tagged包。

在虚拟机下可以模拟打标不需要网卡的支持。甚至qinq都行。例如一个bras要求qinq的标,以前还有去找一台qinq的交换机测试,相当麻烦。后来发现直接用虚拟机装ros就搞定了。你可以试试qinq拨号在虚拟机下。

310785922 发表于 2013-3-18 17:45:55

谢谢你的分享。。。。。。。。。

qiznstar 发表于 2013-3-19 10:29:28

兰彻 发表于 2013-3-18 17:13 static/image/common/back.gif
在虚拟机下可以模拟打标不需要网卡的支持。甚至qinq都行。例如一个bras要求qinq的标,以前还有去找一台qi ...

VLAN只要在交换机上按普通端口划就行了,甚至可以不用,电信和联通的主干网都不在小区里面,而接在网卡的桥上,桥里需三张网卡,一张接局域网,一张电信,一张联通,桥来做pppoe服务器,屏蔽所有电信联通的广播包。

jike106397 发表于 2013-3-19 10:50:15

楼上正解。
电信和网通的bras可以分别放到一个单独 的vlan中,这样所有的广播包都会经过ROS的桥,再在桥上做广播包的过滤就行。可以根据vlanid或者MAC地址来指定广播包的出口。

测试已经成功

这只是一小步,楼主需要的是在共存的情况下能让电信播电信号,联通播联通号。这个还需要帐号搜集及判别,感觉ROS难胜任,期待高手出现。

9939781 发表于 2013-3-19 11:15:02

用脚本查找ros内拨号LOG用户名不就可以判断了,然后追加个命令指定该MAC出口。我记得ROS的LOG可以显示拨号者MAC和账号。
页: [1] 2
查看完整版本: 电信联通bras如何共存摸索的一些结果。