两台服务器共用一个公网IP,标准做法是让其中一台(或一台网关设备)持有公网地址,另一台把服务端口、域名”挂”到它身上,由它转发进来;对外只暴露1个IP,后端实际跑着2台甚至更多机器。
2个服务器用1个IP地址的原理是什么
IP地址工作在第三层,端口在第四层,一个IPv4地址理论上有<65535>个可用端口,这就是共享的物理基础,具体到实际部署,只有两种复用方式:
- 四层复用:同一个IP,用不同端口指向不同主机。
公网IP:8081转发到服务器A的80端口,公网IP:8082转发到服务器B的80端口。 - 七层复用:同一个IP的80/443端口,靠HTTP请求头里的Host字段或TLS握手时的SNI字段区分,把
a.example.com转到A,b.example.com转到B。
业内专家指出,市面上所有”多台机器一个IP”的方案,本质都是这两种复用方式之一,差别只在于转发动作由谁执行是路由器、是其中一台服务器,还是云上的负载均衡实例。
两个服务器共用一个公网IP怎么做:三种方案怎么选
| 方案 | 典型场景 | 额外设备 | 维护难度 | 成本 |
|---|---|---|---|---|
| NAT端口映射 | 内网服务、测试环境、托管机柜 | 一台双网卡主机或软路由 | 中 | 低 |
| 反向代理 | 多站点Web、API网关 | 其中一台服务器即可 | 低 | 低 |
| 云负载均衡或NAT网关 | 生产环境、要求高可用 | 云厂商的LB/NAT实例 | 中 | 中高 |
NAT端口映射,预算有限时的首选
准备一台双网卡Linux主机作为转发机,公网IP配在它身上;两台业务机放内网,配静态IP,默认网关指向转发机。
- 开启内核转发:在
/etc/sysctl.conf写入net.ipv4.ip_forward=1,执行sysctl -p生效。 - 加DNAT规则,把不同端口分给不同机器。
- 加SNAT规则,这一步最容易被漏掉,缺了它会出现”能建立连接但收不到响应”的怪现象。
- 云主机还要在安全组放行对应端口,同时检查本机
iptables的 FORWARD 链是否默认丢弃。
iptables -t nat -A PREROUTING -p tcp -d 203.0.113.10 --dport 8081 -j DNAT --to-destination 192.168.1.11:80 iptables -t nat -A PREROUTING -p tcp -d 203.0.113.10 --dport 2222 -j DNAT --to-destination 192.168.1.12:22 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables-save > /etc/iptables.rules
反向代理,Web场景更省心
两台服务器都在内网或同一VPC,其中一台装Nginx做入口,优点是只占用80和443两个端口,后端扩容不用动防火墙,还能顺带做缓存、限流和HTTPS卸载。
server {
listen 80;
server_name a.example.com;
location / {
proxy_pass http://192.168.1.11:80;
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://192.168.1.12:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
改完执行 nginx -t 校验,再 nginx -s reload,别直接重启,线上会抖一下。
云负载均衡或NAT网关
一个弹性公网IP绑在应用型负载均衡或NAT网关上,后端挂两台云服务器,这种方式多花钱,但换来健康检查、自动摘除故障节点和监控告警,生产环境里,省下的运维时间通常比实例费更值钱。
内网两台服务器共用一个IP的端口映射怎么配置
这个场景的关键词是”没有公网IP”,常见于公司机房、学校实验室,或者只申请到一条宽带的情况。
- 软路由方案:OpenWrt、pfSense、爱快都自带端口转发界面,填入外部端口、内部IP、内部端口即可,适合不想碰命令行的运维。
- 双网卡Linux方案:网卡1接光猫或上级路由拿公网地址,网卡2接内网交换机,业务机网关指向网卡2的地址,再按方案一的命令配DNAT。
- 验证顺序:先在转发机上
curl 127.0.0.1:8081确认本机规则通了,再从外网telnet 公网IP 8081,最后看业务机ss -lntp有没有真的监听。
如果只有一条动态公网IP,还得配DDNS,把域名解析到变化后的地址,否则第二天IP一变,所有映射全失效。
云服务器多台共用一个IP要花多少钱
成本取决于你选哪条路,国内主流云厂商的弹性公网IP按带宽或流量计费,中小带宽每月通常在几十元级别,NAT网关是实例费加流量费,比单独买多个IP贵,适合后端机器数量多的场景,负载均衡按实例规格和LCU计费,价格区间更宽。
行业共识认为,两到三台服务器共用一个IP,综合成本最低的是反向代理只花一台机器的钱,多出来的只是配置工作,如果后端超过五台,NAT网关或负载均衡的集中管理优势才明显。
托管场景也一样,在北京、上海等地的机房托管两台服务器,服务商通常只分配1个公网IP,额外IP要单独购买并说明用途,这种情况下走端口映射几乎零成本,是最常见的落地方式。
2个服务器共用1个IP地址最容易踩的坑
- 端口冲突:两台都想直接对外监听80,必然有一台起不来,要么改端口,要么上反向代理。
- 回程路由不对:只做DNAT不做SNAT,内网机器回包走默认网关,客户端看到的是”连接超时”,补一条MASQUERADE基本就解决。
- 防火墙双重拦截:云安全组放行了,本机
iptables的FORWARD链还是DROP状态,请求照样进不来。 - HTTPS证书不匹配:靠SNI区分域名没问题,但很老的客户端和部分命令行工具不支持SNI,会拿到默认站点的证书。
- SSH直接映射到公网:把22端口原样转出去,等于把登录入口交给全网扫描器,改高位端口、限制来源IP、禁用密码登录,三条一起做。
- 规则没持久化:
iptables规则重启即丢,忘了iptables-save,下次重启全白配。
两个服务器怎么用1个IP地址:常见问题解答
两台服务器只买一个公网IP够不够用?
多数情况下够用,只要服务能通过端口或域名区分,一个IP承载十几台后端都没问题,真正的瓶颈通常不是IP数量,而是带宽和单点故障转发机一挂,后面全断,所以关键业务要给转发层做冗余。
端口映射和反向代理,哪个更适合Web服务?
优先反向代理,它不占用额外端口,能统一处理证书、日志和跨域,后端换机器只改一行 proxy_pass,端口映射更适合非HTTP服务,比如数据库、SSH、游戏服、远程桌面这类没法靠Host头区分的协议。
北京机房托管的两台服务器能共用一个IP吗?
可以,但前提是两台机器在同一局域网内,由机柜交换机连通,再由其中一台或一台防火墙做转发,如果两台服务器分处不同机房、不同运营商线路,就无法共用一个IP公网IP绑定在特定网络出口上,跨机房只能通过专线或隧道把流量引到一处,成本和复杂度都另算。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787107.html


