如何在Ubuntu系统中配置多个IP地址后实现负载均衡?
美国、香港服务器
如何在Ubuntu系统中配置多个IP地址后实现负载均衡?
04-25 来源:
Ubuntu 单网卡多 IP 本身不会自动负载均衡,需要用「路由策略 + 多 IP 出口分流」实现多 IP 轮流 / 随机负载均衡上网、对外请求轮询 IP。
适合场景:一台服务器多张公网 IP,对外爬虫、API 请求、出站流量分担、防 IP 限制。
一、前提:先配置好多个 IP
以网卡 ens33 为例
bash
运行
# 永久多IP(netplan)
addresses:
- 10.0.0.10/24
- 10.0.0.11/24
- 10.0.0.12/24
先保证 ip a 能看到 3 个 IP,内网互通正常。
二、原理
创建 多个路由表
每个 IP 单独绑定一张路由表、独立网关
配置 策略路由,实现出口 IP 随机 / 轮询
实现:访问外网时自动换不同 IP,达到负载均衡、IP 轮换
三、完整实操配置(可直接复制)
1. 编辑路由表
bash
运行
sudo nano /etc/iproute2/rt_tables
末尾添加(自定义表名 + 编号):
plaintext
101 ip1
102 ip2
103 ip3
2. 为每个 IP 单独配置路由
变量说明:
网卡:ens33
网关:10.0.0.1
IP1:10.0.0.10
IP2:10.0.0.11
IP3:10.0.0.12
bash
运行
# IP1 路由表
sudo ip route add default via 10.0.0.1 dev ens33 table ip1
sudo ip rule add from 10.0.0.10 table ip1
# IP2 路由表
sudo ip route add default via 10.0.0.1 dev ens33 table ip2
sudo ip rule add from 10.0.0.11 table ip2
# IP3 路由表
sudo ip route add default via 10.0.0.1 dev ens33 table ip3
3. 配置 权重轮询负载均衡(核心)
bash
运行
# 多IP 平等轮询 权重1:1:1
sudo ip rule add priority 1000 lookup main
sudo ip route add default \
nexthop via 10.0.0.1 dev ens33 src 10.0.0.10 weight 1 \
nexthop via 10.0.0.1 dev ens33 src 10.0.0.11 weight 1 \
nexthop via 10.0.0.1 dev ens33 src 10.0.0.12 weight 1
四、验证负载均衡是否生效
1. 查看出口路由
bash
运行
ip route show default
2. 循环测试出口公网 IP
bash
运行
for i in {1..10};do curl -s ifconfig.me;echo;done
✅ 结果:轮流出现不同公网 IP = 负载均衡成功
五、开机自启(防止重启失效)
把上面路由、rule 命令写入开机脚本:
bash
运行
sudo nano /etc/rc.local
放入所有 ip route / ip rule 命令,加执行权限:
bash
运行
sudo chmod +x /etc/rc.local
六、反向需求:入站负载均衡
如果是别人访问你多个 IP 均衡到服务:
用 Nginx / HAProxy 做四层 / 七层负载均衡
不属于系统 IP 层面,是应用层负载
七、快速清理(恢复默认)
bash
运行
sudo ip rule del from 10.0.0.10
sudo ip rule del from 10.0.0.11
sudo ip rule del from 10.0.0.12
sudo ip route del default
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快