什么是 SNAT Port Exhaustion 现象

举报
汪子熙 发表于 2025/11/02 20:10:23 2025/11/02
【摘要】 SNAT(Source Network Address Translation)或源网络地址转换,是在数据包通过网络进行传输时对源 IP 地址进行转换的过程。SNAT 主要应用于私有网络与公共网络间的通信,它可以将私有网络中的内部 IP 地址转换为公共网络上的一个或多个公共 IP 地址。然后,公网上的回应信息通过这个公共 IP 地址返回到私有网络,并且转换回原始的私有 IP 地址。这一过程对...

SNAT(Source Network Address Translation)或源网络地址转换,是在数据包通过网络进行传输时对源 IP 地址进行转换的过程。SNAT 主要应用于私有网络与公共网络间的通信,它可以将私有网络中的内部 IP 地址转换为公共网络上的一个或多个公共 IP 地址。然后,公网上的回应信息通过这个公共 IP 地址返回到私有网络,并且转换回原始的私有 IP 地址。这一过程对于发起请求的设备来说是透明的。

在 Azure Cloud 中,负载均衡器利用 SNAT 来实现内部服务与外部服务的通信。例如,当一个 Azure 虚拟机(VM)需要访问 Internet 上的服务时,Azure 负载均衡器会将该虚拟机的私有 IP 地址和源端口号转换为公共 IP 地址和一个新的源端口号。这样,Internet 上的服务就可以通过这个公共 IP 地址和端口号进行回应。然后,Azure 负载均衡器再将回应信息的目标 IP 地址和端口号转换回原始的私有 IP 地址和源端口号,从而实现与外部服务的通信。

然而,每个公共 IP 地址只有有限的端口号可用(最多 64512 个)。当一个 Azure 虚拟网络的所有虚拟机都通过同一个公共 IP 地址访问 Internet 时,可能会发生 SNAT 端口耗尽(SNAT Port Exhaustion)。这时,由于没有可用的端口号,虚拟机无法建立新的与外部服务的连接,直到有正在使用的端口号被释放。这种情况会严重影响到虚拟网络的正常运行。

举一个例子,假设一个虚拟网络中有 1000 个虚拟机,每个虚拟机平均需要 100 个 SNAT 端口。因此,总共需要 100000 个 SNAT 端口。然而,一个公共 IP 地址只有 64512 个端口可用。所以,如果所有的虚拟机都通过同一个公共 IP 地址访问 Internet,那么就会发生 SNAT 端口耗尽。虚拟机无法建立新的与外部服务的连接,直到有正在使用的端口号被释放。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。