我开放服务器服务172.16.73.99:3000(私有ip) 的端口时,外部通过15.6.7.8:3000(公网ip)就能够访问。这种一一对应是如何做到的,表面上看公网ip所有端口都在为这个单一内网ip服务。那如何做到公网ip向内网下的所有服务器服务啦?比如两台服务器都开放3000端口,那么公网:3000该提供谁的服务啦?
下图是我使用的截图:
阿里服务器地址:固定公网ip 15.6.7.8和内网下的私有ip 172.16.73.99. 说明这台服务器对应了一个公网ip而非多个,该公网ip下也有多台服务器。
172.16.73.99内网服务器能够开放1-65535所有端口,且通过15.6.7.8+对应端口能够访问。说明单个内网能够占用所用公网ip的端口。
我遇到了这个问题,刚好在开源中国看到,希望能够得到阿里云官方的回复,请查看
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的场景中,实现私有IP地址(内网IP)到公网IP地址的端口映射通常是通过NAT(网络地址转换)技术来完成的,具体来说是SNAT(源地址转换)和DNAT(目的地址转换)的一种应用。您所描述的情况主要涉及DNAT,即端口转发。
如何做到一对一映射: 当您配置了从公网IP 15.6.7.8:3000 到内网IP 172.16.73.99:3000 的端口映射时,实际上是设置了一个DNAT规则。这个规则告诉路由器或防火墙,任何到达公网IP 15.6.7.8 的3000端口的请求都应该被重定向到内网IP 172.16.73.99 的相应端口上。这样,即使外部用户看到的是公网IP,实际访问的是您指定的内网服务器服务。
如何让公网IP为内网下的所有服务器服务: 如果您有多个内网服务器并且它们都希望使用相同的公网端口(比如3000),这通常需要更高级的负载均衡技术来实现。阿里云提供了负载均衡服务(SLB,Server Load Balancer),您可以创建一个负载均衡实例,并将公网IP绑定到该SLB实例上。然后,将多台后端服务器(ECS实例)添加到该SLB实例的后端池中,并且可以配置监听规则,使得所有到达SLB的3000端口的请求能够根据预设的策略(如轮询、最少连接数等)分发到不同的后端服务器上。这样,公网IP:3000就可以智能地分配流量给内网下不同服务器的服务了。
关于端口占用问题: 您提到的“单个内网能够占用所有公网IP的端口”实际上是指理论上每个内网IP都可以通过不同的DNAT规则映射到公网IP的不同端口上,但这并不意味着一个内网IP会占用所有公网IP的端口资源。每个端口映射都是独立配置的,因此,只要合理规划,可以灵活地分配公网IP的端口资源给不同的内网服务使用。
综上所述,对于您的需求,如果想要实现多台服务器共享同一公网IP的不同服务,建议使用阿里云的负载均衡服务(SLB),它能有效解决您提到的问题,并提供高可用性和可扩展性。