前言

搬家了,换上了了20M的电信公寓宽带,官方给的使用文档居然坑爹的要死,需要手机下载他们的APP,然后扫码登录,这就算了,关键是登录后每24小时断一次,这也就导致了玩游戏玩得正High的时候,突然掉线,还被队友调侃,说我总是拔网线。

幸运的是,一不小心找到了电信的内部文档,不仅得知了光猫超级管理员密码,还得到了一个重要信息:原来除了扫码登录这种方式以外,公寓带宽也是可以通过PPPoE方式使用账号密码登录的。于是我立马配置了一下路由器,没想到还真成功了。测了一下网速,足足的20M,嗯。。。对于习惯了大水管的我来说,好像有那么一点点慢呢。╮(╯_╰)╭

又仔细看了一下内部文档,上面写着扫码方式最多支持两台终端连接,而拨号方式不限制终端数量。啥?不限制?那我可以拨一个,再拨一个,然后就是20M * 2了?想想还真是那么回事,何不试试呢?说干就干,从角落里翻出吃灰的Netgear R6100,然后打开Google找了一圈,大致了解了一下实现单线多拨与负载均衡让网速叠加的方法。顺便吐槽一下那些教程,先不说格式多乱,反正就那么一两篇文章,到处转来转去。最终想想,还是把自己的折腾过程记录下来,说不定下次换新路由器以后,还能照着这个教程来,省得找来找去。

环境准备

前面说了,实现单线多拨和负载均衡,主要是靠macvlan和mwan3这两个软件。macvlan可以创建多个虚拟网卡链接到eth0,也是就WAN口,然后可以在这些虚拟网卡上创建多个虚拟WAN口,每个虚拟WAN口拨一个PPPoE账号,这样便可以实现一个单线多拨功能。而mwan3的作用,就是把你路由器的流量,做路由表级别的负载均衡,按照设置的优先级和权重分配到不同的WAN口上,从而起到网速叠加作用。

如果路由器是运行的OpenWrt或者LEDE,只需用过以下命令安装这两个软件:

1
2
opkg update
opkg install kmod-macvlan mwan3 luci-app-mwan3

其中,luci-app-mwan3是mwan3的luci界面,可以很方便的使用网页端对mwan3进行配置。

测试多拨

创建虚拟网卡

即使内部文档写了拨号方式支持无限个终端,但是还是将信将疑,还是要自己试了才知道结果。如果这一步失败了,那也没有继续往下的必要了。不过幸运的是,虽然不是像文档上说的那样支持无限个终端,但是能够成功拨上两个相同的账号,也就是说如果配置得当,网速翻倍是没什么问题的。

要实现多拨,首先要使用macvlan来创建虚拟网卡。网上找的教程五花八门,有把虚拟网卡链接到eth0的,也有链接到eth0.2的,至于具体是哪一个,要取决于路由器上VLAN是怎么划分的。如果像我一样,没有配置VLAN,那么就是eth0无误了。如果不确定是哪一个,可以进入路由器的luci界面,找到当前的WAN口,查看其对应的物理端口是哪一个,如图所示:

查看WAN对应的网卡

在弄清楚WAN口对应的是哪一个网卡以后,便可使用macvlan创建虚拟网卡了,命令如下:

1
2
ip link add link eth0 name veth0 type macvlan
ifconfig veth0 up

第一行命令是创建一个类型为macvlan,名字为veth0的虚拟网卡,并通过虚拟链路和eth0连接起来。

第二行命令是启用刚刚创建的veth0网卡。执行完毕后,输入ifconfig命令,应该就能看到刚刚创建成功的虚拟网卡veth0了(谜之打码):

1
2
3
4
5
6
7
8
9
root@NETGEARX:~# ifconfig 
//省略其他网卡信息
veth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
inet6 addr: fe80::34cb:ebff:fe14:c71/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2912296 errors:0 dropped:9416 overruns:0 frame:0
TX packets:1397318 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:3174581557 (2.9 GiB) TX bytes:128851574 (122.8 MiB)

别忘了将上面两行创建虚拟网卡的命令写进路由器的Startup脚本里面。一切OK?那就继续往下。

创建虚拟WAN并拨号

虚拟网卡创建成功以后,就可以创建虚拟WAN了,这一步很简单,直接通过LEDE的luci界面完成就行。我将虚拟WAN口命名为vwan1,协议类型选PPPoE,物理接口选择刚刚创建的veth0:

创建虚拟WAN

虚拟WAN口添加完成后,就像设置原来的WAN口一样设置好PPPoE账号和密码等信息。但是有一点需要注意:为了之后配置负载均衡,必须要给每个WAN口指定唯一的网关越点,如下图所示:

指定唯一的网关越点

设置完成后,点击保存并应用,查看是否能拨号成功。如果成功了,那么恭喜,否则,说明当前运营商线路不支持多拨,也就没有必要继续往下看了。

负载均衡

即使多拨成功了,也只能说成功了一半。因为有些运营商限制了端口的速度,即使多拨成功,也可能无法超过运营商的限制,无法实现网速叠加,这样的多拨也没什么特别大的意义。至于是否能实现网速叠加,就需要用到mwan3了。

mwan3是一个强大的软件,能实现路由表级别的负载均衡,通过设定的权重和网关越点来分配流量到不同的WAN口。结合luci-app-mwan3,配置mwan3也是非常简单的事情,主要配置这四个部分:接口、成员、策略和规则。在配置之前,先前往“网络” -> “负载均衡” -> “配置”,删除掉默认的配置项。

接口

进入到“网络” -> “负载均衡” -> “配置” -> “接口”,在此处配置路由器上需要负载均衡的WAN口。在此处,我将配置路由器原本的WAN口以及创建的虚拟VWAN。

在添加前的输入框中输入wan(名称大小写要与/etc/config/network中对应),点击添加,进入到如下界面:

添加接口

添加接口的时候,主要是要填写追踪的域名或者IP,用于判断接口是否在线,在此我填写的是DNSPod提供的公共DNS服务器:129.29.29.29,你也可以填写其他地址。后面的参数可以保持默认,也可以参照我的进行一些微调。

按照相同的步骤添加VWAN,添加完毕以后点击保存,进行下一项的配置。

成员

添加完接口以后,mwan3还无法直接使用他们。负载均衡的实现主要是靠每个WAN口的越点数和权重,mwan3中使用成员来设置每一个 MWAN 接口的跃点数 (即接口优先级) 和所占比重。

进入到“网络” -> “负载均衡” -> “配置” -> “成员”,在添加按钮前的输入框中输入member_wan,点击添加,将进入到添加成成员界面。此处配置非常简单,只需要为每个成员选好接口就行,跃点数和权重默认为1即可。

按照相同的步骤添加member_vwan,然后继续配置策略。

策略

策略”把成员进行分组,告诉 MWAN 如何分配“规则”中使用这一策略的流量,拥有较低跃点数的成员将会被优先使用,拥有相同跃点数的成员把流量进行负载均衡,进行负载均衡的成员之间拥有较高比重的成员将会被分配到更多流量。

此处我们添加一个名为load_balance的策略,使用的成员选择member_wan和member_vwan,备用成员选择不可达,然后点保存即可。

规则

规则基于 IP 地址、协议、端口把流量划分到指定的“策略”中。 规则按照从上到下的顺序进行匹配。除了第一条能够匹配一次通信的规则以外,其它规则将被忽略。不匹配任何规则的通信将会由系统默认路由表进行。

此处我们添加一个名为default的规则,前四项留空,通讯协议选all,分配的策略选择之前添加的load_balance即可。

添加规则

配置完成后,打开 https://www.speedtest.net 来测测网速吧!