让多台服务器共用一个IP,核心方法有三种:NAT端口映射、反向代理、以及基于VRRP或LVS的负载均衡集群,选哪种,取决于你的业务是内网互通还是对外提供公网服务,以及你对高可用和并发量的要求。
很多运维人员第一次遇到“多台服务器共用一个IP”的需求,往往是因为公网IP不够用,IPv4地址枯竭已是老生常谈,据工信部数据,我国IPv4地址早已分配殆尽,运营商和云厂商对弹性公网IP的收费也越来越精细,把多台服务器的流量汇聚到一个IP上,成了省钱又实用的方案。
多台服务器怎么共用一个公网IP?先理清三种主流路径
共用IP的本质,是让一个IP地址接收请求,再根据规则分发给后端多台服务器,不同路径对应不同场景,别一上来就堆设备。
NAT端口映射:适合内网对外暴露少量端口
NAT(网络地址转换)是最直接的方式,在路由器或Linux网关上做DNAT,把公网IP的不同端口映射到不同内网服务器,比如公网IP 2.3.4 的80端口映射到 0.0.1:80,8080端口映射到 0.0.2:80。
操作路径:
- 开启内核转发:
echo 1 > /proc/sys/net/ipv4/ip_forward - 添加DNAT规则:
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 - 添加SNAT或MASQUERADE:
iptables -t nat -A POSTROUTING -j MASQUERADE
这种方式简单、成本低,但端口冲突很头疼,两台服务器都想用80端口对外,NAT就无能为力了。
反向代理:适合Web服务统一入口
反向代理是当前最常用的方案,Nginx或HAProxy监听公网IP的80和443端口,根据域名或路径把请求转发给后端服务器。a.example.com 转发到 0.0.1:8080,b.example.com 转发到 0.0.2:8080。
Nginx核心配置片段:
server {
listen 80;
server_name a.example.com;
location / {
proxy_pass http://10.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name b.example.com;
location / {
proxy_pass http://10.0.0.2:8080;
}
}
业内专家指出,反向代理在HTTP/HTTPS场景下最为灵活,能按域名、路径、Header分流,还能统一做SSL终止,缺点是代理层可能成为性能瓶颈,需要额外考虑高可用。
负载均衡集群:适合高可用、高并发
当业务要求7×24小时不间断,或者并发量很大时,就需要LVS、Keepalived、HAProxy这类负载均衡集群,它们通过VRRP协议在多台调度器之间漂移一个VIP(虚拟IP),VIP就是那个共用的IP,后端真实服务器(RS)可以有多台,调度器根据算法分发请求。
行业共识认为,LVS的DR模式性能最高,适合大流量入口,但配置复杂,需要处理ARP抑制、网卡绑定等细节。
多台服务器共用IP有什么优缺点?对比NAT、反向代理与负载均衡
三种方案各有适用边界,直接看对比表:
| 方案 | 适用场景 | 优点 | 缺点 | 典型工具 |
|---|---|---|---|---|
| NAT端口映射 | 内网少量服务对外暴露 | 简单,成本极低 | 端口冲突,无法同端口多域名 | iptables、防火墙 |
| 反向代理 | Web应用统一入口 | 灵活,支持SSL,按域名分流 | 代理层性能瓶颈,需高可用 | Nginx、HAProxy |
| 负载均衡集群 | 高并发、高可用 | 性能高,可扩展,故障自动切换 | 配置复杂,需要额外资源 | LVS、Keepalived、HAProxy |
NAT的优缺点
NAT胜在简单,一台Linux网关就能搞定,不需要额外服务器,但端口是稀缺资源,公网IP只有65535个端口,如果后端服务多,端口管理会变成噩梦,而且NAT对应用层协议不透明,FTP、SIP等协议需要额外模块支持。
反向代理的优缺点
反向代理能复用80和443端口,这是它最大的优势,同一台公网IP上,可以通过SNI支持多个SSL证书,按域名分流,缺点也明显:代理服务器本身要处理所有流量,如果并发连接数高,CPU和内存消耗大,可以用Nginx的worker_processes和worker_connections调优,但单机总有上限。
负载均衡的优缺点
负载均衡集群解决了单点故障,Keepalived让两台调度器互为备份,VIP自动漂移,后端RS可以横向扩展,但DR模式要求RS和调度器在同一二层网络,跨网段就要用TUN或NAT模式,配置更繁琐,RS上要关闭ARP响应,避免VIP冲突。
负载均衡多台服务器共用一个IP怎么配置?以LVS+Keepalived为例
下面以LVS的DR模式为例,演示两台调度器(DS1、DS2)和两台真实服务器(RS1、RS2)共用一个VIP 168.1.100。
环境准备
- DS1:
168.1.10 - DS2:
168.1.11 - RS1:
168.1.20 - RS2:
168.1.21 - VIP:
168.1.100
所有机器关闭防火墙和SELinux,安装keepalived和ipvsadm:
yum install keepalived ipvsadm -y
配置Keepalived实现VIP漂移
在DS1上编辑/etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.20 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.21 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
DS2配置类似,只需把state改为BACKUP,priority改为90,启动服务:
systemctl start keepalived systemctl enable keepalived
配置LVS转发规则
Keepalived会自动调用ipvsadm创建规则,可以用ipvsadm -Ln查看,如果没有自动创建,手动添加:
ipvsadm -A -t 192.168.1.100:80 -s rr ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.21:80 -g
配置真实服务器抑制ARP
在RS1和RS2上执行:
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
然后在lo接口上绑定VIP:
ip addr add 192.168.1.100/32 dev lo
这样,客户端访问168.1.100时,DS1或DS2会把请求转发给RS,RS直接回复客户端,性能很高。
多台服务器共用一个IP需要多少钱?成本与地域差异解析
成本取决于你选哪条路,NAT方案几乎零成本,用现有网关即可,反向代理需要一台低配云服务器,按包年包月算,入门级实例每年几百元,负载均衡集群至少需要两台调度器,成本翻倍,但换来的是高可用。
云服务商提供了更省心的选择,简米云SLB、酷番云CLB、华为云ELB都支持多台后端服务器共用一个IP,按量付费或包年包月,据统计,近年来云负载均衡价格逐年下降,但不同地域仍有差异,北京多台服务器共用一个IP怎么实现?北京地区公网IP资源更紧张,部分云商对弹性公网IP收取更高费用,建议直接使用NAT网关或负载均衡实例,避免单独购买EIP。
| 方案 | 初始成本 | 月度成本 | 适用规模 |
|---|---|---|---|
| NAT端口映射 | 0 | 0 | 小型内网服务 |
| Nginx反向代理 | 1台低配服务器 | 几十到几百元 | 中小型Web |
| LVS+Keepalived | 2台调度器 | 几百到上千元 | 高并发生产环境 |
| 云负载均衡 | 0 | 按量或包月 | 弹性业务 |
Q&A:多台服务器共用IP常见疑问解答
多台服务器共用一个IP会不会导致端口冲突?
会,如果两台服务器都监听80端口,通过NAT映射到同一个公网IP的80端口就会冲突,解决办法是使用反向代理按域名分流,或者让后端服务监听不同端口再通过NAT映射,LVS的DR模式下,后端RS可以都监听80端口,因为调度器是根据请求分发,而不是端口映射。
多台服务器共用IP后,如何排查访问异常?
先检查流量入口,NAT方案用iptables -t nat -L -n查看规则;反向代理方案用nginx -t检查配置,再看/var/log/nginx/error.log;LVS方案用ipvsadm -Ln查看转发规则和后端健康状态,后端服务器上用ss -tlnp确认服务监听正常,如果请求到达后端但响应异常,检查后端防火墙和路由。
多台服务器共用一个IP,SSL证书怎么处理?
在反向代理层统一配置SSL证书最省事,后端服务器使用HTTP即可,如果使用LVS,通常需要透传SSL,证书配置在后端每台服务器上,一个公网IP可以绑定多个域名证书,通过SNI扩展实现,目前主流Web服务器和负载均衡器均支持SNI,可在同一IP上为不同域名提供不同证书。
多台服务器共用一个IP,本质是流量入口的复用,选NAT、反向代理还是负载均衡,取决于你的端口需求、并发量和预算,先理清场景,再动手配置,比盲目堆设备更有效。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/706546.html





