V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Misakax
V2EX  ›  Linux

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

  •  
  •   Misakax · 2023-06-27 10:25:38 +08:00 · 1355 次点击
    这是一个创建于 513 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2023-06-28 13:33:41 +08:00
    hefish
        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
    hefish
        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
    Judoon
        3
    Judoon  
       2023-06-27 10:56:57 +08:00
    不如换个思路吧,把联通和电信的 ip 网段扒出来,单独加路由表分开网卡走
    Mythologyli
        4
    Mythologyli  
       2023-06-27 11:00:06 +08:00
    用 kvm 装个软路由(逃
    wheat0r
        5
    wheat0r  
       2023-06-27 11:10:15 +08:00
    链路负载均衡设备能卖钱就是因为这事其实很复杂。
    单纯流量平均分,会有大量的请求走到不合适的线路里。
    原则上来说,这事必须从 dns 开始,根据两个线路的带宽,按比例把解析请求扔给不同线路的 dns 服务器,这样自然会解出不同线路的 IP ,然后再根据路由表走对应的线路。如果解出来的 ip 不在两个运营商里,再平均分。
    思考一下,linux 上面可以通过哪些方式解决这些问题。
    hefish
        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
    liantian
        7
    liantian  
       2023-06-27 13:31:14 +08:00 via iPhone
    仅作为下载机…
    那可以下载软件上下功夫,哪怕一个目的地址,多线程走不同出口…那不才是彻底吃满带宽。
    Misakax
        8
    Misakax  
    OP
       2023-06-27 14:28:42 +08:00
    起因仅仅只是电信突然免费帮我从 100M 升到了 1000M ,本来 Ubuntu 只接了一条联通的千兆,就突发奇想想试试两条千兆接入能否叠加,又受制于网口都是千兆口,在上级路由叠加带宽也不能实现目的。
    Misakax
        9
    Misakax  
    OP
       2023-06-27 14:28:58 +08:00
    @hefish #6 感谢 我去试试看
    hefish
        10
    hefish  
       2023-06-27 21:13:54 +08:00
    按说能叠加,好像只要用对等路由就可以了,跟前些年的软路由多拨使 PT 带宽加倍差不多的意思。
    Misakax
        11
    Misakax  
    OP
       2023-06-28 09:41:31 +08:00
    @hefish #10 试了下只有一开始有负载上,之后又变成走单线了
    hefish
        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 ,来让他重新依照路由表选择路由。
    看看对等路由是否生效。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1213 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.