请教一个 Liunx 多个接入网的负载均衡的问题

2023-06-27 10:25:38 +08:00
 Misakax

Ubuntu 中目前接入了两个宽带,enp1s0 为联通,enp2s0 为电信

不想在上级路由使用 RouterOS iKuai OpenWRT 等,也不作路由使用,仅作为下载机及轻量容器部署

已经根据 https://lartc.org/howto/lartc.rpdb.multiple-links.html 试过 iproute 的方法,但是效果很不佳,丢包严重

请教下各位 V 友有什么好的办法负载均衡并叠加带宽提升上下行?

1332 次点击
所在节点    Linux
12 条回复
hefish
2023-06-27 10:51:08 +08:00
这个要用对等路由吧。
ip route add default equalize nexthop via $LT_GW dev enp1s0 weight 10 nexthop via $CT_GW dev enp2s0 weight 10
hefish
2023-06-27 10:55:00 +08:00
或者是用两个路由表,
联通进来的线路用默认的路由表,
ip route add default via $LT_GW dev enp1s0
电信进来的用另一个路由表。
ip route add default via $CT_GW dev enp2s0 table 100

然后用 ip rules 分配
ip rule add from 0.0.0.0/0 dev enp2s0 table 100
Judoon
2023-06-27 10:56:57 +08:00
不如换个思路吧,把联通和电信的 ip 网段扒出来,单独加路由表分开网卡走
Mythologyli
2023-06-27 11:00:06 +08:00
用 kvm 装个软路由(逃
wheat0r
2023-06-27 11:10:15 +08:00
链路负载均衡设备能卖钱就是因为这事其实很复杂。
单纯流量平均分,会有大量的请求走到不合适的线路里。
原则上来说,这事必须从 dns 开始,根据两个线路的带宽,按比例把解析请求扔给不同线路的 dns 服务器,这样自然会解出不同线路的 IP ,然后再根据路由表走对应的线路。如果解出来的 ip 不在两个运营商里,再平均分。
思考一下,linux 上面可以通过哪些方式解决这些问题。
hefish
2023-06-27 13:12:21 +08:00
@hefish
上面只是来自电信的包,走电信路由回程,
忘了来自联通的包,走联通回程,
ip rule add from 0.0.0.0/0 dev enp1s0 table main

还忘了创建 100 的路由表:
echo 100 telecom >> /etc/iproute2/rt_tables
liantian
2023-06-27 13:31:14 +08:00
仅作为下载机…
那可以下载软件上下功夫,哪怕一个目的地址,多线程走不同出口…那不才是彻底吃满带宽。
Misakax
2023-06-27 14:28:42 +08:00
起因仅仅只是电信突然免费帮我从 100M 升到了 1000M ,本来 Ubuntu 只接了一条联通的千兆,就突发奇想想试试两条千兆接入能否叠加,又受制于网口都是千兆口,在上级路由叠加带宽也不能实现目的。
Misakax
2023-06-27 14:28:58 +08:00
@hefish #6 感谢 我去试试看
hefish
2023-06-27 21:13:54 +08:00
按说能叠加,好像只要用对等路由就可以了,跟前些年的软路由多拨使 PT 带宽加倍差不多的意思。
Misakax
2023-06-28 09:41:31 +08:00
@hefish #10 试了下只有一开始有负载上,之后又变成走单线了
hefish
2023-06-28 13:33:41 +08:00
@Misakax 按说每一个 ip 包在找到路由之后,都会有个缓存,记录下这个数据包的 dst ip 和对应的 gateway ip ,以后针对这个 dst ip ,都会不通过路由表,直接走缓存的 gateway ip 。 直到缓存失效。

你试着从 linux 上,traceroute 多个目标 IP , 是不是针对不同的目标,他会随机选择不同的出口。 当然也可以通过 traceroute 同一个目标 ip ,每次 traceroute 前都 ip ro flush cache ,来让他重新依照路由表选择路由。
看看对等路由是否生效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX