You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

公网环境下服务器承载超65k TCP连接的问题及解决方案咨询

公网环境下服务器承载超65k TCP连接的问题及解决方案咨询

首先要明确:你的担忧完全是真实存在的,这是普通NAT(网络地址转换)模式下的典型限制。

问题本质:为什么公网下会有65535连接限制?

当你用普通路由器做端口转发(把公网IP的8000端口转到内网服务器的8000端口)时,路由器会做SNAT(源地址转换):把所有来自公网客户端的源IP替换成路由器自身的内网IP(也就是你说的192.168.0.1),同时给每个连接分配一个唯一的源端口来区分不同的公网请求。

而TCP连接是靠「源IP+源端口+目的IP+目的端口」这个四元组唯一标识的,此时服务器看到的所有连接的源IP都是192.168.0.1,源端口最多只能用65535个(还要减去系统默认保留的端口,实际可用大概6万左右),所以确实会把并发连接数死死限制在这个量级,和你本地测试时能利用不同客户端IP来扩展连接数的情况完全不同。

关于HAProxy的疑问

你说的没错,如果HAProxy还是放在路由器后面(和服务器同在内网),那问题依然存在——因为路由器还是会做SNAT,HAProxy看到的源IP还是路由器的,四元组的限制并没有解除。

正确的用法有两种:

  • 把HAProxy放在公网入口:比如直接把WAN线接到HAProxy所在的机器上,或者把路由器设置为透明桥接模式,让HAProxy直接接收公网流量。这样HAProxy能直接获取到公网客户端的真实IP和端口,四元组是唯一的,自然就没有65535的连接限制了,你的服务器原本的10万+承载能力就能正常发挥。
  • 让路由器开启「保留源IP的DNAT」:部分中高端路由器(比如Cisco、Juniper,甚至一些家用路由的高级模式)支持在端口转发时不修改源IP,直接把公网流量转发到内网服务器/HAProxy。这种情况下,服务器能直接看到公网客户端的真实IP,四元组正常,连接数限制就不存在了。

其他可行解决方案(不用直接接WAN线)

除了你提到的几种,还有这些实用的方式:

  • 多公网IP叠加:向运营商申请多个公网IP,给每个IP配置对应的端口转发到服务器的监听端口。每个公网IP都能提供65535个可用的源端口,两个IP就能支持13万左右的并发连接,以此类推。
  • 服务器绑定多内网IP:就像你说的用ip addr add 192.168.0.102/24 dev eth0这类命令给服务器绑定多个内网IP,然后在路由器上配置多个端口转发规则——比如把公网IP的8000端口转到192.168.0.101:8000,8001端口转到192.168.0.102:8000。这样每个「内网IP+监听端口」的组合都能对应65535个源端口,从而扩展总连接数。
  • 负载均衡集群:如果单台服务器的性能已经到顶,HAProxy可以作为负载均衡器,把公网流量分发到多台后端服务器。每台后端服务器都能处理自己的65535+连接,总承载能力就是所有服务器的总和。

备注:内容来源于stack exchange,提问作者Itsme

火山引擎 最新活动