之前写过一篇文章《OpwnWrt 路由器MWAN3多线多拨实现方法》,介绍了如何在具备多根入室宽带网线的情况下实现网络带宽的叠加。多线多拨一般应用在多个不同运营商线路的负载均衡场景中,那么对于同一运营商,多个帐号又该如何实现呢?
比如有如下一个应用场景,我有两个联通的宽带帐号,在普通情况下,我会购买两个路由器,两个卧室可能都有宽带接口,于是我每个卧室放一个路由器,分别通过不同的PPPOE帐号密码进行拨号,两个卧室的公网IP都不同。这是在没有OpenWrt路由器时候的使用方法,但是这样无法将两个宽带帐号的带宽叠加,如果我两个帐号都是20兆宽带,那么每次我下载最多就跑到20M,现在我想利用我两个宽带帐号的优势实现40兆宽带,那么应该怎么做呢?
首先我们依然可以用以前介绍的多线多拨的方式,不过首先我们需要一个交换机,把单根的入户网线通过交换机分出两个来接到路由器的两个WAN口上,再在路由器上对每个WAN口分别PPPOE拨号,获得两个不同的公网IP,然后再使用mwan3进行路由表级的负载均衡。实现方法可以去看《OpwnWrt 路由器MWAN3多线多拨实现方法》这篇文章。
那么什么叫做“单线多拨”呢。由于我们是同一个运营商的同一根网线进行拨号,所以我们没有必要在路由器上搞出两个WAN口,也不需要再买个交换机,直接在同一个WAN口拨号两次就可以了,路由器内部搞一个虚拟交换机,通过划分VLAN的方式解决。所以通过单线多拨能节省我们一个交换机的钱。
单线多拨的大体实现步骤是这样的
1、新建两个虚拟的vlan,以公网的网卡为端口
2、在两个vlan中分别使用不同的PPPOE帐号密码进行拨号,获得两个不同的公网IP
3、通过mwan3实现路由表级的负载均衡
首先第一步虚拟vlan是通过kmod-macvlan这个模块实现的,换句话说macvlan为我们提供了一个虚拟交换机,省下了我们一个小交换机的钱。具体方法如下
安装opkg update
opkg install kmod-macvlan mwan3 luci-app-mwan3
1、删除OP系统原WAN接口,比如WAN和WAN6两个接口,只保留LAN接口,删完以后的配置截图如下:
在LEDE系统中,如果把所有桥接WAN口的接口都删掉后,我们会丢失掉连接外网的物理网卡eth0.2,在ifconfig中就看不到了,此时我们就无法在eth0.2这个外网物理网卡上部署虚拟vlan了
所以第一步我们要把eth0.2这块网卡找回来。有人会问那么我们之前不删除原来OP默认的WAN和WAN6接口不就好了?答案是不行的,因为OP默认的WAN接口是桥接eth0.2的,只要有任何一个接口桥接eth0.2我们之后新建的vlan就不可能拨号成功,所以WAN接口必须删除。那么我们又如何找回eth0.2呢,方法就是新建一个接口,协议选择“不配置协议”即可,这里我把这个专门用来召唤eth0.2接口的接口命名为interface如下图
注意最重要的是“包括一下接口”选择“eth0.2”,不要忘记选择“开机自动运行”,不要勾选“桥接接口”
防火墙选择“wan”
这样我们的eth0.2就回来了,截图如下
下面我们就可以在eth0.2的上面建立vlan了,执行如下代码建立vth0和vth1两个vlan
ip link add link eth0.2 name vth0 type macvlan
ifconfig vth0 up
ip link add link eth0.2 name vth1 type macvlan
ifconfig vth1 up
然后使用ifconfig就能发现我们又多了两个虚拟接口,如下
下面就可以在vth0和vth1上面设置拨号了,所以我们新建WAN口,选择PPPOE协议,填好第一个帐号密码
注意为了之后路由表的负载均衡配置,我们每一个虚拟wan的metric值(网关跃点)都要不同,注意别忘了勾选“开机自动运行”
然后对接我们刚刚新建的vth0
防火墙一定要选择wan区域
然后我们点击“保存&应用”,就会发现它已经自动拨号了,获得了第一个公网IP地址
这样一拨就完成了,下面我们只需要再新建一个wan1接口,对接vth1虚拟vlan,然后其他的和wan0一样即可,注意这里的PPPOE帐号,metric(网关跃点)要与wan0不同
点击“保存&应用"后会发现wan1也自动拨号成功了,获得了第二个公网IP(下图的wan应该为wan0)
有了这两个wan口之后基本就成功一大半了,剩下的步骤可以按照《OpwnWrt 路由器MWAN3多线多拨实现方法》文章里介绍的通过mwan3进行负载均衡,一模一样所以就不多赘述了。
但是要注意vth0和vth1由于是我们使用shell命令建立的虚拟vlan,所以路由器重启之后就会失效了,所以我们需要在路由器开机的时候自动添加这两个vlan,方法就是把上面添加vlan的语句放到rc.local里执行
肯定有人会问,如果没有两个不同的PPPOE帐号,只有一个能不能拨两次。这个问题要看运营商怎么配置了,有些地区,当然很罕见,用同一个PPPOE帐号可以先后拨号并都能拨上,这样你和你的邻居就可以共用同一个帐号使用宽带了,当然这种情况不多。还有一种是在宽带的签约的时候就签两个以上的session,这样你和你的邻居就可以使用同一个PPPOE帐号任意的上网了。并且如果使用上面的单线多拨的时候,vth0和th1的帐号密码可以相同,并且都能拨上号。
当然更多的时候你使用同一个帐号密码,vth0和vth1只能拨通一个,只获得一个IP,如下图,但此时可以通过一种叫“并发多拨”的技术强制进行拨号,原理就是两个拨号进程同时执行,时间要控制的非常精确,不要让服务器发现你是“一先一后”进行拨号,当然由于精度要非常高,一次往往难以拨成,一般要通过写个小脚本重复拨号多次才能成功。这种拨号不仅拨的慢,而且违反了和运营商的合同约定,属于薅社会主义羊毛的行为,不推荐使用,网上有这种并发多拨的固件,所以我这里就不详细介绍了。