snat修改源ip实现内网访问外网,dnat修改目的ip实现外网访问内网服务;二者需配合安全策略放行流量,缺一不可。

服务器防火墙做 NAT 转发,核心是两件事:让外网能访问内网服务(目的 NAT),同时确保流量能被正确放行(安全策略)。配置不复杂,但容易漏掉关键环节。
明确你要实现的类型
先分清场景,再选对应配置方式:
- 源 NAT(SNAT):内网机器主动访问外网,比如服务器更新系统、调用第三方 API。常见用法是 Easy-IP(直接复用出口接口公网 IP)。
- 目的 NAT(DNAT / 端口映射):外网用户通过公网 IP 和端口访问你内网的 Web、SSH、数据库等服务。这是“发布服务”最常用的方式。
- 双向 NAT:内网用户也用公网域名访问同一台内网服务器(比如 DNS 解析到公网 IP),需要额外做域内转换,否则会因路由不对导致连接失败。
目的 NAT(端口映射)标准写法
以华为 USG 防火墙为例,把公网 IP 203.0.113.10 的 80 端口映射到内网 Web 服务器 192.168.1.100:
针对Linux系统,phpStudy团队推出全网首家linux docker容器面板,只要一个命令,快速安装面板,在面板里可以自行选择软件版本,可以方便的进行安全配置,就算没有Linux基础也可以快速搭建和管理PHP服务器环境!
[USG] nat server protocol tcp global 203.0.113.10 80 inside 192.168.1.100 80
这条命令一次性完成地址+端口转换。注意:
– 如果只映射 IP 不改端口(比如公网 8080 → 内网 80),写成 global 203.0.113.10 8080 inside 192.168.1.100 80;
– 协议必须明确(tcp/udp),ICMP 不支持端口映射。
别忘了配安全策略
NAT 只改地址,不放行流量。外网访问进来,必须显式允许:
[USG] security-policy<br>[USG-policy-security] rule name Allow_Web_From_Internet<br>[USG-policy-security-rule-Allow_Web_From_Internet] source-zone untrust<br>[USG-policy-security-rule-Allow_Web_From_Internet] destination-zone trust<br>[USG-policy-security-rule-Allow_Web_From_Internet] destination-address 192.168.1.100<br>[USG-policy-security-rule-Allow_Web_From_Internet] service tcp 80<br>[USG-policy-security-rule-Allow_Web_From_Internet] action permit
关键点:
– 策略匹配的是 NAT 转换后的目标地址(即内网服务器真实 IP),不是公网 IP;
– zone 名称要和接口实际所属 zone 一致(常见为 untrust 和 trust);
– 如果还允许 HTTPS,再加一条 service tcp 443。
验证与排错要点
配置完别急着测试,先看三样:
- 执行
display nat server确认 DNAT 规则已生效; - 执行
display firewall session table verbose查是否有命中会话(访问一次再查); - 执行
display security-policy rule name Allow_Web_From_Internet看命中计数是否增加——没增加说明流量根本没走到这条策略,可能是 zone 错、地址写错,或被更靠前的 deny 规则拦住了。










