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

dnat

1天前提问
  • 0关注
  • 0收藏,61浏览
粉丝:0人 关注:0人

问题描述:

防火墙上做了dnat,一个大段的nat地址,目前只用了几个,剩下的几个没有使用,为了避免外部访问没有使用的地址,可以在防火墙上写整个大段的黑洞路由吗,避免外部访问这些没有使用的地址

3 个回答
粉丝:22人 关注:0人

可以做黑洞路由来丢弃外部对未使用公网地址的访问,但不能对整个 DNAT 大段直接做黑洞——必须先为已使用的少数地址"开天窗"(明细路由/正确 nat server),再对剩余未使用地址整体指 NULL0。否则整段黑洞会把正在用的 DNAT 映射也一起丢进 NULL0,业务直接全断。下面给你一套安全的配置方案。
一、为什么"整段黑洞"是个陷阱
华三 Comware V7 防火墙有个关键机制:配置 nat server 时,系统会自动下发一条 /32 防环黑洞路由到 NULL0 。
这意味着:
你已经做 DNAT 的地址(比如 100.1.1.9),系统已经自动有了 100.1.1.9/32 → NULL0 的路由
但 nat server 的转换动作(目的地址+端口改写)发生在路由查找之前,所以正常 DNAT 流量不会被黑洞吞掉
如果你手动对整个大段(如 100.1.1.0/24)做黑洞路由,优先级会低于系统自动下发的 /32 明细黑洞吗?不一定!​ 这取决于路由掩码长度——你写的 /24 黑洞会覆盖整个段,但系统下发的 /32 是更精确的路由,按最长掩码匹配原则,/32 优先生效。
💡 翻译:如果你写的是 ip route-static 100.1.1.0 255.255.255.0 NULL0,系统里已有的 100.1.1.9/32 → NULL0 会自动成为更精确的路由优先生效。但问题是:/32 黑洞本身就是"防环"用的,正常 DNAT 流量靠 nat server 转换动作在路由前截获,所以不受 /32 黑洞影响——这部分是安全的。
真正的风险在于:如果你写的黑洞路由掩码大于或等于系统自动下发的 /32(比如你写 /32 但地址覆盖了已用的),那就直接把已用地址也黑洞了。
二、安全的配置方案(推荐)
🎯 方案 A:对未使用地址单独写 /32 黑洞(最安全)
假设你的公网大段是 100.1.1.0/24,已使用的地址是 100.1.1.9、100.1.1.10、100.1.1.20 这三个,其余均未使用。
system-view
# 对每一个未使用的地址单独写 /32 黑洞
ip route-static 100.1.1.1 255.255.255.255 NULL0
ip route-static 100.1.1.2 255.255.255.255 NULL0
ip route-static 100.1.1.3 255.255.255.255 NULL0
# ... 以此类推,把 100.1.1.1-8, 11-19, 21-254 全部写上
ip route-static 100.1.1.254 255.255.255.255 NULL0
优点:
不影响已使用的 100.1.1.9/.10/.20 的 DNAT(它们的 nat server 转换动作在路由前生效)
外部访问未使用地址时被静默丢弃,不回 ICMP unreachable​
精确控制,零误伤
缺点:
配置量大(一个 /24 段要写 251 条)
后续新增 DNAT 地址时,要记得删除对应的黑洞路由
🎯 方案 B:对未使用的小段聚合写黑洞(折中)
如果未使用的地址是连续的,可以聚合:
system-view
# 假设已使用 100.1.1.9, 100.1.1.10, 100.1.1.20
# 未使用部分可以聚合为:
# 100.1.1.0/29 (1-6, 7个地址,实际 1-6 未用,.7 也未用)
# 100.1.1.8/31 (8 未用)
# 100.1.1.11/32 ~ 100.1.1.19/32
# 100.1.1.21/32 ~ 100.1.1.254/32

# 简化:直接对整个 /24 写黑洞,但优先级调低
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70
⚠️ 关键:这里必须配合 preference 70 把黑洞路由优先级调低(默认静态路由优先级是 60,数值越大优先级越低)。这样:
系统自动下发的 nat server /32 黑洞(优先级 60)优先生效 → 已用地址走 nat server 转换
你写的 /24 黑洞(优先级 70)作为兜底 → 未使用地址被丢弃
但这有个问题:系统自动下发的 /32 黑洞是针对已配置 nat server 的地址才会生成。对于未配置 nat server 的地址,路由表里没有 /32 明细,就会匹配你写的 /24 黑洞 → 被丢弃。这正是我们想要的效果!
所以方案 B 的核心是:
# 对整个大段写黑洞,但优先级调低到 70
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70
这样:
已配置 nat server 的地址(如 100.1.1.9)→ 系统自动下发 /32 黑洞(优先级 60)→ nat server 转换在路由前截获 → DNAT 正常工作 ✅
未配置 nat server 的地址(如 100.1.1.50)→ 匹配 /24 黑洞(优先级 70)→ 静默丢弃 ✅
🎯 方案 C:用地址段 + 已用地址例外路由(最优雅)
system-view
# 1. 已使用的地址:写一条指向实际内网的明细路由(或依赖 nat server 自动黑洞)
# nat server 会自动下发 /32 黑洞,所以这里不需要额外操作

# 2. 对整个大段写黑洞
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70

# 3. 已使用地址的 nat server 配置保持不变
nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443
nat server protocol tcp global 100.1.1.10 80 inside 192.168.1.3 80
nat server protocol tcp global 100.1.1.20 22 inside 192.168.1.4 22
原理:
系统为 100.1.1.9/32、100.1.1.10/32、100.1.1.20/32 自动下发黑洞路由(优先级 60,更精确)
你写的 100.1.1.0/24 → NULL0(优先级 70)作为兜底
路由匹配原则:最长掩码优先 → /32 优先于 /24
nat server 转换动作在路由查找前执行​ → 已用地址正常 DNAT ✅
未用地址匹配 /24 黑洞 → 静默丢弃 ✅
三、验证配置
📍 1. 查看路由表
display ip routing-table
确认:
已用地址有 /32 黑洞路由(系统自动下发)
你写的 /24 黑洞路由存在且 preference 为 70
📍 2. 查看 nat server 配置
display nat server
确认已用地址的 nat server 配置正确。
📍 3. 外部测试
从外部访问已用地址(如 100.1.1.9:8443)→ 应正常 DNAT 到内网
从外部访问未用地址(如 100.1.1.50)→ 应超时无响应(静默丢弃)
📍 4. 抓包验证
在外部接口抓包:
packet-capture inter G1/0/1 host 100.1.1.50
应只看到 1 个 SYN 包,无响应包(静默丢弃的特征)。
四、⚠️ 三个必须避开的坑
⚠️ 坑 1:直接整段黑洞不调优先级
如果直接写 ip route-static 100.1.1.0 255.255.255.0 NULL0(默认 priority 60),而系统下发的 nat server /32 黑洞也是 priority 60——路由优先级相同时,/32 掩码更长,仍然优先生效。所以理论上不会误伤已用地址。
但保险起见,强烈建议把你的 /24 黑洞优先级调到 70,明确告诉系统"这是兜底的"。
⚠️ 坑 2:nat server 只转端口不转地址
如果你的 nat server 配置是 nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443(只转端口,不转目的 IP),转换后的目的地址仍然是 100.1.1.9,会匹配系统下发的 /32 黑洞被丢弃​ !
解决方法:必须同时转换目的地址:
nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443
如果 inside 指定的就是最终目的 IP(如 192.168.1.2),目的地址会被改写为 192.168.1.2,不会命中黑洞。
但如果你的 inside 地址恰好又是 100.1.1.9 本身(即只做端口映射不换 IP),就会出问题。这种情况下必须调整 nat server 配置或手动删除系统自动下发的 /32 黑洞(不推荐)。
⚠️ 坑 3:新增 DNAT 地址时忘记清理黑洞
如果后续新增了一个 DNAT 地址(如 100.1.1.30),而这个地址恰好在你之前写的 /24 黑洞覆盖范围内——不会有问题,因为系统会自动为 100.1.1.30 下发 /32 黑洞(优先级 60),比你的 /24 黑洞(优先级 70)更优先匹配,nat server 转换动作在路由前截获,正常工作。
但如果你用的是方案 A(逐地址 /32 黑洞),就需要手动删除 100.1.1.30/32 → NULL0 这条黑洞路由,否则新增的 DNAT 会被你自己的黑洞吞掉。
五、完整配置模板
system-view

# 1. 对整个公网大段写黑洞路由,优先级调低到 70(兜底)
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70

# 2. nat server 配置(已用地址)
nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443
nat server protocol tcp global 100.1.1.10 80 inside 192.168.1.3 80
nat server protocol tcp global 100.1.1.20 22 inside 192.168.1.4 22

# 3. 安全策略放通(关键!黑洞只解决路由层,安全策略也要配套)
security-policy
rule 10 name permit-dnat-web
source-zone untrust
destination-zone trust
destination-ip 192.168.1.2
service 443
action pass
rule 11 name permit-dnat-http
source-zone untrust
destination-zone trust
destination-ip 192.168.1.3
service 80
action pass
rule 12 name permit-dnat-ssh
source-zone untrust
destination-zone trust
destination-ip 192.168.1.4
service 22
action pass

# 4. 保存
save
六、黑洞路由的行为说明
华三官方文档明确 :
黑洞路由:出接口为 NULL0,去往该目的地的 IP 报文直接被丢弃,并且不通知源主机(静默丢弃)
NULL0 接口:虚拟接口,无物理端口,作用是丢弃所有发往该接口的流量,不产生任何回应
所以外部攻击者访问未使用地址时:
包到达防火墙 → 匹配 /24 黑洞路由 → 被 NULL0 静默丢弃
攻击者看不到任何响应(无 ICMP unreachable、无 TCP RST)
达到"隐藏未使用地址"的安全效果
七、一句实在话
对华三防火墙 DNAT 大段中未使用的公网地址做黑洞路由是标准做法,但不能简单粗暴地对整个大段写一条 ip route-static x.x.x.0 255.255.255.0 NULL0——因为系统会为已配置 nat server 的地址自动下发 /32 黑洞(优先级 60),如果你写的 /24 黑洞也是优先级 60,虽然最长掩码匹配原则保证 /32 优先,但保险起见必须把你的 /24 黑洞优先级调到 70,明确作为兜底 。已用地址的 nat server 转换动作在路由查找前执行,所以不会被 /32 黑洞吞掉;未用地址匹配 /24 黑洞被 NULL0 静默丢弃,不回 ICMP unreachable,达到隐藏效果​ 。配套措施:安全策略只放通已用地址对应的内网服务,形成"路由黑洞 + 策略最小化"的双重防护。如果后续新增 DNAT 地址,系统会自动下发新的 /32 黑洞,无需手动清理(除非你用的是逐地址 /32 黑洞方案)。操作前务必 save 备份配置,并在维护窗口执行,配完后用 display ip routing-table + 外部实测验证。
💡 配置速记:
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70 —— 对整段未用地址兜底黑洞
nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443 —— 已用地址正常 DNAT
安全策略只放通已用地址对应的内网服务
save 保存
display ip routing-table 验证 + 外部实测
⚠️ 三条铁律:
/24 黑洞必须配 preference 70——避免与系统自动下发的 /32 黑洞(priority 60)冲突
nat server 必须同时转换目的地址——只转端口不转地址会命中 /32 黑洞被丢弃
安全策略配套最小化——黑洞只解决路由层,安全策略也要只放通已用地址
完整配置示例:
system-view
# 对公网大段写黑洞路由,优先级调低到 70(兜底)
ip route-static 100.1.1.0 255.255.255.0 NULL0 preference 70

# nat server 配置(已用地址)
nat server protocol tcp global 100.1.1.9 8443 inside 192.168.1.2 443
nat server protocol tcp global 100.1.1.10 80 inside 192.168.1.3 80
nat server protocol tcp global 100.1.1.20 22 inside 192.168.1.4 22

# 安全策略最小化放通
security-policy
rule 10 name permit-dnat-web
source-zone untrust
destination-zone trust
destination-ip 192.168.1.2
service 443
action pass
rule 11 name permit-dnat-http
source-zone untrust
destination-zone trust
destination-ip 192.168.1.3
service 80
action pass
rule 12 name permit-dnat-ssh
source-zone untrust
destination-zone trust
destination-ip 192.168.1.4
service 22
action pass

save
📌 以上方案基于:华三官方静态路由文档(出接口为 null0 即为黑洞路由,去往该目的地的报文被丢弃且不通知源主机) 、NAT44 文档(已生效 NAT 自动生成防环黑洞路由,若导致正常报文丢弃需调整) 、知了社区案例(nat server 公网地址自动下发 /32 黑洞,若只转端口不转目的地址会命中黑洞被丢) 、NULL0 接口说明(虚拟丢弃接口,静默丢弃不产生回应) 、路由优先级与最长掩码匹配原则。实际操作前请用 display ip routing-table 确认已有路由条目,在维护窗口执行,配置后 save 备份并用外部实测验证未使用地址不可达、已使用地址 DNAT 正常。
"华三防火墙上做了 DNAT,一个大段的 nat 地址,目前只用了几个,剩下的几个没有使用,为了避免外部访问没有使用的地址,可以在防火墙上写整个大段的黑洞路由吗"的答案:可以写,但不能简单粗暴地对整个大段写一条 ip route-static x.x.x.0 255.255.255.0 NULL0——必须配 preference 70 把优先级调低作为兜底。因为系统会为已配置 nat server 的地址自动下发 /32 黑洞路由(优先级 60),按最长掩码匹配原则 /32 优先于 /24,且 nat server 转换动作在路由查找前执行,所以已用地址的 DNAT 不受影响;未用地址匹配你写的 /24 黑洞(优先级 70)被 NULL0 静默丢弃,不回 ICMP unreachable,达到隐藏效果 。配套措施:安全策略只放通已用地址对应的内网服务,形成"路由黑洞+策略最小化"双重防护。注意:如果 nat server 只转端口不转目的地址,转换后的目的 IP 会命中系统下发的 /32 黑洞被丢弃,必须同时转换目的地址 。操作前 save 备份,在维护窗口执行,配完后 display ip routing-table 验证+外部实测。三条铁律:/24 黑洞必须配 preference 70、nat server 必须同时转换目的地址、安全策略配套最小化。

暂无评论

粉丝:97人 关注:0人

  • server-map/DNAT 优先级高于静态黑洞路由:已经存在 DNAT/server‑map 条目的公网 IP,即使路由表有黑洞,命中 NAT 策略依旧正常做地址转换,业务不受影响。
  • 没有匹配到任何 DNAT/server‑map 的目的 IP,查路由表,如果匹配黑洞路由,报文直接丢弃,不会向内网转发。
  • 黑洞路由要配置在公网所在的 VRF(如果是全局实例,就不要带 vpn‑instance 参数)。
  • 暂无评论

    粉丝:26人 关注:2人

    核心结论
    可以配置黑洞路由,但只配置黑洞路由不够,存在漏洞;DNAT 地址池内未使用的公网 IP,外部访问时,防火墙会先做目的地址匹配,没有 DNAT 条目的情况下,防火墙会把这个公网 IP 当成防火墙自身接口 IP 处理,尝试访问防火墙本机,会出现能通防火墙管理端口的风险。
    场景说明:
    公网地址段:202.1.1.0/24,拿其中一段做 DNAT 地址池:202.1.1.10‑202.1.1.20
    实际只用到:.10、.11;.12‑.20空闲未配置 DNAT
    外部用户访问202.1.1.12:无 DNAT 匹配,报文上送到防火墙主控,访问防火墙本身,有安全风险。
    方案 1:黑洞路由 + 安全策略拦截(推荐生产最佳实践)
    1、配置黑洞路由(把整个 DNAT 地址池指向 NULL0)
    bash
    system‑view
    # 将整个DNAT地址池配置黑洞路由,优先级60
    ip route‑static 202.1.1.10 255.255.255.240 NULL 0 preference 60
    注意:黑洞路由优先级不能高于接口直连路由,直连路由优先级 0,黑洞默认 60,不会覆盖真实 DNAT 生效的地址。
    当 DNAT 条目匹配成功,会进行目的地址转换,路由查内部私网路由;只有 DNAT 匹配失败的空闲 IP,才会命中黑洞路由丢弃报文。
    ⚠️关键点:黑洞路由只能解决报文三层转发丢弃,但是在防火墙:DNAT 未命中的报文,优先送给本机进程,不走转发路由表!
    👉所以只配置黑洞路由,外部访问空闲 DNAT 地址依然可以访问防火墙本机,黑洞路由不生效!必须配合安全策略拦截。
    2、安全策略拦截外部访问 DNAT 地址池空闲 IP(必不可少)
    假设 DNAT 地址池属于外网接口所在安全域(Untrust):
    bash
    security‑policy ip
    rule 10 name Block‑Unused‑DNAT‑IP
    destination‑ip‑address 202.1.1.10 255.255.255.240
    source‑zone Untrust
    destination‑zone Local
    action drop
    logging enable
    这条规则:外网访问 DNAT 地址池所有地址,访问防火墙本机(Local 域)直接丢弃。
    已经配置 DNAT 的 IP,报文会先执行 DNAT 转换,目的 IP 变成内网服务器 IP,目的域变为内网域,不会命中这条 drop 规则;只有空闲 IP 没有 DNAT,目的 IP 不变,去往 Local 域,被丢弃。
    方案 2(更优):使用 NO‑RESPONSE DNAT 地址池(H3C 防火墙特有,优先推荐)
    新版本 7.1R6605 及以上支持 no‑response 参数,不需要黑洞路由。
    定义 DNAT 地址池时增加no‑response:
    bash
    nat address‑group DNAT‑POOL no‑response
    address 202.1.1.10 202.1.1.20
    no‑response 作用:
    地址池内 IP,如果没有匹配任何 DNAT 策略,设备直接丢弃入站报文,不会上送本机,无需黑洞路由、无需额外 Local 域策略。
    已经配置 DNAT 映射的 IP,正常做目的地址转换,业务不受影响。
    限制:老版本 Alpha7164(你上一条提问的版本 version 7.1.064, Alpha 7164)不支持 no‑response 关键字,只能使用【黑洞路由 + Local 域安全策略】方案。
    容易踩坑细节
    ❌只配置黑洞路由,不配置 Local 域 drop 策略:
    外部访问空闲 DNAT IP,报文送给防火墙本机,黑洞路由完全不生效,风险依旧存在。
    防火墙处理顺序:
    报文入接口 → 查找DNAT策略
      - 如果命中 DNAT:转换目的 IP,继续走转发流程,查路由表(黑洞路由此时不起作用)
      - 没有命中 DNAT:目的 IP 不变,报文上送到防火墙 Local 本机,不走转发路由表!黑洞路由不会参与。
    黑洞路由掩码必须精准匹配你的 DNAT 地址池范围,不要包含公网接口本身 IP;
    例如外网接口 IP 是202.1.1.1/24,黑洞不要把.1包含进去。
    不要把黑洞路由优先级设置成 0,会覆盖接口直连路由,导致正常 DNAT 全部失效。
    完整适配你 Alpha7164 版本的可粘贴配置示例
    DNAT 地址池:202.1.1.10‑202.1.1.20,外网安全域 Untrust
    bash
    system‑view
    # 1、配置黑洞路由
    ip route‑static 202.1.1.10 255.255.255.240 NULL 0 preference 60

    # 2、安全策略拦截外网访问DNAT池地址访问防火墙本机
    security‑policy ip
    rule 10 name Block_Unused_Dnat
    source‑zone Untrust
    destination‑zone Local
    destination‑ip‑address 202.1.1.10 255.255.255.240
    action drop
    logging enable
    验证测试方法
    外部访问已经配置 DNAT 的 IP:正常转发到内网服务器,业务正常;
    外部访问空闲未配置 DNAT 的 IP:被安全策略丢弃,看日志display security‑policy ip statistics rule,命中计数上涨;
    查看黑洞路由:display ip routing‑table static,确认 NULL0 路由存在。
    补充说明
    如果你的 DNAT 是在 VRF 虚拟实例中,黑洞路由需要绑定对应 VPN 实例:
    bash
    ip route‑static 202.1.1.10 255.255.255.240 NULL 0 vpn‑instance XXX preference 60
    升级固件到 R66xx 正式版本,就可以使用nat address‑group xxx no‑response,简化配置。
    简单总结
    Alpha7164 老版本没有 no‑response,不能只靠黑洞路由;必须:黑洞路由 + 一条 Untrust→Local 的 drop 策略;
    新版本正式版优先使用 no‑response,最简洁安全;
    原理关键点:DNAT 未命中报文上送到防火墙本机,不查转发路由表,黑洞路由对这部分报文无效。

    暂无评论

    编辑答案

    你正在编辑答案

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

    分享扩散:

    提出建议

      +

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

    确定

    亲~检测到您登陆的账号未在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. 您是谁?(身份证明材料,可以是身份证或护照等证件)
    我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

    对根叔社区有害的内容

    ×

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

    不规范转载

    ×

    举报说明