寝室里原来有一条 20M 的电信宽带,今年又办了一条 20M 的联通宽带,发现联通梯子用着顺畅,电信国内游戏延迟低,于是想做个双 WAN 合并,刷好了 OpenWRT 并配置了 MWAN3 ,上网找了一些方案,都不是很满意。目前据我所知道的多线负载均衡解决方案有:
1.基于单包的负载均衡:随机将包发送到多个 WAN 口上达到负载均衡的目的,缺点很明显,很容易造成某些应用的掉线,对于网银和 QQ 的支持不是很好, IP 会经常变化。
2.基于静态路由的负载均衡:就是针对 ISP 特定的 IP 段进行静态路由,达成了哪家 ISP 走哪家线的优点。但是问题也是存在的: DNS 会被直接分配给某一个固定 WAN 口,解析出来的 IP 的 ISP 来源是固定的,基本达不到负载均衡的目的。
3.基于 session 的负载均衡:流量特征识别,然后负载均衡,这个方案倒是比较好用,但是搜了下全网 1000 以下的路由基本没有,大部分是企业级的路由器,对于穷学生来说用不起,就不再考虑这个方案了。
刚刚午休时冒出的想法:结合上文 1 和 2 ,利用静态路由表做 ISP 分流,然后 DNS 解析的时候对 DNS 的 IP 做基于包的负载均衡,让支持多线的不同网站解析出不同 ISP 的 IP ,既能达到负载均衡的目的,又不会因为包被分散发送而影响某个会话。
大家对此有何见解?或者有什么更好的方案吗? PS:预算在 350 以内, RouterOS 和软路由基本没戏。
谢谢大家。
1
jasontse 2016-09-26 13:40:09 +08:00 via iPad
你现在这个就可以,调一下 MWAN3 的 Rules 。
|
2
danili 2016-09-26 14:05:45 +08:00
为什么一定要做负载均衡呢,国内的电信好,访问国内用电信;国外联通好, shadowsock 忽略国内的 IP 走联通的不就 ok 啦?
|
3
mhqschen 2016-09-26 14:08:28 +08:00
听着不错,希望等 lz 弄好了能分享下。
|
4
qq316107934 OP |
5
jasontse 2016-09-26 14:22:39 +08:00 via iPad 1
@qq316107934 mwan3 支持 ipset 匹配,用这个效率高很多。
|
6
terrancesiu 2016-09-26 14:31:40 +08:00
我在 ros 这样做的,我是电信移动 2 条线,去 APNIC 弄出中国大陆的所有 ip 然后排除移动和铁通的,导入到 ros 里,做路由标记再 ip 列表里的目标 ip 都走电信,其他都走移动, dns 用 119.29.29.29 ,访问淘宝等 cdn 大站都很快。梯子的 ip 都不属于大陆的 ip 自然全部走移动了。 routeos 可以的 350 可以买个 rb750gr2 了,你一共 40m 的带宽,应该跑的过!
|
7
wwqgtxx 2016-09-26 14:34:12 +08:00 via iPhone
歪个楼, 350 之内马云家还是能买到不少装着 ros 之类的 x86 软路由的
|
8
qq316107934 OP @terrancesiu 您的 DNS IP 段我猜是不在电信路由范围内的,如果是这样的话解析出来的应该是移动的 CDN,加上您国外网络走的也是移动,会不会造成移动负载严重高于电信的情况呢?
|
9
aru 2016-09-26 14:55:28 +08:00
用静态路由吧
电信 ip 走电信,其他走联通 |
10
qq316107934 OP @aru 我的意思是结合静态路由,靠 DNS 解析请求随机分配到不同 WAN 口得到不同 ISP 的 IP 做进一步负载均衡。
|
11
jasontse 2016-09-26 15:16:13 +08:00 via iPad 1
@qq316107934
你这个问题没那么麻烦,路由表还是按照运营商做。 dnsmasq 中转发到两个 dns 上游,哪个返回结果快取哪个。 ``` # 删光系统默认设置 uci set dhcp.@dnsmasq[0].noresolv=1 uci delete dhcp.@dnsmasq[0].server # 设置 dnsmasq cat <<-EOF >/etc/dnsmasq.conf all-servers server=223.5.5.5 server=223.6.6.6 EOF # 重启 dnsmasq /etc/init.d/dnsmasq restart ``` 最后把 223.5.5.5 和 223.6.6.6 路由到不同出口就行了。 |
12
JamesR 2016-09-26 15:18:21 +08:00 1
笔记本或台式机 VMware 虚拟机装海蜘蛛或 ROS , 0 元。最好用 ROS , PCC 负载均衡比较好。设置参考 YuSong 的“ RouterOS 入门到精通”。
PCC ( Per connection classified ): PCC 是通过判断源地址或者目的地址、源端口或者目的端口对数据迚行分类来实现负载均衡,对每个连接迚行分类大多保持了连续性,这样大大弥补了 NTH 的不足。 1.both-address(双向地址)是以源地址和目的地址作为输入值。如果数据包的源地址和目的地址相同,则连接被分为一组,将得到相同的哈希值。然后把所有组进行平分标记(当然也可以不平分标记)。这些数据包将被分配到同一条外网链接上。 both-address 是比较稳定的一种设置方法,但不是很平均。 2.src-address and port 对相同源地址和相同源端口的数据包来说,将会被分配到同一条线路上。 这样的话,对于目的地址相同的数据包,也有可能分别走不同的线路,这在对安全性要求比较高的环境中,是不能被接受的。 3.src address 这种是负载均衡里面最稳健的。在某些环境中,甚至用 both adress 都会出现问题。但是 src-address 是所有模式里面均衡效果最差的, 因为兼容性和均衡效果不可得兼。 4.both addrss and ports 是均衡效果最好的。因为带有 port 的输入参数,引入了 port ,而 port 数值从 1-65535 ,因而 hash 的输入样本大大增加,使数据包平均分流到各条线路的概率也就大大增加了! |
13
qq316107934 OP @jasontse 这个思路太棒了!多谢,我去试试!
|
14
cyang 2016-09-26 15:33:33 +08:00 1
https://ooo.0o0.ooo/2016/09/26/57e8ccb10dce9.png
一条电信 一条移动 1.移动的网站优先使用移动线路 2.除此之外的国内网站都使用电信线路 3.国外网站使用移动线路 不要一直纠结于负载均衡,选择最优线路加快访问速度才比较适合 |
15
qq316107934 OP @JamesR 看完对 ROS 肃然起敬,对双线来说这个真的是神器,看描述它的分流效果就是我想要的,准备先试试手里硬路由效果,达不到预期的话就上 ROS 。十分感谢您的耐心解答!
|
16
lanbing 2016-09-26 15:43:15 +08:00
出一台软路由,有 6 个口,现在装的爱快,应该可以刷海蜘蛛和 ros 。 350 块。 XD:
|
17
qq316107934 OP @cyang 😂😂这个不要太方便。但我在 newifi 刷写的 merlin 固件中的多拨与您的不同,只有部分功能不带 ISP 分流。您的固件是定制的吗?
|
18
qq316107934 OP @lanbing 可否说明型号?😳
|
19
lanbing 2016-09-26 15:53:22 +08:00
@qq316107934 不知道型号,应该是组装的。跟这种很像,稍后我发图片。 https://detail.tmall.com/item.htm?spm=a230r.1.14.92.ipmFAG&id=536909054273&ns=1&abbucket=17
|
20
KCheshireCat 2016-09-26 15:59:08 +08:00 1
按连接来均衡啊,用 iptables 的 state 模块对链接做追踪,把所有 NEW 包按出口数均分,或随机分配,并打上标记
然后对后续的 RELATED,ESTABLISHED 包按连接恢复标记 在 ip rule 按标记分配到不同路由表. 实现效果应该是介于 1,3 之间,但重点是实现简单方便,透明,只有有完整的 iptables,然后写个脚本就可以做到,完全不需要额外装什么包. 而且需要特殊按 IP 或其他条件来路由的话,只要调整 iptables 打上不同标记就好,很方便 自己目前就是这么用的,20 条 50M 宽带均衡负载. |
21
lanbing 2016-09-26 15:59:44 +08:00
|
23
ryd994 2016-09-26 16:04:05 +08:00 1
建议还是要判断 7 层协议,至少区分端口
游戏有固定端口, fq 也有固定协议和端口,你的主要需求是完全可以满足的。 至于 bt ,除非双开,否则效果无论怎样都不会好,因为 tracker 每个 peer 只记录一个 ip ,而不双开 peerid 是一样的。 DHT 只会从默认路由上出去,所以反之也是一样。而且如果你用随机路由的办法,来回跳,只会给其他 DHT 客户端带来困扰。 BT 指定端口范围就行,这样也可以匹配。 剩下的可以考虑 geoip 外国网站走联通 国内基本上还是电信快 软路由的话,找师兄买旧电脑,找不到就网上买个二手商务本, CPU 够就行,很便宜的, 350 以内完全可以。 |
24
laoyuan 2016-09-26 16:05:21 +08:00
我嗅到了淡淡的蛤意
|
25
qq316107934 OP @ryd994 全方位解答了我的所有疑惑,谢谢!现在考虑入 ROS 坑了,想来想去还是软路由区分协议,然后用 both address and ports 分流靠谱。
|
26
qq316107934 OP @KCheshireCat 20 条...给壕跪了。是一种好方案, mark 一下,但还是准备上软路由。话说这么宽的水管用这种方案效率真的不会出问题吗?
|
27
qq316107934 OP @lanbing 想详细问下风扇噪音和 CPU 型号,如果谈妥可以走某鱼吗?
|
28
KCheshireCat 2016-09-26 16:35:45 +08:00 1
@qq316107934
这个还是有硬伤的.把链接分配到不同路由表的话,对网关,也就是路由器本身的发起连接是无效的.从网关发起的连接是不经过打标记的那些 iptables 表的. 虽然大部分情况下 http/https 连接会支持 keep-alive,也就是一个请求完了会保持 tcp 连接以便之后请求复用,只要连接还没断开就不会分配新的出口,session 就不会有问题. 但是遇上不支持 keep-alive 的服务器,就很有可能没法保持 session 了. 再有就是虽然是按连接均分或随机分配,但每条连接有多少流量是不确定的,如果偶然的把大流量的连接都分配到一个出口了,还是会出现流量叠加不理想的情况. |
29
lanbing 2016-09-26 16:37:10 +08:00
@qq316107934
CPU : Intel(R) Celeron(R) CPU 1037U @ 1.80GHz | 2048 KB | 1795.753 MHz | x2 硬盘: ATA CF Card Ver2 (2.01 GB/1.87 GiB) 内存: 1940 MB 主板芯片 Intel Corporation Device 0154 (rev 09) PCI 桥 Intel Corporation Device 0151 (rev 09) 显卡 Intel Corporation Device 0156 (rev 09) USB 控制器 Intel Corporation Cougar Point USB Enhanced Host Controller #2 (rev 04) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 1 (rev b4) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 2 (rev b4) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 3 (rev b4) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 4 (rev b4) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 5 (rev b4) PCI 桥 Intel Corporation Cougar Point PCI Express Root Port 6 (rev b4) USB 控制器 Intel Corporation Cougar Point USB Enhanced Host Controller #1 (rev 04) ISA 桥 Intel Corporation Device 1c49 (rev 04) IDE 接口 Intel Corporation Cougar Point 4 port SATA IDE Controller (rev 04) SMBus Intel Corporation Cougar Point SMBus Controller (rev 04) IDE 接口 Intel Corporation Cougar Point 2 port SATA IDE Controller (rev 04) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth0 08 70 27 e8 2c f6) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth1 08 70 27 e8 2c f7) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth2 08 70 27 e8 2c f8) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth3 08 70 27 e8 2c f9) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth4 08 70 27 e8 2c fa) 网卡 Intel Corporation 82583V Gigabit Network Connection (eth5 08 70 27 e8 2c fb) 可以走咸鱼,但是不包邮。。。很重。。。。 |
30
lanbing 2016-09-26 16:39:14 +08:00
@qq316107934 没什么噪音,放在办公室内,有轻微的声音,我都自动忽略了。
|
31
qq316107934 OP @lanbing 哎:-(,硬盘再大一点就好了,不过价格也挺实惠了~ 给下地址吧,大概邮费要多少钱?
|
32
lanbing 2016-09-26 17:16:12 +08:00
@qq316107934 有硬盘接口,可以接个硬盘。你要什么快递,目测大概有个五六斤的样子。(顺丰的话就贵一些, EMS 或者邮政包裹便宜)有个 32G 的金胜, 50 出。你可以考虑一起带走。。。 这种,稍后放咸鱼。 https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.1.C1hq9A&id=525523255515&areaId=370800&cat_id=2&rn=360315d7ad59fd86d3cf72c631d5269b&user_id=2739901298&is_b=1
|
33
lanbing 2016-09-26 17:19:45 +08:00
|
34
cyang 2016-09-26 20:52:06 +08:00
@qq316107934 @Ansonyi KoolShare 改版固件
|
35
lun10439547 2016-09-26 21:17:45 +08:00
@cyang 你好 问下两条线都在 68 路由器上面拨号? 我 r7000 刷的梅林, wan2 就是无法拨号,然后前面又加了一个路由拨号, 开启策略路由非常不稳定不说,而且很多国内网站会通过移动访问。。。
|
36
cyang 2016-09-26 21:26:26 +08:00
@lun10439547 电信的自己拨号 移动的是固定 IP 。稳定性还好...
|
37
terrancesiu 2016-09-26 21:31:58 +08:00 via iPhone
@qq316107934 不会,dns 是 bgp 线路,详细描述在这 https://www.dnspod.cn/Products/Public.DNS
|
38
dlsflh 2016-09-27 00:47:16 +08:00 via Android
感觉我们是一个学校的
|
39
qq316107934 OP @dlsflh 应该不一样,其实我们学校电信宽带是需要天翼客户端的,投诉后才能用的 PPPOE 。
|
40
dlsflh 2016-09-28 01:54:00 +08:00 via Android
@qq316107934 明故宫
|
41
skylancer 2016-09-28 09:30:13 +08:00
谁告诉你 350 就没法玩 RouterOS 的.. 你自己去看看产品价格啊
|
42
woyaojizhu8 2016-09-29 19:27:37 +08:00
我的想法是内网建个代理( ss server 或者 ssh -D ),这个代理服务器连联通,默认路由连电信,然后浏览器装代理切换扩展来管理。如果是软路由可以虚拟化;如果用 arm 或者 mips 的路由,可以买两个便宜的,也可以在自己电脑上再虚拟一个路由。
|
43
woyaojizhu8 2016-09-29 19:39:32 +08:00
哦,看错了,原来联通是用来挂梯子的,那我的操作是多余的了。可惜删不了回复,忽略我吧。
|
44
fool 2016-12-17 09:31:44 +08:00
@qq316107934
你好,请问你现在的负载均衡是对每个连接走不通线路的负载吗,如果一个客户端在 wget 下载某个大文件,那它的流量能同时走两条链路吗? 网络情况是,学校内,某私有网段,想在笔记本上创建多个 macvlan 虚拟接口结合 namespace 做软路由 目前的问题是,如果是访问网页是可以负载的,但下载与视频并不可以 |
45
fool 2016-12-17 10:04:49 +08:00
不过我觉得这样是有问题的,因为我还要经过一次 nat ,另外我是用 iptables ntb 分流的
|
46
qq316107934 OP @fool 我最后购买了 x86 路由器,然后采用了会话分流(原 ip+目的 ip+端口做标识)。因为我的环境是不同运营商,若按照数据包分流效果会很差。大概你是想校园网多拨吧,按照数据包来均衡可以达到单线程负载均衡,但是不推荐... 挂 qq ,玩游戏和一些实时性比较强的程序会出问题。建议还是使用按连接均衡。
|