很多人第一次在阿里云上部署服务,都会先问一个问题:这台服务器有没有公网IP,外网能不能访问到。网站打不开、远程连不上、接口调不通,多半都和它有关。

公网IP和私网IP分别是做什么的
云服务器一般同时有私网IP和公网IP。私网IP用于同一个VPC里的机器互相通信,外网直接访问不到。公网IP才是对外的地址,用户通过它找到你的服务。
不少新手以为买了ECS就自动有公网IP,其实不一定。这取决于创建实例时的网络配置。如果当时没有勾选分配公网地址,或者网络形态只有私网,那机器跑得再正常,外面也进不来。
拿到公网IP的三种方式
- 实例自带公网IPv4:创建ECS时勾选分配公网地址,带宽可以选固定带宽或按流量计费。适合临时测试,或者带宽需求不大的小服务。
- 弹性公网IP(EIP):单独购买,可以绑定到ECS、SLB、NAT网关等资源上。实例换了,地址还能再绑到新机器上,需要固定地址对外提供服务时用它更省心。
- NAT网关的SNAT出口:几台没有公网地址的服务器想统一访问外网时,在NAT网关上配置SNAT规则,由公网IP代为出口。注意这是“机器去访问外面”,不是“外面访问机器”。
选哪种,先想清楚方向。是让外面的人访问你的服务,就看ECS公网IP或EIP;是让内网机器统一出网,就用NAT网关。
一次网站打不开的排查过程
某个小型电商团队把网站部署在一台ECS上,后端服务在本机8080端口正常监听。但测试同事从外网访问时一直超时。负责人一开始怀疑代码有问题,花了大半天看日志,结果服务本身没有问题。
最后查出三处原因。实例创建时只有私网IP,控制台里看不到公网地址;安全组只放行了22端口,80和8080都没开;就算绑上了EIP,系统防火墙也没有放行对应端口。团队给实例绑定EIP,在安全组里加上80端口的入方向规则,又在系统防火墙里放行端口,网站才能打开。
这个案例说明,公网IP只是访问链路上的一环。链路上任何一层没通,外面都进不来,所以排查时别只盯着一个地方。
绑定EIP后的检查步骤
- 在控制台进入“弹性公网IP”页面,购买一个EIP。
- 将EIP绑定到目标ECS实例,然后回到实例详情,确认公网地址已经显示。
- 检查安全组的入方向规则,只放行业务需要的端口。如果来源是固定的,尽量填具体IP段,别直接写0.0.0.0/0。
- 登录服务器,确认系统防火墙规则,以及服务的监听地址。服务应监听0.0.0.0或服务器内网地址,如果只监听127.0.0.1,外部永远连不上。
- 从外部网络用telnet或端口检测工具测试具体端口。ping通只能说明网络层可达,不代表端口已经开放。
第四步最容易漏。很多应用默认只监听本地回环地址,公网IP和安全组都配好了,外网依然不通,排查时常常要绕很久。
安全和费用上要留意的地方
- 远程管理端口(比如22、3389)尽量只对固定来源IP开放。全网开放,等于把登录入口交给所有扫描器。
- 数据库、Redis这类服务不要直接暴露公网。需要访问时走内网,或者通过堡垒机、VPN进入。
- 定期查看登录日志,如果出现大量失败记录,多半有人在尝试暴力破解,要及时收紧规则。
- 不用的EIP要及时释放,闲置时仍然会产生费用。
费用方面,EIP有按量付费和包年包月等方式,带宽计费模式也会直接影响成本。上线前按预估流量算一笔账,比上线后再调整省事得多。
收尾
公网IP能不能用,先看实例有没有公网地址,再看安全组和系统防火墙放没放行,最后看服务是不是监听在对外的地址上。访问不通时按这个顺序往下走,一般很快能找到问题所在。