You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于TCP的服务部署在Network Load Balancer后,如何获取客户端IP?

解决Fargate+NLB环境下获取真实客户端IP的问题

要在ECS Fargate任务中获取通过NLB转发的真实客户端IP,核心是利用NLB的客户端IP保留功能——因为NLB在TCP模式下不会像ALB那样添加HTTP头,只能通过TCP层传递源IP。以下是具体步骤和验证方法:

1. 配置NLB目标组开启客户端IP保留

NLB的IP类型目标组(Fargate服务必须使用该类型)支持保留客户端IP,默认关闭,需手动开启:

  • 进入AWS控制台「目标组」页面,找到Fargate服务关联的目标组
  • 确认目标组类型为IP(实例类型目标组不支持Fargate)
  • 编辑目标组,找到「客户端IP保留」选项,设置为启用
  • 注意:启用该功能要求Fargate任务所在子网为公有子网;若为私有子网,需确保NLB能直接路由到任务的弹性网络接口(ENI),且任务安全组允许NLB流量

2. 验证代码逻辑

你的现有代码无需修改,配置正确后,socket.getInetAddress().getHostAddress()就能直接获取真实客户端IP:

socket = serverSocket.accept();
socket.setSoTimeout(defaultDisconnectionTimeout);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

InetAddress remoteAddress = socket.getInetAddress();
clientIp = remoteAddress.getHostAddress(); // 此时将返回真实客户端IP

开启客户端IP保留后,NLB会直接将TCP连接的源IP传递给Fargate任务的监听Socket,而非用NLB自身IP作为源。

3. 额外排查点

如果供应商仍无法连接,除IP验证外还可:

  • 检查Fargate任务安全组是否允许外部客户端的SMTP端口流量(默认25/587/465),同时允许NLB的健康检查流量
  • 确认NLB监听配置正确绑定对应TCP端口,且目标组关联无误
  • 在Fargate任务中开启详细TCP日志,记录连接建立时间、源IP及SMTP命令交互,排查是否为协议层面问题(如EHLO命令不兼容、TLS配置错误等)

内容的提问来源于stack exchange,提问作者Lester Gray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:48:12