LVS的NAT模式(Ubuntu24.04)
NAT模式集群
环境准备(LVS分发器是一台机器需要配置两个虚拟网卡)
注意:LVS 的 ens33 是外网口(要配网关+DNS 才能上网),ens37 是内网口(接 RS,不能配网关)。NAT 模式的 VIP 就是 LVS 外网口 192.168.1.100(netplan 直接配的,不需要单独 ip addr add)。
前期准备
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 关闭防火墙(Ubuntu默认用ufw)
sudo ufw disable
sudo systemctl stop ufw
sudo systemctl disable ufwLVS分发器配置
网卡配置
# 编辑配置文件
vim /etc/netplan/50-cloud-init.yaml
# 修改以下内容(直接覆盖原本文件)
network:
ethernets:
ens33: # 外网口:配网关+DNS
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.2
nameservers:
addresses:
- 114.114.114.114
- 8.8.8.8
ens37: # 内网口:不配网关
addresses:
- 192.168.2.200/24
version: 2
# 刷新配置
sudo netplan apply安装LVS管理工具
sudo apt install ipvsadm -y开启IP转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p加载内核模块
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe nf_conntrack
echo "ip_vs" | sudo tee -a /etc/modules
echo "ip_vs_rr" | sudo tee -a /etc/modules
echo "nf_conntrack" | sudo tee -a /etc/modules添加LVS调度规则
# 清空所有规则
sudo ipvsadm -C
# 添加虚拟服务(VIP: 192.168.1.100:80,轮询算法rr)
sudo ipvsadm -A -t 192.168.1.100:80 -s rr
# 添加真实服务器RS1(NAT模式)
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.210:80 -m
# 添加真实服务器RS2(NAT模式)
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.220:80 -m
# 查看当前规则
sudo ipvsadm -Ln开启 RS 出网 NAT(关键!RS 上网必需)
这是最容易漏的一步:LVS NAT 模式下,RS1/RS2 的流量要经过 LVS 才能出外网,必须做源地址转换(MASQUERADE),否则 RS 能 ping 通 LVS 但访问不了外网(下载报错、ping 外网 100% 丢包)。
# RS网段(192.168.2.0/24)从外网口(ens33)出去时做NAT
sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE
# 查看确认(应看到 MASQUERADE 规则)
sudo iptables -t nat -L POSTROUTING -n保存iptables规则(防重启丢失)
# 保存 MASQUERADE 规则(和 ipvsadm 一样要持久化)(选yes)
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
# 验证已保存
grep MASQUERADE /etc/iptables/rules.v4保存LVS规则 + 开机自启(systemd 方式)
# ① 保存规则(必须加 -n!否则存成主机名,恢复时 VIP 变 127.0.1.1 → Connection refused)
sudo ipvsadm-save -n > /etc/ipvsadm.rules
# ② 创建开机自启服务(开机:恢复规则;NAT 的 VIP 在 netplan 里,无需绑 VIP)
sudo tee /etc/systemd/system/lvs-boot.service <<'EOF'
[Unit]
Description=LVS 开机配置(恢复规则)
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'ipvsadm-restore < /etc/ipvsadm.rules 2>/dev/null'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
# 更新、开机自启、启动
sudo systemctl daemon-reload
sudo systemctl enable lvs-boot.service
sudo systemctl start lvs-boot.service
# ③ 验证
systemctl is-enabled lvs-boot.service # 应输出 enabled⚠️ 填坑:Ubuntu 24.04 的 rc.local / rc-local 服务不可用(
systemctl enable rc-local会报错)。改用 systemd 服务,100% 可开机自启。
RS1真实服务器配置
网卡配置
# 编辑配置文件
vim /etc/netplan/50-cloud-init.yaml
# 修改以下内容(直接覆盖原本文件)
network:
ethernets:
ens33:
addresses:
- 192.168.2.210/24
routes:
- to: default
via: 192.168.2.200
nameservers: # DNS 必须写!
addresses:
- 114.114.114.114
- 8.8.8.8
version: 2
# 刷新配置
sudo netplan apply安装Web服务
# 安装Nginx Web服务(-y表示自动确认)
sudo apt install nginx -y
# 创建测试页面,内容为"rs1",用于区分不同后端服务器
echo "rs1" | sudo tee /var/www/html/index.html
# 立即启动Nginx服务
sudo systemctl start nginx
# 设置Nginx为开机自启动
sudo systemctl enable nginxRS2真实服务器配置
网卡配置
# 编辑配置文件
vim /etc/netplan/50-cloud-init.yaml
# 修改以下内容(直接覆盖原本文件)
network:
ethernets:
ens33:
addresses:
- 192.168.2.220/24
routes:
- to: default
via: 192.168.2.200
nameservers: # DNS 必须写!留空会报
addresses: # "Temporary failure resolving"
- 114.114.114.114
- 8.8.8.8
version: 2
# 刷新配置
sudo netplan apply安装Web服务
# 安装Nginx Web服务(-y表示自动确认)
sudo apt install nginx -y
# 创建测试页面,内容为"rs2",用于区分RS1和RS2
echo "rs2" | sudo tee /var/www/html/index.html
# 立即启动Nginx服务
sudo systemctl start nginx
# 设置Nginx为开机自启动
sudo systemctl enable nginxClient测试客户端配置
网卡配置
# 编辑配置文件
vim /etc/netplan/50-cloud-init.yaml
# 修改以下内容(直接覆盖原本文件)
network:
ethernets:
ens33:
addresses:
- 192.168.1.200/24
routes:
- to: default
via: 192.168.1.100
nameservers:
addresses:
- 114.114.114.114
- 8.8.8.8
version: 2
# 刷新配置
sudo netplan apply安装测试工具
sudo apt install curl -y验证与测试
网络连通性测试
ping -c 2 192.168.2.210 # LVS → RS1
ping -c 2 192.168.2.220 # LVS → RS2
# 在RS上:ping -c 2 192.168.2.200
# 在Client上:ping -c 2 192.168.1.100LVS调度测试
curl http://192.168.2.210 # 应显示 rs1
curl http://192.168.2.220 # 应显示 rs2
curl http://192.168.1.100 # 轮询:rs1/rs2 交替
for i in {1..10}; do curl -s http://192.168.1.100; doneLVS统计监控
sudo ipvsadm -Ln --stats
sudo ipvsadm -Ln --rate
sudo ipvsadm -Lnc
cat /proc/net/ip_vs_connLVS管理命令速查
常见问题排查
关键注意事项
LVS的ens33(外网):必须配置网关和DNS才能上网下载软件
LVS的ens37(内网):不能配置网关,否则路由会混乱
RS的网关:必须指向LVS内网IP(192.168.2.200)
Client的网关:必须指向LVS外网IP(192.168.1.100)
VMware网络:确保四台机器的网卡连接到正确的VMnet
防火墙:所有机器必须关闭ufw防火墙
LVS必须配MASQUERADE:NAT模式下RS出网全靠它,漏了=RS上不了外网
RS的netplan必须写DNS:留空会报 "Temporary failure resolving",apt无法下载
两条持久化都要做:LVS规则(systemd 服务 lvs-boot.service +
ipvsadm-save -n)+ NAT规则(iptables-persistent),重启后缺一不可
配置完成后,通过Client访问 http://192.168.1.100,多次刷新应看到 rs1 和 rs2 交替出现,说明LVS NAT集群部署成功!
LVS的NAT模式
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法