ubnt解决方案
查看: 3479|回复: 6

OpenWrt路由利用mwan3实现双ISP按国内国外智能分流

[复制链接]

165

回帖

781

积分

539 小时

在线时间

中尉

注册时间
2013-9-11
金币
559 个
威望
0 个
荣誉
0 个

尚未签到

发表于 2015-11-28 20:08 |显示全部楼层
本帖最后由 helansnow 于 2015-11-28 20:10 编辑

起因是今年以来上海电信宽带出国速度奇慢,几次投诉未果,为了访问国外的网页,无奈之下只能加了根移动20M宽带。看到OpenWrt里有个mwan3插件支持将一个LAN口转化为WAN口,遂从零起步(Linux知识也基本为零),恶补OpenWrt方面的知识,略有心得;又因Koolshare坛里的大牛们目前还未有推出类似的op固件,故本人虽属小白,也斗胆和坛友们分享一下。
mwan3的主要维护人是大牛Adze,在OpenWrt官方论坛上,有关mwan3的帖子近60页,大概仅次于WRT1900AC的350页(WRT1900AC/1200AC的毛病之多也可见一斑)。以下我按步骤详述我的旅程和最终方案。本文旨在帮助和我水平相当和有相似网络环境的菜鸟,老鸟和无双线环境的就可绕道了。

第一部分 mwan3项目简述

opkg install mwan3 luci-app-mwan3就轻松装完了mwan3,但之前要将一个LAN口通过VLAN的方式分出去,将来当wan2。每部路由的layout不尽相同,WRT1900Acv2/WRT1200AC的做法参考拙作:http://www.chiphell.com/thread-1391474-1-1.html里有关的部分。做完后像是下图:

这时,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段的更新并不是那么频繁)。如何改进,下面我会提到。

第二部分 项目改进

如何把apnic官网上的中国IP地址段导出来,就不详述了,可以参考这篇:http://jingyan.baidu.com/album/ff42efa9068ad5c19e2202a0.html?picindex=4,我是用笨办法,使用了excel、word、Notepad等工具,最后形成这个格式(近6000条):
ipset add chinaip 1.0.1.0/24
ipset add chinaip 1.0.2.0/23
ipset add chinaip 1.0.8.0/21
ipset add chinaip 1.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 chinaip hash:net hashsize 8192
ipset add chinaip 1.0.1.0/24
ipset add chinaip 1.0.2.0/23
ipset add chinaip 1.0.8.0/21
ipset add chinaip 1.0.32.0/19
……(此处省去5000多条)
exit 0

至此,除去最后一步外,就大功告成了。

第三部分 dnsmasq的设置

这步其实很重要,因为国内网站和CDN加速的网站,如果用8.8.8.8解析就太慢了。简单谈一下,首先是建立一个目录/etc/dnsmasq.d,把想利用114DNS解析的网站的设置文件全部放在这个目录下,详见:https://github.com/felixonmars/dnsmasq-china-list,然后在/etc/dnsmasq.conf里增加这段:

no-resolv
no-poll
server=8.8.8.8
server=8.8.4.4
conf-dir=/etc/dnsmasq.d

最后,重新启动,上http://www.ip138.com/ 看IP是否显示的是你电信的地址,而上http://whatismyipaddress.com/ 看是否是移动分配的IP。其实讲到刚才第三步,有些聪明的坛友已经察觉到了,既然国内国外都分流了,那么搭个梯子什么的可不可以?当然是可以的,不过就不在这篇里叙述了。

另,移动也有自己的IP地址段,完美起见,mwan3第一条也可以将以移动的目标地址为条件建立一条规则,这样从上到下就有三条规则:第一,符合移动IP段的走wan;第二、除第一条之外的国内IP地址段利用ipset走wan2;第三、剩下的也就是国外的统统走wan


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x

评分

1

查看全部评分

56

回帖

722

积分

289 小时

在线时间

中尉

注册时间
2015-7-27
金币
624 个
威望
1 个
荣誉
0 个
累计签到:29 天
连续签到:0 天
[LV.50]初入江湖
发表于 2015-11-28 20:33 |显示全部楼层
不知道你在说什么,好像很牛逼
回复

使用道具 举报

148

回帖

650

积分

759 小时

在线时间

中尉

注册时间
2014-12-4
金币
398 个
威望
1 个
荣誉
0 个
累计签到:1 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2015-11-28 22:53 来自手机 |显示全部楼层
你这是小白么 看了几行就晕了   我才是小白菜好吗   
回复

使用道具 举报

头像被屏蔽

22

回帖

100

积分

8 小时

在线时间

禁止访问

注册时间
2015-10-27
金币
67 个
威望
2 个
荣誉
0 个
累计签到:4 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2015-11-29 11:06 来自手机 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1165

回帖

4581

积分

997 小时

在线时间

少校

折腾游侠

灌水天才

注册时间
2014-2-15
金币
3232 个
威望
1 个
荣誉
0 个
累计签到:643 天
连续签到:0 天
[LV.730]常住居民
发表于 2015-11-29 13:11 |显示全部楼层
支持一下! 现在爬出去难了
回复

使用道具 举报

63

回帖

2916

积分

263 小时

在线时间

少校

注册时间
2014-10-31
金币
2818 个
威望
1 个
荣誉
0 个
累计签到:338 天
连续签到:0 天
[LV.365]无线熟人
发表于 2015-11-29 13:57 |显示全部楼层
好麻烦,为啥不用ChinaDNS?
回复

使用道具 举报

636

回帖

1804

积分

997 小时

在线时间

上尉

注册时间
2008-7-6
金币
1016 个
威望
1 个
荣誉
0 个
累计签到:42 天
连续签到:0 天
[LV.50]初入江湖
发表于 2015-11-29 19:12 来自手机 |显示全部楼层
技术贴,看不懂也要顶顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

站点统计 | Archiver | 手机版 | 无线门户 ( 粤ICP备11076993号|粤公网安备44010602008359号 ) |网站地图

GMT+8, 2024-5-3 19:16

返回顶部 返回列表