找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 26203|回复: 26

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

  [复制链接]
发表于 2015-11-28 16:47 | 显示全部楼层 |阅读模式
本帖最后由 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项目简述

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 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的设置

这步其实很重要,因为国内网站和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地址段利用ipsetwan2;第三、剩下的也就是国外的统统走wan

本帖子中包含更多资源

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

×

评分

参与人数 1恩山币 +2 收起 理由
hcyme + 2 策略路由

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2015-11-28 17:37 | 显示全部楼层
楼主的应用环境比较复杂,用ros比op来的简单,ros适用于任何复杂的环境

点评

说了是给菜鸟看的,方案和欲达到的结果受这个前提制约。ros的问题是1)入门难;2)资料相对少;3)软件还是要收费的。  详情 回复 发表于 2015-11-28 17:42
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2015-11-28 17:42 | 显示全部楼层
shenyz 发表于 2015-11-28 17:37
楼主的应用环境比较复杂,用ros比op来的简单,ros适用于任何复杂的环境

说了是给菜鸟看的,方案和欲达到的结果受这个前提制约。ros的问题是1)入门难;2)资料相对少;3)软件还是要收费的。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-2-3 00:55 | 显示全部楼层
你好!看了你的帖子学了很多,前面两步都弄好了,效果确实不错,但是第三步确实不知道怎么弄,请问能说的稍稍详细点么?谢谢
尤其是“把想利用114DNS解析的网站的设置文件全部放在这个目录下”不知道怎么搞!

第三部分 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
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-8-3 23:01 来自手机 | 显示全部楼层
这个帖子非常棒,找好久了,等过段时间就试试。用esxi虚拟试试
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-9-2 22:20 | 显示全部楼层
一个很菜的问题
建立了set之后,怎么应用到mwan里面?
难不成直接在规则的目标地址里面输入chinaip?但不是只能输入CIDR格式么……

点评

mwan3有ipset的选项。  详情 回复 发表于 2016-12-26 19:21
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-12-26 19:21 | 显示全部楼层
阿泥基 发表于 2016-9-2 22:20
**** 作者被禁止或删除 内容自动屏蔽 ****

mwan3有ipset的选项。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-12-26 21:58 | 显示全部楼层
帮lz补充一些吧
ipset可以用restore命令从某个文件中一次载入所有的ipset,这样速度会快很多。并且rc.local文件就不用写入那么多内容了。

dns的处理建议下载chinadomain文件,里面的域名全部用电信的dns服务器解析,其他域名通过移动的dns解析,这样可以做到dns的最优化解析。

点评

restore命令如何写,请教一下。谢谢!并祝新年快乐! DNS以后新的部署,即国内的3万条用114解析,国外的用部署于V-P-S上的pdnsd来解析。  详情 回复 发表于 2016-12-31 23:19
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2016-12-27 09:31 | 显示全部楼层
楼主写得不错,这里面最麻烦的应该是DNS解析部分,因为有涉及到CDN,最好还是负载均衡分别用两条线路去解析。这样得到的效果可能会好一些。

点评

/etc/dnsmasq.conf已经改为: no-resolv no-poll domain-needed no-negcache all-servers cache-size=8192 ###pdnsd server=139.138.137.136#443 conf-dir=/etc/dnsmasq.d 国内3万多条走114,国外走V-  详情 回复 发表于 2016-12-31 23:22
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-12-31 23:19 | 显示全部楼层
BettermanBao 发表于 2016-12-26 21:58
帮lz补充一些吧
ipset可以用restore命令从某个文件中一次载入所有的ipset,这样速度会快很多。并且rc.loca ...

restore命令如何写,请教一下。谢谢!并祝新年快乐!

DNS以后新的部署,即国内的3万条用114解析,国外的用部署于V-P-S上的pdnsd来解析。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2016-12-31 23:22 | 显示全部楼层
ghostja 发表于 2016-12-27 09:31
楼主写得不错,这里面最麻烦的应该是DNS解析部分,因为有涉及到CDN,最好还是负载均衡分别用两条线路去解析 ...

/etc/dnsmasq.conf已经改为:

no-resolv
no-poll
domain-needed
no-negcache
all-servers
cache-size=8192
###pdnsd
server=139.138.137.136#443
conf-dir=/etc/dnsmasq.d

国内3万多条走114,国外走V-P-S上的pdnsd

点评

这样做解决了一部分问题,主要是国内针对CDN,可能电信解析出来是移动的,移动解析出来是电信的。所以,关于这点。我还不知道有什么比较好的解决方法。  详情 回复 发表于 2017-1-1 11:37
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-1-1 11:37 | 显示全部楼层
helansnow 发表于 2016-12-31 23:22
/etc/dnsmasq.conf已经改为:

no-resolv

这样做解决了一部分问题,主要是国内针对CDN,可能电信解析出来是移动的,移动解析出来是电信的。所以,关于这点。我还不知道有什么比较好的解决方法。

点评

这里的项目:https://github.com/felixonmars/dnsmasq-china-list,3万多条国内的域名用114解析,当然也可以用119.29.29.29来解析,格式是: ...... server=/ejixun.com/119.29.29.29 server=/ejoy.com/119.29.  详情 回复 发表于 2017-1-1 14:00
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2017-1-1 14:00 | 显示全部楼层
ghostja 发表于 2017-1-1 11:37
这样做解决了一部分问题,主要是国内针对CDN,可能电信解析出来是移动的,移动解析出来是电信的。所以, ...

这里的项目:https://github.com/felixonmars/dnsmasq-china-list,3万多条国内的域名用114解析,当然也可以用119.29.29.29来解析,格式是:

......
server=/ejixun.com/119.29.29.29
server=/ejoy.com/119.29.29.29
server=/ejrfood.com/119.29.29.29
server=/ejstudy.com/119.29.29.29
server=/eju.com/119.29.29.29
server=/ejunshi.com/119.29.29.29
server=/ek6.com/119.29.29.29
......

CDN的域名也可以放在这个.conf文件里,那么用国内的DNS解析就是就近的那个。这个.conf文件放在/etc/dnsmasq.d目录下,在/etc/dnsmasq.conf标明路径即可,CDN解析很快,比如我这里首次打开apple.com也就1秒钟。

点评

可能我描述不是很明确,我说的情况是这样的。比如,同样用114.114.114.114去解析,从电信出口出去的DNS请求可能从114解析到的是电信的IP,从移动出口出去的请求可能从114返回的是移动的IP。 所以,主要问题是从哪个  详情 回复 发表于 2017-1-2 12:27
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-1-2 12:27 | 显示全部楼层
helansnow 发表于 2017-1-1 14:00
这里的项目:https://github.com/felixonmars/dnsmasq-china-list,3万多条国内的域名用114解析,当然也 ...

可能我描述不是很明确,我说的情况是这样的。比如,同样用114.114.114.114去解析,从电信出口出去的DNS请求可能从114解析到的是电信的IP,从移动出口出去的请求可能从114返回的是移动的IP。
所以,主要问题是从哪个出口出去解析的问题。并非是哪些域名用某个公共DNS解析的问题。

点评

不太理解。。。难道不是先DNS解析完后,再决定从哪个wan吗?114解析完,得到目标地址的IP地址,只要把移动的地址段归到一个ipset,然后定义这个ipset强制走移动的wan口不就好了吗?如: ipset create cmcc hash:n  详情 回复 发表于 2017-1-3 20:24
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2017-1-3 20:24 | 显示全部楼层
本帖最后由 helansnow 于 2017-1-3 20:27 编辑
ghostja 发表于 2017-1-2 12:27
可能我描述不是很明确,我说的情况是这样的。比如,同样用114.114.114.114去解析,从电信出口出去的DNS请 ...

不太理解。。。难道不是先DNS解析完后,再决定从哪个wan吗?114解析完,得到目标地址的IP地址,只要把移动的地址段归到一个ipset,然后定义这个ipset强制走移动的wan口不就好了吗?如在/etc/firewall.user里或/etc/rc.local里加上:

ipset create cmcc hash:net
ipset add cmcc 101.144.0.0/12
ipset add cmcc 103.20.112.0/22
ipset add cmcc 103.21.176.0/22
ipset add cmcc 103.3.128.0/22
ipset add cmcc 103.62.24.0/22
ipset add cmcc 110.192.0.0/11
ipset add cmcc 110.96.0.0/11
ipset add cmcc 111.0.0.0/10
ipset add cmcc 112.0.0.0/10
ipset add cmcc 115.180.0.0/14
ipset add cmcc 117.128.0.0/10
ipset add cmcc 118.204.0.0/14
ipset add cmcc 120.192.0.0/10
ipset add cmcc 120.90.0.0/15
ipset add cmcc 122.64.0.0/11
ipset add cmcc 123.64.0.0/11
ipset add cmcc 183.192.0.0/10
ipset add cmcc 211.103.0.0/17
ipset add cmcc 211.136.0.0/14
ipset add cmcc 211.140.0.0/15
ipset add cmcc 211.142.0.0/17
ipset add cmcc 211.142.128.0/17
ipset add cmcc 211.143.0.0/16
ipset add cmcc 211.98.0.0/16
ipset add cmcc 218.200.0.0/14
ipset add cmcc 218.204.0.0/15
ipset add cmcc 218.206.0.0/15
ipset add cmcc 221.130.0.0/15
ipset add cmcc 221.172.0.0/14
ipset add cmcc 221.176.0.0/13
ipset add cmcc 222.32.0.0/11
ipset add cmcc 223.112.0.0/14
ipset add cmcc 223.116.0.0/15
ipset add cmcc 223.120.0.0/13
ipset add cmcc 223.64.0.0/11
ipset add cmcc 223.96.0.0/12
ipset add cmcc 36.128.0.0/10
ipset add cmcc 36.192.0.0/11
ipset add cmcc 39.128.0.0/10
ipset add cmcc 43.247.240.0/22
ipset add cmcc 43.251.244.0/22
ipset add cmcc 45.121.172.0/22
ipset add cmcc 45.121.176.0/22
ipset add cmcc 61.232.0.0/14
ipset add cmcc 61.236.0.0/15

点评

没事,我的想法和你的应用稍有不同。我的想法是在策略路由的基本上让流量尽量均衡分布在两个出口上。  详情 回复 发表于 2017-1-3 20:36
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-19 20:04

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表