USG/EdgeMax ER-Lite一线多拨的性能改进

首先,很感谢这个帖子:http://bbs.ubnt.com.cn/forum.php … 7202&extra=page%3D2
这个帖子说明了单线多拨的一般方法,这应该也是官方推荐的方法,但是这种方法在作者的USG上实测,叠加带宽为60-70M,远不如单线单拨的100M,而作者所用的运营商单线四拨可以达到400M带宽。这里面有一个性能问题,作者推测,主要是使用了pseudo-ethernet虚拟一个mac地址,而pseudo-ethernet的实现由cpu参与,导致每个包都经过cpu,因此导致单线多拨的吞吐量还不如有offload参与的单线单拨。在这个帖子中,有所讨论:http://bbs.ubnt.com.cn/forum.php … 9941&extra=page%3D1

在pseudo-ethernet导致性能问题上,作者的解决思路是,抛弃pseudo-ethernet,找一个offload的方法来生成一个mac(Tips:pppoe每个拨号需不同的mac地址),在ubnt的规格表中,看下图
2018-05-13_15-23-11.png
以上,能提供mac地址的offloading就只有vlan。所以本文的解决办法是使用vlan来一线多拨

先来看结果,作者是100M的带宽,使用vlan一线四拨以后,USG上能跑到,看图
speed测速172116cotwpoz8p0pcricn.png
迅雷下载测速
2018-05-12_15-33-36.png

另外:这个帖子作者测试了6拨号,USG在100M带宽下能跑到的速度:http://bbs.ubnt.com.cn/forum.php?mod=viewthread&tid=20056&extra=这个帖子作者测试了8拨号,USG在100M带宽下能跑到的速度:http://bbs.ubnt.com.cn/forum.php?mod=viewthread&tid=20090&extra=

再回到和使用pseudo-ethernet多拨的对比,看一下cpu负载,大概能证实作者的判断。
2018-05-12_11-04-36.png
开始使用vlan一线多拨之前,有一个前提条件,可以在光猫上创建vlan,使光猫的网口能接受带vlan tag的数据包,如果没有光猫的超级管理员权限,有一个vlan交换机也行,让vlan交换机去掉vlan tag,再接入光猫。本文不适合初学者,理解本文需要较多的基础知识,而且作者在本文并不打算给出一步一步的教程,也不回答一些比较基础的问题,希望初学者能在善用论坛搜索。作者使用的是USG,所有的配置是直接给出show 结果,需要转变为命令。

1、首先在光猫上创建vlan,作者在光猫网口1上创建了3个vlan绑定,网口1的vlan11绑定到光纤口vlan41(光纤口上网通道是vlan41),vlan12->vlan41, vlan13->vlan41,另外,还有一个默认vlan->vlan41,设置完了以后,现在光猫网口1能接收四种数据包,即untag vlan,vlan11, vlan12, vlan13。172138a75nnpc4ds7k4l1l.png
2、接下来就是在网口上创建vlan,vlanid需要和光猫上创建的对应,每个vlan手动设置一个新的mac地址。再在每个vlan中创建pppoe拨号。
说明:以下配置是作者的USG为了和UNIFI推送过来的配置兼容,pppoe0是只能跑在默认vlan中(即vlan以外)。

show interface eth0


 firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
 }
 pppoe 0 {
   default-route none
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   password xxxxxxxxxxx
   user-id xxxxxxxxxxx
 }
 vif 11 {
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   mac xx:xx:xx:xx:xx:xx
   pppoe 2 {
   default-route none
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   name-server none
   password xxxxxxxxxxx
   user-id xxxxxxxxxxx
   }
 }
 vif 12 {
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   mac xx:xx:xx:xx:xx:xx
   pppoe 3 {
   default-route none
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   name-server none
   password xxxxxxxxxxx
   user-id xxxxxxxxxxx
   }
 }
 vif 13 {
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   mac xx:xx:xx:xx:xx:xx
   pppoe 4 {
   default-route none
   firewall {
   in {
   ipv6-name WANv6_IN
   name WAN_IN
   }
   local {
   ipv6-name WANv6_LOCAL
   name WAN_LOCAL
   }
   out {
   ipv6-name WANv6_OUT
   name WAN_OUT
   }
   }
   name-server none
   password xxxxxxxxxxx
   user-id xxxxxxxxxxx
   }
 }

3、接下来,创建为每个pppoe接口创建NAT服务。
说明:作者的USG的eth2,是一条专线,以下配置中的eth2部分请忽略,下文删掉了unifi推送过来的rule(rule 6000)。



show service nat
 rule 5001 {
   log disable
   outbound-interface pppoe0
   protocol all
   type masquerade
 }
 rule 5002 {
   log disable
   outbound-interface eth2
   protocol all
   type masquerade
 }
 rule 5003 {
   log disable
   outbound-interface pppoe2
   protocol all
   type masquerade
 }
 rule 5004 {
   log disable
   outbound-interface pppoe3
   protocol all
   type masquerade
 }
 rule 5005 {
   log disable
   outbound-interface pppoe4
   protocol all
   type masquerade
 }

4、创建路由
192.168.2.1是作者eth2专线的next hop,请忽略

admin@Gateway# show protocols static 
 interface-route 0.0.0.0/0 {
   next-hop-interface pppoe0 {
   distance 1
   }
   next-hop-interface pppoe2 {
   distance 217
   }
   next-hop-interface pppoe3 {
   distance 218
   }
   next-hop-interface pppoe4 {
   distance 219
   }
 }
 route 0.0.0.0/0 {
   next-hop 192.168.2.1 {
   distance 220
   }
 }

5、创建Load Balance
说明:作者的USG的eth2,是一条专线,以下配置中的eth2部分请忽略。
另外,“transition-script /config/scripts/wan-event-report.sh” 是unifi独有的,load-balance中线路失效时,unifi会发一条通知。

show load-balance
 group wan_failover {
   interface eth2 {
   route-test {
   initial-delay 20
   interval 30
   type {
   script /config/scripts/check-eth2.sh
   }
   }
   weight 0
   }
   interface pppoe0 {
   route-test {
   initial-delay 20
   interval 10
   }
   weight 25
   }
   interface pppoe2 {
   route-test {
   initial-delay 20
   interval 10
   }
   weight 25
   }
   interface pppoe3 {
   route-test {
   initial-delay 20
   interval 10
   }
   weight 25
   }
   interface pppoe4 {
   route-test {
   initial-delay 20
   interval 10
   }
   weight 25
   }
   lb-local disable
   lb-local-metric-change disable
   sticky {
   dest-addr enable
   dest-port enable
   source-addr enable
   source-port enable
   }
   transition-script /config/scripts/wan-event-report.sh
 }

6、创建modify规则
说明:这些规则比较繁琐,目的是为了和unifi推送过来的规则兼容,但Unifi推送过来的规则有BUG,作者在unifi中创建了一个80端口转发(内网有一台web服务),unifi便把rule 3012推送过来,这条规则导致,内网所有主机访问外网http时,loadbalance失效(只会走默认口),作者以前提出过,但ubnt一直不修复,所以作者把unifi推送过来的部分又重新手写了一遍,即rule1998-rule2999,然后用一个accept的rule(rule3000),阻止usg执行有bug的部分(rule3001开始是unifi强制推送过来的,但永远不会被执行到)。

show firewall modify
 modify LOAD_BALANCE {
   description LOAD_BALANCE
   rule 1998 {
   action accept
   destination {
   group {
   address-group NETv4_pppoe2
   }
   }
   }
   rule 1999 {
   action accept
   destination {
   group {
   address-group NETv4_pppoe3
   }
   }
   }
   rule 2000 {
   action accept
   destination {
   group {
   address-group NETv4_pppoe4
   }
   }
   }
   rule 2001 {
   action accept
   destination {
   group {
   address-group NETv4_pppoe0
   }
   }
   }
   rule 2002 {
   action accept
   destination {
   group {
   address-group NETv4_eth2
   }
   }
   }
   rule 2003 {
   action accept
   destination {
   group {
   network-group corporate_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 2004 {
   action accept
   destination {
   group {
   network-group remote_user_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 2005 {
   action accept
   destination {
   group {
   network-group remote_site_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 2006 {
   action accept
   destination {
   group {
   network-group remote_client_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 2007 {
   action accept
   destination {
   group {
   address-group guest_portal_address
   port-group guest_portal_ports
   }
   }
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 2008 {
   action accept
   destination {
   group {
   network-group captive_portal_subnets
   }
   port 443
   }
   protocol tcp
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 2009 {
   action accept
   destination {
   group {
   address-group guest_allow_addresses
   }
   }
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 2999 {
   action modify
   modify {
   lb-group wan_failover
   }
   }
   rule 3000 {
   action accept
   }
   rule 3001 {
   action accept
   destination {
   group {
   address-group NETv4_pppoe0
   }
   }
   }
   rule 3002 {
   action accept
   destination {
   group {
   address-group NETv4_eth2
   }
   }
   }
   rule 3003 {
   action accept
   destination {
   group {
   network-group corporate_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3004 {
   action accept
   destination {
   group {
   network-group remote_user_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3005 {
   action accept
   destination {
   group {
   network-group remote_site_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3006 {
   action accept
   destination {
   group {
   network-group remote_client_vpn_network
   }
   }
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3007 {
   action accept
   destination {
   group {
   address-group guest_portal_address
   port-group guest_portal_ports
   }
   }
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 3008 {
   action accept
   destination {
   group {
   network-group captive_portal_subnets
   }
   port 443
   }
   protocol tcp
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 3009 {
   action accept
   destination {
   group {
   address-group guest_allow_addresses
   }
   }
   source {
   group {
   network-group guest_network
   }
   }
   }
   rule 3010 {
   action accept
   destination {
   port 5320
   }
   protocol tcp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3011 {
   action accept
   destination {
   port 5320
   }
   protocol tcp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3012 {
   action accept
   destination {
   port 80
   }
   protocol tcp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3013 {
   action accept
   destination {
   port 80
   }
   protocol tcp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3014 {
   action accept
   destination {
   port 6690
   }
   protocol tcp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3015 {
   action accept
   destination {
   port 6690
   }
   protocol tcp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3016 {
   action accept
   destination {
   port 8443
   }
   protocol tcp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3017 {
   action accept
   destination {
   port 8443
   }
   protocol tcp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3018 {
   action accept
   destination {
   port 3389
   }
   protocol tcp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3019 {
   action accept
   destination {
   port 3389
   }
   protocol tcp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3020 {
   action accept
   destination {
   port 16881
   }
   protocol tcp_udp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3021 {
   action accept
   destination {
   port 16881
   }
   protocol tcp_udp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3022 {
   action accept
   destination {
   port 14662
   }
   protocol tcp_udp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3023 {
   action accept
   destination {
   port 14662
   }
   protocol tcp_udp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3024 {
   action accept
   destination {
   port 8123
   }
   protocol tcp_udp
   source {
   group {
   network-group corporate_network
   }
   }
   }
   rule 3025 {
   action accept
   destination {
   port 8123
   }
   protocol tcp_udp
   source {
   group {
   address-group unifi_controller_addresses
   }
   }
   }
   rule 3026 {
   action modify
   modify {
   lb-group wan_failover
   }
   }
 }

7、把modify规则应用到lan口
说明:vlan130,是作者在unifi中创建的guest network

admin@Gateway# show interfaces ethernet eth1
 address 192.168.0.1/24
 firewall {
   in {
   ipv6-name LANv6_IN
   modify LOAD_BALANCE
   name LAN_IN
   }
   local {
   ipv6-name LANv6_LOCAL
   name LAN_LOCAL
   }
   out {
   ipv6-name LANv6_OUT
   name LAN_OUT
   }
 }
 vif 130 {
   address 192.168.10.1/24
   firewall {
   in {
   ipv6-name GUESTv6_IN
   modify LOAD_BALANCE
   name GUEST_IN
   }
   local {
   ipv6-name GUESTv6_LOCAL
   name GUEST_LOCAL
   }
   out {
   ipv6-name GUESTv6_OUT
   name GUEST_OUT
   }
   }
 }

8、没了。

2赞

交待一下背景,楼主的usg是运行在双wan模式,但wan2(eth2)是一条国外专线,所以要在wan1上进行一线多拨,等楼主有时间,讲一下一线多拨loadbalance和策略路由的组合,即把国外的流量走指定eth2,其余流量参与load balance的多拨。

支持一下大神

我单线3拨,4拨,极限都是250m左右,看来还有提升空间啊

不是USG或者ER-Lite吧,USG和ER-Lite的CPU才500Mhz,一旦失去offload,靠CPU转发,速度不过百。。。开了offload那就是电信级转发了。。。。

真大神!膜拜一下

benjaminlei 发表于 2018-5-13 20:29
不是USG或者ER-Lite吧,USG和ER-Lite的CPU才500Mhz,一旦失去offload,靠CPU转发,速度不过百。。。开了o …

ER-X一样有硬件nat,CPU还880mhz,是不是usg还不如er-x?

手动点赞!

支持&学习。虽然已转软路由。

liuluo 发表于 2018-5-14 08:52
支持&学习。虽然已转软路由。

我最近准备编译pppd,尝试一下并发拨号,突破一下最多4拨的限制

头大的, 设置基本和楼主一样的,但是我家的光猫是HG8546V,端口绑定了进出VLANID,用DHCP测试都没问题,就是没法桥接PPPOE拨号。用抓包软件看到USG已经把PPOE包发出去了,但是光猫就是没有回包,不知道什么原因。如果就直接默认设置拨号,都没问题。请教下看看什么问题。
设置是UBNT USG WAN口变成子接口 VIF 98,VIF 1101 还有默认的ETH0,接入光猫的LAN1 口,LAN1在光猫里面VLAN绑定为 98/1101,1101/1101 (1101是光纤上网绑定的VLANID)。不过我没有设置直接在ETH0拨号。只在VIF98 和VIF 1101 创建了两个。还有区别就是没有每个VIF 设置MAC 地址。y有考虑过光猫的VLAN功能不健全,但是DHCP通过VLAN可以拿到地址的。 请教下楼主还有什么需要注意的

建议用一台windows笔记本,在网卡高级设置中,分别设置为untag vlan,vlan98,vlan1101试试能否拨号,我在实现过程中,是先用windows确认可以通过vlan拨上号,才开始在usg上实现的。
然后,每个vif必须要手动设置一个mac,默认是使用eth0的mac,同时拨号,pppoe每个链接都要用不同的mac,这是必要条件。
usg要周期性的向unifi发送wan1和wan2的数据,为了unifi兼容,usg多拨有几个条件,首先,在unifi中必须设置为双wan模式,且wan1设置为pppoe拨号,这种模式下,unifi 推送过来的配置,pppoe0创建在eth0中,vif中的pppoe名称要从pppoe2开始,pppoe1是为wan2 pppoe接入保留的。这么写配置,unifi可以和usg兼容。

多谢,本来想装个Linux或者pfense测试下,可惜懒癌发作,以为抓个包可以结束,看来还是要动手。不过单线复用PPPOE多拨有什么办法在不启用LAN2 为WaN的情况下实现么(不怎加二层交换机在前面),有没有什么命令可以启用。这个要启用双WAN模式然后才能子接口多拨PPPOE有点肯爹,我本来还打算在LAN2 引个VOIP电话玩玩的。

大神哥,是真正可以解决问题的人,我觉得ubnt应该聘用你,点360个赞~!!!我还需要慢慢学习啊:(

感谢楼主的贡献,看不懂的朋友推荐用楼主给了另外一种叠加交换机的方式,成本低,效果好,原始500m下行,30m上行,上行端口限制120m的宽带,实现了完美多拨。

http://bbs.ubnt.com.cn/forum.php?mod=redirect&goto=findpost&ptid=19976&pid=129156&fromuid=23444

4拨测试.jpg

光猫的设置有意思 赞一个

楼主这种方法基本上就解决了我之前说的,一个ER-X通过两条线来拨两个号,而达到互不干扰的结果了吧:handshake

如果把交换机去掉,er-x直接和同一个光猫的多个wan口连接,仍旧下载跑不满,这个问题肯定是er-x的。

感觉不想玩ubnt了,固件的问题太多。

依然跑不满啊?:Q看楼主的思路,感觉是可以利用这种方式拨满速的,比较是逻辑上分成了两个路由器的?
如果这样都不行的话,那么就没办法了,彻底郁闷了,唯一看中的就是小巧,可以放进弱电箱里面的,结果不能够完成功能。。。

加交换机是可以跑满了,不加交换机不行,家里本来就有闲置的交换机,升级500M宽带电信还送了一套,基本没增加成本。