本帖最后由 helansnow 于 2015-11-28 18:37 编辑
起因是今年以来上海电信宽带购物速度奇慢,几次投诉未果,为了访问国外的网页,无奈之下只能加了根移动20M宽带。看到OpenWrt里有个mwan3插件支持将一个LAN口转化为WAN口,遂从零起步(Linux知识也基本为零),恶补OpenWrt方面的知识,略有心得;又因Koolshare坛里的大牛们目前还未有推出类似的op固件,故本人虽属小白,也斗胆和坛友们分享一下。
mwan3的主要维护人是大牛Adze,在OpenWrt官方论坛上,有关mwan3的帖子近60页,大概仅次于WRT1900AC的350页(WRT1900AC/1200AC的毛病之多也可见一斑)。以下我按步骤详述我的旅程和最终方案。本文旨在帮助和我水平相当和有相似网络环境的菜鸟,老鸟和无双线环境的就可绕道了。
第一部分 mwan3项目简述
这时,LAN1口(port3)就分出来了,然后在Interfaces里面建立wan2,设置它的参数,关键一点是metric值一定要赋,比如wan的值手动设为10,wan2设为20。 wan2的物理关联到你刚建的VLAN,比如eth0.3。防火墙规则就合并到wan里去好了。
如果mwan3安装成功,luci的Network菜单里,有个Load Balancing选项,点进去就可以设置mwan3,界面很直观,一点不难,而且大多数缺省的设置甚至不用改。
首先设置mwn3的Interfaces,缺省就两个wan和wan2,不用改太多,建议把要ping的网址改为所在wan口访问的ISP的DNS服务器IP地址。我的wan对应移动,wan2对应电信,是因为OpenWrt的源,电信基本无法访问,所以缺省设为移动。
其次,设置members,基本也不用动,缺省有四组,比如wan_m1_w3表示wan口,优先级第1,带宽为3,wan2_m2_w2表示wan2口,优先级第2,带宽为2,等等。举例,如果你的移动20M,电信100M,那把wan2对应的w2改为w15就行了(是3的5倍),如果没有负载均衡的需要也不必改。
第三,设置Policies,缺省有五组,就是负载均衡,wan2做wan的备份,wan做wan2的备份,只走wan和只走wan2,基本也不用加。
最后,设置Rules,这步最重要,就是按你的实际需要设置分流的规则,如图: 这里,这条名叫China_IP的规则,Policy assigned是wan2_wan,就是优先走wan2也就是电信线路,如果电信挂了走备份的移动线路,Destination Address就是把要走电信的目标地址全部列在这里,格式是CIDR,之间用逗号隔开,注意不能有空格。
除了China_IP外,再添加一条新规则,就是无条件地走wan_wan2,因为mwan3的特点是自上而下地匹配,一旦匹配就不往下执行,所以实际的情况就是,访问国内的IP走wan2,国外的走wan。
到这里,其实项目已经完成了,因为中国分配的地址段不难找,只要全部cope-paste过来不就行了?我之前也是这样的如意算盘,但是实际上栏目的IP地址段数量是有限的,大概是300条不到,而中国的IP段近6000条,所以实际上我后来是将大表人工拆分成20几个部分,然后重复写了20几个规则。工作量还蛮大的,以后维护也很不方便(当然,IP段的更新并不是那么频繁)。如何改进,下面我会提到。
第二部分 项目改进
ipset add chinaip1.0.1.0/24 ipset add chinaip1.0.2.0/23 ipset add chinaip1.0.8.0/21 ipset add chinaip1.0.32.0/19 ……(此处省去5000多条)
这里有个ipset的命令,对,就是它,回过头去看上面那张图,有个IPset栏目,这里直接填入chinaip来作为筛选的条件。把近6000个IP地址段添加到一个set里,这样,一条规则可以代替之前20几条,而且以后维护也相对方便。当然,先要建立chinaip这个set,命令是:ipset create chinaip hash:net hashsize 8192。这里要注意hash:net,如果选IP就不对了,另外缺省的size是1024,所以要增加到6000以上的数字,我选的是8192。
把上面的命令利用winscp和copy-paste大法存到/etc/rc.local里面(其实应该有更好的方法,比如指令,对菜鸟先采用简单的),这个文件变成下面这个样子:
# Put your customcommands here that should be executed once # the system initfinished. By default this file does nothing. ipset create chinaiphash:net hashsize 8192 ipset add chinaip1.0.1.0/24 ipset add chinaip1.0.2.0/23 ipset add chinaip1.0.8.0/21 ipset add chinaip1.0.32.0/19 ……(此处省去5000多条) exit 0
至此,除去最后一步外,就大功告成了。
第三部分 dnsmasq的设置
no-resolv no-poll server=8.8.8.8 server=8.8.4.4 conf-dir=/etc/dnsmasq.d
另,移动也有自己的IP地址段,完美起见,mwan3第一条也可以将以移动的目标地址为条件建立一条规则,这样从上到下就有三条规则:第一,符合移动IP段的走wan;第二、除第一条之外的国内IP地址段利用ipset走wan2;第三、剩下的也就是国外的统统走wan。 |