Ubuntu 中目前接入了两个宽带,enp1s0 为联通,enp2s0 为电信
不想在上级路由使用 RouterOS iKuai OpenWRT 等,也不作路由使用,仅作为下载机及轻量容器部署
已经根据 https://lartc.org/howto/lartc.rpdb.multiple-links.html 试过 iproute 的方法,但是效果很不佳,丢包严重
请教下各位 V 友有什么好的办法负载均衡并叠加带宽提升上下行?
1
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 |
2
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 |
3
Judoon 2023-06-27 10:56:57 +08:00
不如换个思路吧,把联通和电信的 ip 网段扒出来,单独加路由表分开网卡走
|
4
Mythologyli 2023-06-27 11:00:06 +08:00
用 kvm 装个软路由(逃
|
5
wheat0r 2023-06-27 11:10:15 +08:00
链路负载均衡设备能卖钱就是因为这事其实很复杂。
单纯流量平均分,会有大量的请求走到不合适的线路里。 原则上来说,这事必须从 dns 开始,根据两个线路的带宽,按比例把解析请求扔给不同线路的 dns 服务器,这样自然会解出不同线路的 IP ,然后再根据路由表走对应的线路。如果解出来的 ip 不在两个运营商里,再平均分。 思考一下,linux 上面可以通过哪些方式解决这些问题。 |
6
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 |
7
liantian 2023-06-27 13:31:14 +08:00 via iPhone
仅作为下载机…
那可以下载软件上下功夫,哪怕一个目的地址,多线程走不同出口…那不才是彻底吃满带宽。 |
8
Misakax OP 起因仅仅只是电信突然免费帮我从 100M 升到了 1000M ,本来 Ubuntu 只接了一条联通的千兆,就突发奇想想试试两条千兆接入能否叠加,又受制于网口都是千兆口,在上级路由叠加带宽也不能实现目的。
|
10
hefish 2023-06-27 21:13:54 +08:00
按说能叠加,好像只要用对等路由就可以了,跟前些年的软路由多拨使 PT 带宽加倍差不多的意思。
|
12
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 ,来让他重新依照路由表选择路由。 看看对等路由是否生效。 |