• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 是
  • 否
  • 全部
  • 是
  • 否
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索
问

H3C SECPATH F1000-905-AINAT后端服务器得到的ip不是真正的客户端的源ip

20小时前提问
  • 0关注
  • 0收藏,46浏览
粉丝:0人 关注:0人

问题描述:

我的防火墙后面配置了nginx服务器,但是从日志收到的源ip变成了防火墙自己的公网ip,如何配置才能够使它返回正确的客户端的公网IP

5 个回答
粉丝:16人 关注:9人

这是典型的NAT转换后源IP丢失问题。如果是外网用户访问内网服务器(通常是目的NAT/Server Map场景),在F1000-905-AI上需配置No-PAT(不转换源IP) 或发送原始IP给后端(如七层业务可用X-Forwarded-For)。
最推荐的三层通用配置方法(保留真实源IP)如下:
1. 基础组网前提
假设:客户端 (ISP) -> 防火墙公网口 (G0/0) -> 防火墙内网口 (G0/1) -> Nginx服务器。
2. 关键配置步骤
第一步:配置黑洞路由(防止路由环路)
假设发布的公网IP是 202.1.1.10,需配置一条黑洞路由:
shell
ip route-static 202.1.1.10 255.255.255.255 Null0
第二步:配置“目的NAT+不转换源IP”策略
在域间策略或安全策略中调用NAT,或者直接在内网口(Server所在方向) 配置NO-PAT。
最稳妥的是通过NAT Server + 在内部域实例关闭源NAT:
1. 配置服务器映射 (DNAT):
shell
nat server protocol tcp global 202.1.1.10 80 inside 192.168.1.10 80

2. 关键配置:在内网口入方向关闭源NAT转换(或配置No-PAT)。
更简单的方法是配置一个豁免源NAT的策略。假设内网Nginx在Trust区,外网在Untrust区。
如果原本配置了 nat outbound,必须确保从外网到内网服务器的回程流量(或主动访问流量)不进行源NAT转换。
推荐命令(基于对象策略的NAT豁免):
创建一个ACL,匹配由内向外(实则为回程)的服务器流量,使其不转换源IP。或者直接在内部接口配置:
shell
进入连接服务器的内网接口
interface GigabitEthernet 0/1
nat hairpin enable // 如果是内部人用公网IP访问才需要这条
// 确保该接口下没有反向的nat outbound

核心逻辑:
如果你的防火墙做了“Untrust到Trust”的目的NAT,只要你没有在Trust域出

// 确保该接口下没有反向的nat outbound 使什么意思,没有这个配置,还是其他的配置?

zhiliao_ntVVCz 发表时间:15小时前 更多>>

// 确保该接口下没有反向的nat outbound 使什么意思,没有这个配置,还是其他的配置?

zhiliao_ntVVCz 发表时间:15小时前
粉丝:36人 关注:1人

你遇到的问题是H3C防火墙在配置NAT内部服务器(NAT Server) 进行端口映射时,默认会将访问流量的源IP地址也进行转换,导致后端Nginx服务器看到的都是防火墙自己的公网IP。要解决这个问题,核心思路是让防火墙只做目的地址转换(DNAT),而不做源地址转换(SNAT)。


 问题根因:NAT Server的隐式源地址转换

当你使用 nat server 命令进行端口映射时,H3C防火墙在某些场景(尤其是内网用户通过公网IP访问内网服务器,即NAT回流场景)下,可能会同时执行源地址转换。防火墙将客户端的源IP替换为自己的接口IP,以确保回程流量能正确返回防火墙,然后再由防火墙转回给客户端。但这样一来,Nginx服务器就无法看到真实的客户端IP了。


 解决方案:改用NAT策略实现“纯净”的DNAT

相比 nat server 命令,使用NAT策略(NAT Policy) 进行目的地址转换,可以更灵活地控制源地址是否转换。你需要删除现有的 nat server 配置,然后创建一个只做DNAT的NAT策略。

配置思路如下:

  1. 删除原有的NAT Server配置:在对应接口下执行 undo nat server 命令。

  2. 创建NAT策略,仅配置目的地址转换:
    在系统视图下,进入 nat policy 视图,创建一条规则。关键是指定匹配流量的条件(源区域、目的地址、服务端口),然后在动作中只配置 destination-nat,不要配置任何 source-nat 动作。

配置示例(概念性,请根据实际接口和地址调整):

bash
# 假设公网接口为 GigabitEthernet1/0/1 (Untrust),内网服务器为 192.168.1.100:80 # 公网IP为 200.1.1.1 # 1. 创建NAT策略 system-view nat policy # 2. 创建规则,仅做目的地址转换 rule name web_dnat source-zone untrust destination-ip 200.1.1.1 service http action destination-nat static 192.168.1.100 port 80 quit quit

关键点:此配置中没有 source-nat 相关动作,因此客户端源IP会被保留,Nginx服务器就能看到真实的公网客户端IP了。


 备选方案与检查项

如果上述方案因版本或场景限制无法直接使用,可以检查以下配置:

检查并关闭NAT Hairpin
如果你的防火墙接口上配置了 nat hairpin enable,它会在内网接口上对报文同时进行源和目的地址转换。如果你的Nginx服务器同时需要被内网用户和公网用户访问,且内网用户是通过公网IP访问的,那么这个功能可能是导致源IP被改的元凶。可以尝试在内网接口上执行 undo nat hairpin enable 来禁用该功能。

考虑使用七层负载均衡
如果Nginx服务器位于防火墙之后,且你希望获得更高的灵活性,可以考虑在服务器前部署一个七层负载均衡设备(如H3C的LB产品)。负载均衡设备可以终结HTTP连接,并通过插入 X-Forwarded-For HTTP头来传递真实的客户端IP,Nginx服务器可以通过解析这个头信息来获取真实源IP。


 验证与排查

配置完成后,请务必进行验证:

  1. 查看NAT会话:在防火墙上执行 display nat session 命令,查看新建的会话。重点关注“Source IP”一栏,确认它显示的是客户端的真实公网IP,而不是防火墙的接口IP。

  2. 检查安全策略:确保你的安全策略允许流量从Untrust区域到服务器所在区域,并且匹配的是转换前的目的IP(公网IP),因为安全策略检查发生在NAT转换之前。

  3. 在Nginx上验证:查看Nginx的访问日志,确认 $remote_addr 变量显示的是真实的客户端IP。

粉丝:107人 关注:1人

nginx默认得到的就是真是的公网IP地址,因为防火墙只做目的地址转换,你看下你的DNAT,是不是只做了目的地址转换

zhiliao_ntVVCz 知了小白
粉丝:0人 关注:0人

我使用DISP NAT SESSEION DESTINATION-IP 1.2.3.4 (1.2.3.4使我的公网IP)可以看到真是的源公网ip,但是nginx得到的还是防火墙的公网ip,使哪里出错了

粉丝:40人 关注:2人

  1. 根因:外网访问内网服务器时,同时触发 DNAT(目的转换)+SNAT 源地址转换,报文源 IP 被改成防火墙公网 IP,后端 nginx 拿到的就是防火墙 IP。
  2. 方案一(推荐,HTTP 业务):取消这条流量的 SNAT,只保留 DNAT;后端服务器网关指向防火墙,后端直接回包给外网客户端,这样后端能拿到真实客户端公网 IP。
  3. 方案二(无法取消 SNAT 时,Web 业务):防火墙插入X-Forwarded-ForHTTP 头,nginx 读取这个 header 获取真实源 IP;三层 TCP 非 HTTP 业务不能用 XFF。
  4. 方案三(TCP 通用):开启 Proxy Protocol 代理协议,防火墙把真实源 IP 通过 TCP 协议携带传给 nginx,nginx 要支持 proxy 协议。
  5. 核查:display nat all,确认这条服务器访问流量是否匹配了 SNAT 策略。

编辑答案

你正在编辑答案

如果你要对问题或其他回答进行点评或询问,请使用评论功能。

✖

分享扩散:

➤

提出建议

✖

    +
✖

亲~登录后才可以操作哦!

确定
✖

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub
✖

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作

✖

举报

×

侵犯我的权益 >
对根叔社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明