找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 8815|回复: 5

OpenWrt下通过mwan3实现电信/移动/联通等多ISP负载均衡

[复制链接]
发表于 2019-3-1 10:30 | 显示全部楼层 |阅读模式
本帖最后由 yumeimm 于 2019-3-1 10:34 编辑


0. 前言
随着移动互联网的普及,家庭宽带越来越便宜,带宽也越来越大。 而运营商也适时推出了手机和宽带绑定的策略。
这样我们的家庭往往就具有了多条上网宽带,可以接入不同的运营商,例如电信、联通、移动等。

既然有了多条宽带,就要想办法充分利用。在OpenWrt原生系统中,就具有这样的负载均衡功能,这个软件包就是mwan3.
安装此软件包方法如下:
  1. opkg update
  2. opkg list *mwan*
  3. opkg install mwan3
  4. opkg install luci-app-mwan3
复制代码
其实现的原理,是在路由器上配置多个不同wan接口,然后运用一定的策略实现流量的负载均衡。比如权重,比如ipset等。

1.  IPSET介绍
ipset是iptables的扩展。 ipset是一种对IP地址集合进行分类的方法,通过对地址集合进行分类,可以在不同的集合上进行不同的操作。
对于多ISP负载均衡,我们可以将电信的IP地址集合用IPSET标记为telecom,  对移动的IP地址集合标记为cmcc, 对联通的IP地址集合标记为unicom,  等等(教育网/长宽/等类似).

然后在mwan3中建立规则, 让IPSET集合telecom走电信的wan口, 让IPSET集合cmcc走移动的wan口, 然IPSET集合unicom走联通的wan口即可。
例如如下命令创建了名为cmcc的IPSET集合,并添加了2条IP网络地址:
  1. ipset create cmcc hash:net
  2. ipset add cmcc 39.128.0.0/10
  3. ipset add cmcc 117.128.0.0/10
复制代码

我们可以用一个脚本来实现它: https://github.com/siwind/CHINA- ... enwrt/load_ipset.sh

命令: “load_ipset.sh  cmcc.txt  cmcc"  通过读取一个文本文件cmcc.txt 和 IPSET名字"cmcc" 建立了一个叫cmcc的IPSET集合。

在OpenWrt中, 将如下命令添加到开机启动文件即可开机加载相应的IPSET:

  1. /etc/load_ipset.sh    /etc/cmcc.txt    cmcc
  2. /etc/load_ipset.sh    /etc/unicom.txt    unicom
  3. ...
复制代码



2. mwan3配置
mwan3的具体配置略。

我们在mwan3的规则中添加一条: CMCC。 将ipset指定为“cmcc”,  出口策略为“cmcc_only”(这条策略走cmcc的wan口,具体配置略)
其它的电信、联通也可以同样添加。 最后是默认按权重的负载均衡规则即可。







3. 总结
1)  编译OpenWrt固件时需要添加IPSET支持
2)  mwan3的规则有优先级,注意规则的顺序,否则和预期的结果不同。 默认规则放最后!!!
3)较好的实现多ISP负载均衡,必须依赖于运营商的IP地址段收集。 (如果有开源的更好)4)  访问网络时,获得的是哪个运营商的IP地址,还和DNS解析服务器的顺序和解析速度有关。不过这个不影响负载均衡的结果。
5)当然在mwan3中还可以添加其它策略,实现定制的按需流量策略~~

只要经常访问的地址段都能收集到,负载均衡的效果是很不错的。
最后,附上网络收集的一些地址段:

https://github.com/siwind/CHINA-ISP-IPSET






本帖子中包含更多资源

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

×

评分

参与人数 1恩山币 +1 收起 理由
tl*** + 1 谢谢分享

查看全部评分

发表于 2019-3-1 10:47 | 显示全部楼层
多ISP负载均衡,还有个比较棘手的问题是各ISP的DNS,对于使用CDN优化的站点,似乎还是有问题。。。。

点评

可以尝试这样解决: 在dnsmasq转发中指定2个公共dns server,然后在mwan3分别对2个dns ip规则,分别走isp1,isp2.  详情 回复 发表于 2019-3-1 11:55
如果CDN站点在ISP网络内,就按照这个ISP的wan口走。 如果都不属于上述ISP, 那么就按照默认的(权重/优先/随机的wan口等)走, 效果应该不会差。 走不同的wan口, 家庭的源IP地址会 变化,这个靠连接追踪来保证  详情 回复 发表于 2019-3-1 10:52
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-1 10:52 | 显示全部楼层
wackejohn 发表于 2019-3-1 10:47
多ISP负载均衡,还有个比较棘手的问题是各ISP的DNS,对于使用CDN优化的站点,似乎还是有问题。。。。

如果CDN站点在ISP网络内,就按照这个ISP的wan口走。
如果都不属于上述ISP, 那么就按照默认的(权重/优先/随机的wan口等)走, 效果应该不会差。

走不同的wan口, 家庭的源IP地址会 变化,这个靠连接追踪来保证吧~~

点评

之前一直使用114的DNS来解析,使用下来效果感觉不是太好。目前是分别使用规则,指定电信的DNS走电信线路,移动的DNS走移动线路,dnsmasq同时加入电信及移动的dns作为上游DNS。。。不知道这样会不会有问题。。  详情 回复 发表于 2019-3-1 12:30
回复 支持 反对

使用道具 举报

发表于 2019-3-1 11:55 | 显示全部楼层
wackejohn 发表于 2019-3-1 10:47
多ISP负载均衡,还有个比较棘手的问题是各ISP的DNS,对于使用CDN优化的站点,似乎还是有问题。。。。

可以尝试这样解决:
在dnsmasq转发中指定2个公共dns server,然后在mwan3分别对2个dns ip规则,分别走isp1,isp2.

点评

回头这样尝试下,但现在公共dns似乎都不是特别靠谱,114偶尔也会抽风,阿里的我这里延时偏高了一点。。。  详情 回复 发表于 2019-3-1 12:32
回复 支持 反对

使用道具 举报

发表于 2019-3-1 12:30 | 显示全部楼层
yumeimm 发表于 2019-3-1 10:52
如果CDN站点在ISP网络内,就按照这个ISP的wan口走。
如果都不属于上述ISP, 那么就按照默认的(权重/优 ...

之前一直使用114的DNS来解析,使用下来效果感觉不是太好。目前是分别使用规则,指定电信的DNS走电信线路,移动的DNS走移动线路,dnsmasq同时加入电信及移动的dns作为上游DNS。。。不知道这样会不会有问题。。
回复 支持 反对

使用道具 举报

发表于 2019-3-1 12:32 | 显示全部楼层
98118 发表于 2019-3-1 11:55
可以尝试这样解决:
在dnsmasq转发中指定2个公共dns server,然后在mwan3分别对2个dns ip规则,分别走isp1, ...

回头这样尝试下,但现在公共dns似乎都不是特别靠谱,114偶尔也会抽风,阿里的我这里延时偏高了一点。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

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

GMT+8, 2024-6-4 20:25

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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