当前位置: 首页 > news >正文

路由器NAT回流踩坑

路由器 H3C GR-3000AX-U 不支持NAT回流

核心问题定位

  1. 外网访问
    • ✅ 非Docker服务(直接运行在宿主机上的服务)可以访问
    • ❌ Docker服务 无法访问
  2. 内网访问
    • ✅ 内网IP访问(无论Docker还是非Docker)正常
    • ❌ 内网通过公网IP访问 全部失败(符合NAT回环不支持的预期)

结论
Docker 的端口映射与路由器的端口转发存在冲突,导致外网无法访问 Docker 服务,而内网访问 Docker 正常是因为直接走了内网IP,不依赖端口转发。


根本原因分析

1. Docker 默认使用 bridge 网络(NAT 模式)

当您运行:

docker run -p 8080:80 nginx

Docker 会在 iptables 里添加 NAT 规则,使宿主机的 8080 端口流量转发到容器的 80 端口。

但问题在于:

  • 外网流量进入宿主机后,Docker 的 NAT 规则可能没有正确处理(特别是源IP是外网时)。
  • 路由器的端口转发目标必须是宿主机的IP+端口,但 Docker 的 bridge 网络可能会导致流量被错误丢弃。

2. 路由器端口转发 vs. Docker 端口映射

流量方向正常流程可能的问题
外网 → 路由器 → 宿主机 → Docker路由器转发到 宿主机IP:8080 → Docker 再转发到容器Docker 的 iptables 规则可能未允许外网IP的流量
内网 → 宿主机 → Docker直接访问 宿主机IP:8080 → Docker 转发正常不依赖路由器,所以没问题

解决方案

改用 host 网络模式(推荐)

让 Docker 直接使用宿主机的网络栈,避免 NAT 问题:

docker run --network=host -d nginx

优点

  • 容器直接绑定到宿主机端口,不再经过 Docker NAT。
  • 路由器的端口转发会直接生效(就像非Docker服务一样)。

缺点

  • 容器会占用宿主机的网络栈(多个容器不能绑定相同端口)。

总结表

现象原因解决方案
外网无法访问Docker,但非Docker服务正常Docker NAT 规则干扰改用 host 模式
内网访问公网IP失败路由器不支持 NAT 回环1. 内网直接用内网IP访问

请先尝试 --network=host,如果问题解决,则确认是 Docker NAT 问题。

解决:更换 H3C ERG3-1800W(ER是系列,G3是型号)

相关文章:

  • 黑电平校正(Black Level Correction, BLC)算法
  • ai说什么是注解,并以angular ts为例
  • 基于 by 组态的智能工厂设备运行实时监控系统
  • OrangePi Zero 3学习笔记(Android篇)2 - 第一个C程序
  • 政务浏览器 一站式首页功能配置说明
  • JavaScript ES6+ 最佳实践
  • 【DB2】DB2启动失败报错SQL1042C
  • 2025-05-07 Unity 网络基础7——TCP异步通信
  • 什么是声明式UI什么是命令式UI?鸿蒙ArkTS为什么是声明式UI-优雅草卓伊凡
  • 智算中心基础设施0-1建设全流程及投产后的运维
  • 融合静态图与动态智能:重构下一代智能系统架构
  • CPU-GPU-NPU-TPU 概念
  • 【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
  • Feign 重试策略调整:优化微服务通信的稳定性
  • PAT(最近)
  • 商汤科技前端面试题及参考答案
  • 如何避免项目结束后知识流失
  • 【基础知识】常见公式计算(三)
  • 【论文阅读】Harnessing the Power of LLM to Support Binary Taint Analysis
  • 汽车服务小程序功能点开发
  • 母亲节|写给妈妈
  • 中方是否认同俄方关于新纳粹主义观点?外交部:联大曾多次通过相关决议
  • 中国天主教组织发贺电对新教皇当选表示祝贺
  • 趣看 | 五一黄金周:你拍风景,拍风景的人在拍你
  • 上任后首访,德国总理与法国总统举行会晤
  • 中国德国商会报告:76%在华德企受美国关税影响,但对华投资战略依然稳固