DNAT 目标网络地址转换(Destination Network Address Translation) 修改正在传输的数据包的目标地址 进行端口映射通常需要使用网络地址转换(NAT)规则或端口转发来实现。New-NetNat 进行配置和管理;Add-NetNatStaticMapping 命令的常用参数和功能分类表;Get-NetNatStaticMapping 命令

源地址转换SNAT( Source Network Address Translation)

SNAT(Source Network Address Translation,源网络地址转换)完整拆解解构

一、基础定位

SNAT:源地址转换,属于 Netfilter NAT 体系核心分支,和 DNAT 成对互补。
  • DNAT:入站流量,修改目的 IP,外网访问内网服务(端口映射)
  • SNAT:出站流量,修改源 IP,内网主机访问外网
  • NAPT(端口地址转换):最常用的 SNAT 扩展,多内网主机复用同一个公网 IP,依靠端口区分流,日常家庭路由器、企业出口网关均为 NAPT。
定义:
 
内网主机向外网发送报文,流量经过网关时,网关改写IP 报文头部源 IP(可附带源端口),替换为网关公网地址;回程报文依靠连接跟踪表自动反向转换目的地址,内网主机全程使用私有 IP 通信,外网只能看见网关公网 IP。
典型场景:
  1. 内网 PC 共享一条公网线路上网(最主流)
  2. 服务器集群统一出口 IP,隐藏后端内网网段
  3. 多线路网关,指定网段流量从特定公网 IP 出站
  4. 规避内网网段与对端网段 IP 冲突
关键概念区分
 
SNAT:静态指定转换后的源 IP;
 
MASQUERADE:SNAT 动态变体,适配网关外网 IP 动态获取(PPPoE/DHCP),无需固定填写公网 IP,家用软路由普遍使用 MASQUERADE。

二、底层原理

1. 报文变换全过程(标准 NAPT)

正向报文(内网 → 外网,经过网关)
plaintext
源IP:192.168.1.100:50001   目的IP:203.0.113.50:443
↓网关SNAT转换后
源IP:203.0.113.10:40122    目的IP:203.0.113.50:443
回程报文(外网 → 网关)
plaintext
源IP:203.0.113.50:443      目的IP:203.0.113.10:40122
↓网关查表反向转换
源IP:203.0.113.50:443      目的IP:192.168.1.100:50001

2. 核心基石:连接跟踪 nf_conntrack

SNAT无法脱离连接跟踪独立工作
  1. 内网首包到达网关,匹配 SNAT 规则;
  2. 内核创建 conntrack 条目,记录:内网五元组 ↔ 公网五元组映射关系;
  3. 同一条流后续报文不再重复匹配规则,直接查表完成地址转换;
  4. TCP/UDP 会话超时后自动清理映射条目,释放端口资源。

3. Netfilter 钩子位置(Linux 体系核心分界)

plaintext
PREROUTING  → DNAT(改目的地址,流量刚进入网关)
POSTROUTING → SNAT/MASQUERADE(改源地址,报文即将离开网关)
✅ SNAT 规则只能配置在 nat 表 POSTROUTING 链
 
❌ 在 PREROUTING 配置 SNAT 永久不生效。

4. SNAT vs MASQUERADE 本质差异

类型 适用场景 特征
SNAT 网关外网 IP 固定(静态公网 IP) 预先指定--to-source,性能更高,连接表稳定
MASQUERADE 外网 IP 动态变化(PPPoE、DHCP 获取公网) 自动读取网卡当前 IP;IP 变更时清空所有连接

5. 约束条件

  1. 流量必须穿越 NAT 网关;
  2. 不需要修改内网主机网关(正常路由可达网关即可);
  3. 多公网 IP 场景,可基于源网段 / 目的地址做策略 SNAT,实现多出口选路。

三、依赖组件(Linux / Windows 两大主流实现)

Linux(软路由、防火墙通用架构,内核态实现)

内核模块(无实体文件,内核加载组件)

  1. nf_conntrack:连接跟踪核心(SNAT 强制依赖)
  2. nf_nat:NAT 通用框架
  3. nf_nat_ipv4:IPv4 NAT 协议实现
  4. iptable_nat / nft_nat:iptables/nftables NAT 表驱动

用户态配置工具

  • iptables:传统 NAT 规则下发工具
  • nft:新一代 nftables 工具,替代 iptables
  • conntrack-tools:查看、手动清理连接跟踪表

运行时内存数据表(伪文件系统)

  • /proc/net/nf_conntrack 当前所有连接映射条目
  • /proc/sys/net/netfilter/* 内核可调参数(最大连接数、各类协议超时时间)

Windows Server RRAS NAT 实现

  1. 内核驱动:ipnat.sys Windows NAT 驱动
  2. 用户态组件:rras.dll、natupnp.dll
  3. 持久化配置:注册表
     
    HKLM\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\IpNAT

硬件防火墙(华为、H3C、深信服、FortiGate)

SNAT 功能集成在设备数据平面;配置持久化存储在 Flash 配置文件;无需单独系统文件。

四、完整逻辑链路

链路 1:内网主机访问互联网标准 SNAT 数据流

plaintext
内网主机发出报文 → 路由转发至NAT网关
        ↓
报文进入网关 → 路由判断报文需要转发出外网网卡
        ↓
到达Netfilter POSTROUTING钩子,匹配nat表SNAT规则
        ↓
nf_conntrack 创建正向/反向五元组映射
        ↓
修改报文源IP(源端口按需调整)
        ↓
报文从外网网卡发出访问互联网
        ↓
外网服务器应答报文抵达网关外网口
        ↓
查询conntrack表,执行反向地址转换
        ↓
报文路由转发回原始内网主机

链路 2:SNAT + DNAT 共存场景(企业标准架构)

  • 内网上网:POSTROUTING SNAT
  • 公网发布业务:PREROUTING DNAT
重点:发布在内网的服务器,外网访问触发 DNAT;服务器主动向外发起请求,仍然会匹配 SNAT。

链路 3:Hairpin NAT(内网主机使用公网 IP 访问本地业务)

普通 DNAT 无法闭环,需要额外对内网流量执行 SNAT,是运维高频踩坑组合方案。

五、与前文技术栈配套联动链

  1. URL、HTTP/HTTPS Web 业务
     
    内网终端访问外网 URL,流量经过 SNAT 转换;外网服务器看到的访客 IP 全部为网关出口 IP;日志无法直接溯源内网真实主机,需网关记录五元组会话日志。
  2. DNAT
     
    二者经常配套部署:DNAT 负责入站发布服务,SNAT 负责内网出站上网;机房标准边界网关组合方案。
  3. DHCP、DNS
     
    内网终端 DHCP 获取私有地址;DNS 解析外网域名,解析后的 IP 流量触发 SNAT 转发。
  4. MDT、ZTIGather.wsf
     
    装机服务器若放置在内网,需要对外提供部署服务时配置 DNAT;终端主动上报资产清单向外网接口则走 SNAT。
  5. vPro / CSME AMT 带外管理
     
    服务器带外管理网口一般独立网段;如需访问外网升级固件,配置独立网段 SNAT 策略。
  6. wbemtest、WMI 远程管理
     
    内网主机向外网服务器发起 WMI 连接,源 IP 被 SNAT 转换;远程设备审计日志只能看到网关出口 IP。

六、典型故障断链场景

  1. SNAT 规则放置错误链(写入 PREROUTING)
     
    规则永远不生效,内网无法访问外网。
  2. 连接跟踪表溢出
     
    并发连接超限,新流量无法创建映射,表现为部分网页打不开、TCP 握手失败。
     
    调优参数:net.nf_conntrack_max
  3. MASQUERADE 场景外网 IP 频繁切换
     
    PPPoE 断线重拨,公网 IP 变更,内核清空所有 conntrack 会话,所有业务连接全部中断。
  4. 多出口策略路由 + SNAT 不匹配
     
    流量从 A 网卡路由出去,却匹配到 B 网卡的 SNAT 规则;报文回程异常,单向不通。
  5. 内网与后端服务器同网段(Hairpin 场景)
     
    内网主机使用公网域名访问内部服务,只有 DNAT 没有配套 SNAT,服务器应答直接回内网主机,不经过网关,通信失败。
  6. 防火墙安全策略拦截
     
    地址转换成功,但区域间安全策略拒绝转换后的流量,访问中断。
  7. 安全风险场景
     
    SNAT 隐藏内网真实地址,若网关无会话日志,发生外网攻击时难以溯源内网主机;必须开启 NAT 会话日志留存审计。

七、配套运维工具、标准配置模板

Linux iptables 常用示例

bash
# 静态公网IP SNAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.10

# 动态IP线路使用MASQUERADE(PPPoE)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

# 查看NAT规则
iptables -t nat -L -n

# 查看连接跟踪表
cat /proc/net/nf_conntrack

运维基线建议

  1. 固定公网 IP 优先使用 SNAT,性能优于 MASQUERADE;
  2. 边界网关必须开启 NAT 会话日志,满足等保溯源要求;
  3. 预估业务并发,合理调大nf_conntrack_max,防止连接表打满;
  4. 多出口场景严格绑定「路由出口网卡 + 对应 SNAT 策略」;
  5. 内网访问公网域名(Hairpin)场景,配套部署 DNAT + 局部 SNAT。

八、极简总结

  1. SNAT 在网关POSTROUTING阶段修改出站报文源 IP,实现内网私有网段共享公网地址访问互联网;动态线路使用 MASQUERADE 变体。
  2. 强依赖nf_conntrack连接跟踪表维护双向映射,会话超时自动回收端口资源。
  3. 和 DNAT 分工明确:SNAT 处理出站流量,DNAT 处理入站发布流量,企业边界网关通常二者共存。
  4. 高频故障点:规则挂载钩子错误、连接跟踪表溢出、多出口路由与 SNAT 不匹配、Hairpin 访问缺少配套策略。
  5. 安全重点:SNAT 屏蔽内网真实 IP,网关必须留存会话日志用于安全事件溯源。

Source Network Address Translation (SNAT) 是一种常见的网络地址转换(NAT)技术,用于修改数据包的源IP地址,通常用于实现多个设备共享一个公网IP地址。它广泛应用于家庭、企业网络、VPN网关、负载均衡器等场景中。以下是与SNAT相关的标准和技术文档来源:

SNAT相关标准和技术文档来源

  1. RFC 3022 - "Traditional NAT (Network Address Translation)"

    • 概述:这是SNAT的基本RFC之一,介绍了传统的网络地址转换(NAT)机制,重点讨论了源地址转换的原理和应用。该文档为理解SNAT在互联网中的作用提供了基础。
    • 链接:RFC 3022
  2. RFC 2663 - "IP Network Address Translator (NAT) Terminology and Considerations"

    • 概述:本RFC定义了NAT相关的术语,详细讨论了SNAT和其他NAT形式的工作原理,提出了NAT的优缺点,帮助理解SNAT如何在网络中实现源地址的转换。
    • 链接:RFC 2663
  3. RFC 4787 - "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP"

    • 概述:该RFC重点讨论了SNAT在处理UDP流量时的行为要求。它描述了在NAT环境下,特别是使用SNAT时,UDP流量的源地址转换应该如何处理,以确保网络服务的稳定性。
    • 链接:RFC 4787
  4. RFC 6106 - "IPv6 Router Advertisement Options for DNS Configuration"

    • 概述:虽然该文档主要讨论IPv6的DNS配置,但它也涉及到在IPv6环境下,如何处理SNAT和地址共享问题,尤其是在IPv6和IPv4共存的网络中。
    • 链接:RFC 6106
  5. RFC 5382 - "Port Control Protocol (PCP)"

    • 概述:该文档描述了端口控制协议(PCP),该协议为NAT设备(包括使用SNAT的设备)提供了更加灵活的端口映射和地址转换控制。PCP可以改善SNAT和其他NAT技术的工作效率,特别是在需要动态调整端口映射时。
    • 链接:RFC 5382
  6. RFC 3424 - "IAB Considerations for IP Address Sharing"

    • 概述:该文档探讨了IP地址共享的挑战和技术考虑,包括SNAT在共享地址方案中的作用。它提供了关于如何在互联网环境中高效使用公网IP地址的见解。
    • 链接:RFC 3424
  7. RFC 3550 - "RTP: A Transport Protocol for Real-Time Applications"

    • 概述:虽然这篇文档主要讨论实时传输协议(RTP),但它也涉及到如何在SNAT环境中处理RTP流量,确保视频和语音等实时应用可以在NAT环境下稳定运行。
    • 链接:RFC 3550
  8. RFC 6146 - "IPv6 Network Address Translation (NAT)64: Procedures and Methodology"

    • 概述:该文档讨论了IPv6中的地址转换问题,特别是如何将IPv6流量与IPv4流量进行转换。在NAT64架构中,SNAT也被用于IPv4地址与IPv6地址之间的映射,帮助IPv6主机访问IPv4资源。
    • 链接:RFC 6146

SNAT的应用场景

  • 家庭和企业共享互联网连接:通过SNAT,多个设备共享一个公网IP地址访问互联网,通常由路由器或防火墙实现。
  • VPN网关:VPN连接时,SNAT用于将来自内部私有网络的流量转换为公网IP,以便通过互联网访问外部资源。
  • 负载均衡:在负载均衡架构中,SNAT可以用于隐藏内网服务器的真实IP地址,从而提高安全性。
  • 防火墙配置:SNAT通常用于防火墙规则的配置,以限制哪些外部IP地址可以访问内网主机。

这些标准和RFC文档详细阐明了SNAT的工作原理、应用场景以及相关的协议和技术规范。通过阅读这些文档,网络工程师可以更好地理解如何实现和管理SNAT,以确保在大规模网络环境中的流量有效管理和安全连接。理解这些技术文档有助于正确配置SNAT,解决实际部署中可能遇到的各种网络问题。

DNAT(Destination Network Address Translation,目的网络地址转换)完整拆解解构

一、基础定位

DNAT:目的地址转换,属于 IP NAT 四大分支之一:
  • SNAT:源地址转换(出站,内网→互联网,替换源 IP)
  • DNAT:目的地址转换(入站,外网→内网服务器,替换目的 IP)
  • FULL NAT:同时转换源 + 目的
  • PAT(NAPT):端口复用,属于 SNAT 扩展
核心定义:
 
网关收到外部入站 IP 报文,根据匹配规则,修改报文头部【目的 IP(可选目的端口)】,将流量转发至内网私有地址主机;回程流量自动执行反向转换。
 
典型场景:公网端口映射、发布内网服务器、端口转发、负载均衡前置流量导入。
关键区分
 
SNAT:谁出去,改谁的源 IP;
 
DNAT:流量进来,改目标 IP,外网访问公网 IP → 网关替换目的 IP 指向内网机器。

二、底层原理

1. IP 报文视角原始变换

外部入站报文(到达网关外网口)
plaintext
源IP:客户端公网IP     目的IP:网关公网IP:端口X
DNAT 网关执行转换后转发内网:
plaintext
源IP:客户端公网IP     目的IP:内网服务器IP:端口Y
回程报文(内网服务器回复客户端)
plaintext
源IP:内网服务器IP:Y   目的IP:客户端公网IP
网关自动反向转换源地址:
plaintext
源IP:网关公网IP:X     目的IP:客户端公网IP
客户端全程只感知网关公网 IP,无法直连内网地址。

2. 连接跟踪(Conntrack / 连接状态表 — DNAT 核心基石)

DNAT 不能独立工作,强依赖连接跟踪表(Connection Tracking)
  1. 网关收到首包,匹配 DNAT 规则;
  2. 创建 conntrack 条目,记录正向 / 反向转换映射关系;
  3. 同一条流后续报文不再重复匹配规则,直接查表转换;
  4. 会话超时后自动清理映射条目。
转换逻辑时序:
plaintext
外网报文抵达网关网卡 → 路由预判断 → 匹配DNAT规则
        ↓
写入conntrack映射:公网IP:端口 ↔ 内网IP:端口
        ↓
修改报文目的IP/目的端口
        ↓
查询内网路由,转发至内网服务器
        ↓
服务器应答报文回送网关
        ↓
网关查询conntrack反向条目,修改源IP为网关公网地址
        ↓
向外网客户端发送应答

3. DNAT 生效前置约束(极易踩坑)

  1. 流量必须穿越网关;不能在终端本机做 DNAT(本机流量有路由特殊处理:local 入站)
  2. 内网服务器默认网关必须指向 NAT 网关;否则回程报文不走网关,无法完成反向转换,通信单向不通。
  3. 防火墙策略:放行转换后的内网地址流量。

4. DNAT 与端口转发关系

  • 不带端口:整 IP DNAT(全部端口映射到一台内网主机)
  • 带端口:端口映射(最常用,公网 IP:80 → 192.168.1.100:8080)

三、依赖组件(分两大平台:Linux iptables/nftables、Windows RRAS)

方案 A:Linux(企业防火墙、软路由主流)

内核依赖(内核态,无文件,内核模块)

  1. nf_conntrack:连接跟踪核心(DNAT 必备)
  2. nf_nat:NAT 基础框架
  3. nf_nat_ipv4:IPv4 NAT 实现
  4. iptable_nat / nft_nat:iptables/nftables NAT 表驱动

用户态工具(配置载体)

  • iptables:传统 NAT 配置工具
  • nftables:新一代替代 iptables
  • conntrack-tools:查看、清理连接跟踪表

内存数据表(无磁盘文件,运行时)

/proc/net/nf_conntrack 连接跟踪条目
 
/proc/sys/net/netfilter/ 内核参数(超时、最大跟踪连接数)
不存在独立 “DNAT 程序文件”,DNAT 是内核 Netfilter 框架内置功能,工具仅负责下发规则。

方案 B:Windows Server(RRAS 路由远程访问)

  1. iphlpapi.dll IP 辅助网络 API
  2. rras.dll RRAS 路由引擎
  3. natupnp.dll NAT 组件
  4. 内核驱动:ipnat.sys Windows NAT 驱动
     
    存储:注册表保存 NAT 端口映射规则
plaintext
HKLM\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\IpNAT

通用硬件设备(防火墙、路由器、交换机)

硬件防火墙(华为、华三、深信服、FortiGate):
 
DNAT 功能固化在设备 OS 数据平面,配置持久化存储在 Flash 配置文件。

四、完整依赖关系逻辑链路

链路 1:Linux iptables DNAT 标准数据流

plaintext
外网IP报文到达网卡 → Netfilter PREROUTING钩子
        ↓
iptables nat表 PREROUTING链匹配DNAT规则
        ↓
nf_conntrack创建连接映射
        ↓
内核修改报文目的IP/端口
        ↓
路由模块查找内网路由,转发内网服务器
        ↓
服务器回包抵达网关 → Netfilter POSTROUTING
        ↓
查询conntrack反向映射,自动执行SNAT反向转换
        ↓
报文发往外网客户端
重点:DNAT 规则只能写在 PREROUTING 链;POSTROUTING 只能做 SNAT。

链路 2:区分和 SNAT 链路位置

  • PREROUTING:DNAT(报文刚进入网关,改目的地址)
  • POSTROUTING:SNAT(报文即将离开网关,改源地址)

链路 3:无连接跟踪时 DNAT 失效场景

关闭nf_conntrack → 无法保存双向映射;回程流量无法反向转换,业务单向访问不通。

五、与前文技术栈配套联动链

  1. URL / Web 服务
     
    DNAT 最普遍用途:将公网 URL 访问流量映射到内网 Web 服务器(HTTP/HTTPS);HTTPS 场景注意:TLS 终结位置(网关卸载证书 or 后端直传)。
  2. CSME / vPro AMT
     
    机房运维常用 DNAT:公网指定端口映射至服务器 AMT 5900/16992 端口,远程带外管理;必须严格限制源 IP,防止 AMT 暴露公网。
  3. MDT 部署、ZTIGather.wsf
     
    内网部署环境一般不需要 DNAT;跨广域远程装机场景,可 DNAT 映射 TFTP/HTTP 部署端口供远端终端拉取镜像。
  4. .lnk、wbemtest、WMI
     
    远程 WMI(DCOM 135 端口)跨公网访问,可通过 DNAT 端口映射;安全风险极高,生产环境不推荐直接映射 135 端口。
  5. DHCP、DNS
     
    DNAT 发布内网服务时,公网 DNS A 记录指向网关公网 IP;DNS 解析完成后流量触发 DNAT 转发。

六、典型故障断链场景

  1. 内网服务器网关未指向 NAT 网关
     
    现象:外网客户端 TCP 握手单向通,无法建立完整连接;回程报文不走网关,缺少反向地址转换。
  2. DNAT 规则书写错误(链选错)
     
    把 DNAT 配置在 POSTROUTING,规则永远不生效。
  3. 防火墙区域策略拦截
     
    地址转换成功,但安全策略拒绝转换后内网 IP 流量,业务访问被阻断。
  4. 连接跟踪表溢出
     
    并发量大,nf_conntrack条目打满,新 DNAT 映射无法创建,新连接失败。
  5. 端口冲突
     
    多条 DNAT 规则映射同一公网端口,匹配冲突,流量转发异常。
  6. 本机访问公网 IP(回环问题 Hairpin NAT)
     
    内网主机用公网 IP 访问内部服务:普通 DNAT 无法回程,需要额外开启 Hairpin NAT(同时对内网流量做源地址转换)。
  7. 安全风险场景
     
    错误配置 DNAT 将高危端口(WMI 135、SMB 445、RDP 3389、AMT)直接暴露公网;极易遭受扫描、爆破、漏洞攻击。

七、配套链|运维工具、配置模板、基线规范

Linux 配套工具

bash
# 查看连接跟踪表
cat /proc/net/nf_conntrack
# iptables DNAT典型规则示例
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.50:8080
# 查看nat表规则
iptables -t nat -L -n

硬件防火墙配套概念

  • 目的地址转换 = 虚拟服务器 / 端口映射
  • 常配合:地址对象、服务端口对象、源地址限制(仅允许指定公网 IP 访问映射端口)

运维基线建议

  1. DNAT 映射务必增加源地址访问控制,禁止 0.0.0.0/0 全网开放管理端口;
  2. 管理类端口(RDP、WMI、AMT、SSH)尽量不直接 DNAT 公网,优先 VPN 接入;
  3. 监控 conntrack 连接表占用,防止表溢出导致业务中断;
  4. 梳理端口规划,避免公网端口冲突;
  5. 区分业务端口与管理端口,分开不同公网 IP 映射。

八、极简总结

  1. DNAT(目的地址转换)在网关PREROUTING 阶段修改入站报文目的 IP / 端口,实现外网访问内网私有地址服务器;
  2. 强依赖连接跟踪 conntrack,自动维护双向映射,回程流量完成反向转换;
  3. 核心痛点:内网服务器网关必须指向 NAT 网关;内网主机访问公网 IP 需要 Hairpin NAT 特殊处理;
  4. 典型应用:端口映射、公网发布内网 Web、带外管理(AMT);
  5. 安全红线:谨慎映射高危管理端口至互联网,最小源 IP 访问范围。

Destination Network Address Translation (DNAT) 是一种常见的网络地址转换(NAT)技术,用于修改数据包的目标IP地址。DNAT通常用于将外部流量重定向到内网的特定主机或服务器上。该技术广泛应用于防火墙、路由器、负载均衡器等网络设备中,尤其是在端口转发、反向代理和流量管理等场景中。

DNAT相关标准和技术文档来源:

  1. RFC 3022 - "Traditional NAT (Network Address Translation)"

    • 概述:这是定义传统NAT技术的核心RFC之一。虽然它主要讨论的是源地址转换(SNAT),但是它同样为DNAT的工作原理提供了框架。文档讨论了如何在地址转换过程中保证私有IP地址和公网IP地址之间的通信。
    • 链接:RFC 3022
  2. RFC 2663 - "IP Network Address Translator (NAT) Terminology and Considerations"

    • 概述:这篇RFC定义了NAT相关术语,并详细讨论了NAT的各种形式,包括DNAT。它对于理解DNAT的工作原理及其在网络中的角色非常重要。
    • 链接:RFC 2663
  3. RFC 4787 - "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP"

    • 概述:该文档阐明了NAT设备(包括DNAT)在处理UDP流量时的行为要求。对于实时通信(如VoIP、视频会议等)中使用DNAT进行数据包重定向的情况特别有帮助。
    • 链接:RFC 4787
  4. RFC 5382 - "Port Control Protocol (PCP)"

    • 概述:本文档介绍了端口控制协议(PCP),它为NAT设备(包括DNAT)提供了更好的控制方式,允许客户端管理端口映射。它能帮助用户动态控制端口转发规则,确保内网和外网之间的流量可以顺利通过。
    • 链接:RFC 5382
  5. RFC 2979 - "Firewall and NAT Traversal for SIP"

    • 概述:此文档介绍了如何在SIP(会话发起协议)应用中进行防火墙和NAT穿越。它涉及到如何使用DNAT处理SIP流量,特别是对于语音和视频通话服务的实现,DNAT通常用于将外部请求转发到内网的SIP服务器。
    • 链接:RFC 2979
  6. RFC 3424 - "IAB Considerations for IP Address Sharing"

    • 概述:这篇文档讨论了IP地址共享的挑战与考虑,涵盖了NAT和DNAT的使用,特别是对于大规模网络环境中的地址管理。文档讨论了DNAT在共享地址空间中的角色。
    • 链接:RFC 3424

DNAT的应用场景

  • 端口转发:DNAT用于将外部请求的某些端口(如HTTP的80端口)转发到内网的特定服务器(如Web服务器)。
  • 负载均衡:DNAT用于将流量分配到多个内部服务器,以分散负载。
  • 反向代理:在Web服务器架构中,DNAT可用于将外部请求转发到多个后端应用服务器。

这些标准和RFC文档为网络工程师和系统管理员提供了关于NAT和DNAT的详细技术信息,包括如何实现目标地址转换、如何确保数据包正确重定向到目标主机,以及如何应对大规模网络环境中的地址管理挑战。阅读这些文档可以帮助深入理解DNAT的工作原理、最佳实践以及在各种网络场景中的应用。


目标网络地址转换(Destination Network Address Translation,简称 DNAT) 是一种常见的网络地址转换技术,用于在网络通信中修改数据包的目标地址。它通常用于将外部请求重定向到内部网络中的特定服务器或设备,尤其在防火墙、路由器等设备上实现。DNAT 是网络地址转换(NAT)的一种应用,常用于提供端口转发、负载均衡、以及访问控制等功能。

1. DNAT的基本概念

  • DNAT 是一种改变数据包目标地址的技术,通常用于将外部流量引导到内部网络的特定主机或端口。
  • 它通常用于内网与外网之间的通信,尤其是当内部网络有多个设备需要公开访问时。
  • 在DNAT过程中,路由器或防火墙会根据预设的规则修改数据包的目标地址。通过这种方式,外部请求可以通过公网IP到达内部网络的指定IP地址。

2. DNAT的工作原理

  • 当一个外部主机尝试访问内网服务器时,目标IP地址会被修改(通常是公网IP地址),然后重定向到内部设备或服务器的私有IP地址。
  • 例如,在一个公司网络中,外部请求访问公司公网IP的某个端口时,NAT设备(如防火墙或路由器)会将请求转发到公司内部网络中的特定服务器。

3. DNAT的应用

  • 端口转发:将外部请求转发到内部特定端口上的服务。例如,外部请求公网IP的80端口时,转发到内网的Web服务器。
  • 负载均衡:将外部请求分配到多个内部服务器上,以实现负载均衡。
  • 反向代理:在负载均衡和Web服务中,DNAT可用于反向代理,将外部请求转发到内部的Web应用或数据库。

4. 相关标准和技术文档

4.1 NAT(Network Address Translation)概念与标准

DNAT 是 NAT 的一种具体实现,因此理解 NAT 的标准对于深入了解 DNAT 是很有帮助的。以下是一些与 NAT 和 DNAT 相关的重要 RFC 文档。

  • RFC 3022 - Traditional NAT (Network Address Translation)

    • 本文档定义了传统的 NAT 技术,介绍了如何通过地址转换允许私有IP地址与公网IP地址之间的通信。DNAT 是其中的一个重要应用场景。
    • 链接:RFC 3022
  • RFC 2663 - IP Network Address Translator (NAT) Terminology and Considerations

    • 该文档为 NAT 提供了术语定义和背景信息。它解释了不同类型的 NAT,包括 DNAT、SNAT(源地址转换)和NAT的应用。
    • 链接:RFC 2663

4.2 DNAT的应用与扩展

  • RFC 4787 - Network Address Translation (NAT) Behavioral Requirements for Unicast UDP

    • 该文档描述了 NAT 在处理 UDP 流量时的行为要求,对于理解 DNAT 的一些细节非常有帮助,尤其是在处理传输层协议时。
    • 链接:RFC 4787
  • RFC 5382 - Port Control Protocol (PCP)

    • 这篇文档介绍了端口控制协议(PCP),它为 NAT 设备(包括 DNAT)提供了更好的控制方式,允许用户控制端口映射。
    • 链接:RFC 5382

4.3 防火墙与DNAT的结合

在实际应用中,DNAT 通常与防火墙、路由器结合使用,以实现内外网流量的安全和高效管理。

  • RFC 2979 - Firewall and NAT Traversal for SIP

    • 该文档讨论了如何通过防火墙和 NAT 设备(包括 DNAT)处理会话发起协议(SIP)流量,尤其在 VoIP 和实时通信中,DNAT 处理外部请求并转发到内部网络中。
    • 链接:RFC 2979
  • RFC 3424 - IAB Considerations for IP Address Sharing

    • 本文讨论了 IP 地址共享的考虑事项,涉及到 NAT 和 DNAT 的使用,尤其是在大规模网络环境中的策略和实现方法。
    • 链接:RFC 3424

5. 常见应用场景

  • 家庭路由器:家庭网络中的路由器通常使用 DNAT 将来自外部的请求转发到内网的特定设备上,例如端口转发用于游戏、远程桌面等服务。
  • 企业级负载均衡:大型企业可能使用 DNAT 来将流量分配到多个内部服务器,以保证应用的高可用性和负载均衡。
  • Web服务器:使用 DNAT 将外部请求转发到内网中的 Web 服务器,确保用户可以访问到正确的资源。

DNAT 是 NAT 技术的一个应用,常用于将外部请求重定向到内部网络的特定主机或服务。它是实现端口转发、负载均衡、反向代理等功能的核心技术。相关标准和技术文档(如 RFC 3022 和 RFC 2663)为 DNAT 的实现提供了详细的规范和考虑事项。

这些文档为网络工程师和系统管理员提供了设计和部署基于 DNAT 的解决方案时所需的标准和参考资料。


DNAT 代表 目标网络地址转换(Destination Network Address Translation)。

它是一种用于计算机网络的技术,用于修改正在传输的数据包的目标地址,通常由路由器或防火墙执行。DNAT 通常用于将来自外部网络的流量重定向到特定的内部 IP 地址,特别是在防火墙或路由器后面设置 web 服务器、邮件服务器或 FTP 服务器等服务时。

DNAT 的关键点:

  • 目的:将传入的流量(目标)重定向到私有网络中的内部服务器。
  • 常见用途:通常用于端口转发,其中将公共 IP 地址映射到网络中服务器或设备的私有 IP 地址。
  • 典型应用场景:用户访问公共 IP 上的 web 服务时,可能会被引导到内部服务器,例如具有私有 IP 的 web 服务器。

示例场景:

  • 一家公司有一个 web 服务器,内部 IP 地址是 192.168.1.100,但外部世界通过公共 IP(例如 203.0.113.5)访问该服务器。
  • 防火墙或路由器执行 DNAT,将传入请求的目标地址从 203.0.113.5 转换为 192.168.1.100,从而允许服务器响应请求。

这种技术在负载均衡或提供外部访问内部资源等场景中非常有用。

端口映射通常与目的网络地址转换(DNAT)概念相关联。在网络中,DNAT 是一种技术,用于将传入的数据包的目的 IP 地址和/或端口号修改为内部网络中另一台计算机的 IP 地址和端口号。这样可以实现将外部流量导向内部特定计算机或服务的功能。因此,端口映射通常涉及 DNAT 技术,用于在网络中重定向特定端口的流量。


目标网络地址转换(DNAT,Destination Network Address Translation) 是一种常见的网络地址转换技术,它在网络层上工作,主要用于修改数据包的目标地址,以便将外部请求转发到内部网络中的不同设备。DNAT 通常用于解决内部网络与外部网络之间的通信问题,尤其是在防火墙、路由器或网关中使用,它在公网与私网之间进行地址转换。

DNAT 的底层原理:

  1. 基本概念: DNAT 是 NAT(网络地址转换)的一种形式,它专注于修改数据包的目标地址,即改变进入网络的请求的目标 IP 地址。在 DNAT 中,原始数据包的目标 IP 地址被修改为另一个地址,从而将请求转发到另一个机器。

  2. 工作流程: 当外部网络(通常是互联网)发送请求到内网服务器时,数据包会首先到达边界路由器或防火墙设备。这个设备通过 DNAT 技术将数据包的目标 IP 地址从公网上的 IP 地址修改为私网的 IP 地址,并将请求转发到正确的内网主机。

    例如,假设:

    • 公网 IP 地址 203.0.113.1 被配置为防火墙上的入口。
    • 防火墙会将访问 203.0.113.1:80 的请求转发到内网服务器 192.168.1.10:80 上。
  3. 转换过程:

    • 原始数据包:外部客户端发送请求,目标地址是防火墙的公网 IP(例如 203.0.113.1:80)。
    • NAT 设备(如路由器、防火墙):设备接收到数据包后,查看目标端口并进行匹配,查找相应的转换规则。例如,防火墙可能有一条规则,指示将 203.0.113.1:80 转发到内网服务器 192.168.1.10:80。
    • 目标地址修改:设备修改目标 IP 地址,将其从公网地址 203.0.113.1 改为私网地址 192.168.1.10,并保持端口号不变(如果有端口号映射)。
    • 转发数据包:经过修改后的数据包被转发到目标地址,即 192.168.1.10 上,目标主机接收到该请求并做出响应。
  4. DNAT 与 SNAT 的区别:

    • DNAT(目标网络地址转换):主要用于修改数据包的目标地址,通常用于将外部请求转发到内部网络中的服务器或服务。DNAT 主要解决外部到内部的连接问题。
    • SNAT(源网络地址转换):与 DNAT 相对,SNAT 主要用于修改数据包的源地址,通常用于内部网络设备发出的请求访问外部网络。SNAT 主要解决内部到外部的连接问题。
  5. 常见应用场景:

    • Web 服务器负载均衡:多个内网 Web 服务器可能共享一个公网 IP 地址,外部用户访问某个公网 IP 时,DNAT 可以将请求根据负载均衡算法转发到不同的服务器。
    • 端口转发:某些服务(如 Web 服务、SSH 等)可能位于内部网络中,通过 DNAT 可以将外部的特定端口(如 80 或 443)转发到内部网络中的特定服务器。
    • 远程访问:为外部用户提供对内部网络特定服务的访问,例如通过 DNAT 将外部访问请求转发到内网中的远程桌面服务(RDP)或数据库服务。
  6. 配置示例: 在 Linux 系统上,使用 iptables 配置 DNAT 时,可以使用如下命令:

    bashCopy Code
    iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

    这条命令的意思是:当目标地址是 203.0.113.1 且目标端口是 80 的 TCP 请求到达时,将目标地址转换为 192.168.1.10 且目标端口保持为 80,并将数据包转发到该内部服务器。

DNAT 的优势与挑战:

优势:

  1. 简化网络架构:通过 DNAT,多个内部服务器可以共享同一个公网 IP 地址,减少了公网 IP 的消耗。
  2. 安全性:内部网络的私有 IP 地址对外部用户不可见,增加了网络的安全性。
  3. 高可用性:通过配置负载均衡等规则,DNAT 可以帮助实现高可用性和冗余。

挑战:

  1. 状态跟踪:由于 DNAT 处理的是目标地址,因此设备需要准确地跟踪每个连接的状态,确保请求的正确转发。
  2. 性能:对于高流量环境,NAT 设备可能成为瓶颈,影响整体网络性能。
  3. 端口限制:某些应用程序可能需要使用特定的端口,DNAT 可能需要额外的配置来处理端口映射。

DNAT 是解决内外网通信问题的有效技术,通过修改数据包的目标地址,将外部流量安全、准确地转发到内部网络中的目标主机上。


netsh interface portproxy 完整拆解解构

一、基础定位

netsh interface portproxy = Windows 自带 TCP 端口代理(Port Forwarding)
 
命令载体:netsh.exe,功能模块归属 Windows TCP/IP 堆栈,俗称 Windows 端口转发。
 
命令全集:
plaintext
netsh interface portproxy add|delete|show v4tov4
netsh interface portproxy add v4tov6
netsh interface portproxy add v6tov4
netsh interface portproxy add v6tov6
最常用:v4tov4 IPv4→IPv4 TCP 转发。
核心认知,极易混淆三件事
  1. portproxy:应用层 / 传输层代理,纯粹 TCP 流量转发,属于代理(Proxy),≠ NAT
  2. Windows RRAS ipnat.sys:真正内核 NAT(SNAT/DNAT)
  3. iptables DNAT/SNAT:内核 Netfilter NAT

portproxy 与 DNAT 本质区别

  • DNAT:内核态 IP 层修改报文目的 IP,流量不需要网关主动新建连接,报文原地改写
  • portproxy:用户态代理,系统主动充当客户端 + 服务端,建立两组 TCP 连接
     
    客户端 ↔ Windows 主机【两组独立 TCP】 ↔ 后端目标服务器
portproxy 不修改 IP 报文头部,不依赖 Windows NAT 驱动 ipnat.sys,独立机制。
适用场景:
 
本地端口转发、跳板端口中继、内网端口暴露、简单端口映射;不能替代防火墙 DNAT。

二、底层原理

1. 工作模型(双 TCP 套接字模型)

当一条规则:
 
listenaddress=0.0.0.0 listenport=8080 connectaddress=192.168.1.100 connectport=80
  1. 外部客户端发起 TCP 连接至本机:8080;
  2. Windows TCP 栈接受连接,创建侦听套接字(Socket A);
  3. portproxy 模块主动新建第二条出站 TCP 连接 Socket B,连向 192.168.1.100:80;
  4. 在两个 socket 之间双向拷贝 TCP 数据流;
  5. 任意一端断开,同时关闭两条连接。
关键特征:
 
后端服务器看到的 TCP 源 IP是 Windows 代理主机 IP,不是原始客户端 IP!
 
这是和 DNAT 最大差异:源地址被替换,无法透传真实客户端 IP。

2. 模块归属

portproxy 由 iphlpapi.dll 提供接口,内嵌在 netsh.exe 调用链路;
 
底层依托 Windows TCP Winsock 2 套接字组件,无独立守护进程。
 
规则持久化存储在注册表,系统重启自动加载。

3. 完整数据流时序

plaintext
客户端 → [TCP] → Windows主机:8080
        ↓ portproxy接管
Windows主机主动发起TCP → 后端192.168.1.100:80
双向流量在内核套接字缓冲区之间复制转发
应答原路返回客户端

4. 重要约束

  1. 仅支持 TCP,不支持 UDP(硬限制,无法转发 UDP 流量)
  2. 无法透传原始客户端 IP(后端只能看见代理主机地址)
  3. 侦听端口必须本机未被占用
  4. Windows 防火墙必须放行监听端口入站规则
  5. 不支持 ICMP、不支持 IP 层转发,纯 TCP 会话中继

三、依赖文件与注册表

直接依赖二进制文件

  1. netsh.exe:命令行前端外壳
  2. iphlpapi.dll:IP 助手 API,portproxy 配置管理接口
  3. ws2_32.dll(Winsock2):TCP 套接字通信底层,转发数据流核心
  4. advapi32.dll:注册表读写,持久化转发规则

规则持久化注册表路径(核心)

plaintext
HKLM\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters
子键 v4tov4、v4tov6 存放所有转发条目;
 
删除注册表键等价于清除所有 portproxy 规则。

系统服务依赖

不需要开启额外服务,portproxy 无独立 Windows 服务;
 
依靠系统 TCP/IP 协议栈动态运行。
对比:RRAS NAT 需要 RemoteAccess 服务;portproxy 不需要。

外部依赖

  1. Windows 防火墙:必须放行监听端口入站流量
  2. 路由:代理主机必须可达后端目标地址
  3. TCP/IP 驱动 tcpip.sys(系统基础网络驱动)

四、完整逻辑链路

链路 1:配置下发链路

plaintext
cmd执行netsh interface portproxy add v4tov4
        ↓
netsh.exe 调用 iphlpapi.dll 端口代理API
        ↓
写入注册表PortProxy配置项
        ↓
TCP/IP协议栈动态加载侦听规则,开启对应端口监听

链路 2:流量转发运行链路

plaintext
客户端TCP握手至本机监听端口 → tcpip.sys接收连接
        ↓
协议栈识别端口属于portproxy规则
        ↓
ws2_32 创建第二条出站Socket连接后端服务器
        ↓
套接字之间双向数据拷贝
        ↓
连接断开 → 自动回收两组Socket资源

五、与前文技术栈配套联动链

  1. DNAT / SNAT
     
    portproxy ≠ NAT;边界网关正式发布业务优先使用防火墙 DNAT。
     
    仅 Windows 跳板机、临时调试场景使用 portproxy。
  2. URL、Web 服务
     
    临时转发 HTTP/HTTPS 端口;HTTPS 场景 portproxy 仅转发原始 TCP 流,不做 TLS 卸载。
  3. wbemtest、WMI 远程管理
     
    可临时转发 135/WMI 端口用于调试,但安全性差,不推荐生产长期使用。
  4. MDT 部署、ZTIGather.wsf
     
    装机环境临时端口中继,转发 TFTP/HTTP 部署端口;注意:TFTP 基于 UDP,portproxy 无法转发。
  5. .lnk 快捷方式
     
    可制作快捷方式封装 netsh portproxy 脚本,一键加载 / 清理转发规则。
  6. WMI(CIM)
     
    可通过 WMI 远程调用执行 netsh 命令批量下发端口代理规则,内网运维脚本常用手段。

六、典型故障断链场景

  1. 防火墙未放行监听端口
     
    外部无法连接,本机127.0.0.1访问正常。
  2. 后端地址不可达 / 路由不通
     
    portproxy 建立第二条 TCP 连接失败,连接直接重置。
  3. 端口冲突
     
    本机已有程序占用 listenport,规则加载成功但无法接收连接。
  4. 忘记指定 listenaddress=0.0.0.0
     
    默认仅监听 127.0.0.1,仅本机可访问,外部主机连不上。
  5. 误以为支持 UDP
     
    尝试转发 DNS 等 UDP 业务,完全失效。
  6. 期望后端获取真实客户端 IP
     
    portproxy 架构天生无法透传源 IP;该场景必须改用 DNAT。
  7. 系统重启规则丢失
     
    极少情况注册表权限异常,无法写入;通常重启自动加载。

安全风险提示

攻击者常用 netsh portproxy 做端口跳板、内网横向流量中继;
 
建议监控异常新增 portproxy 注册表条目。

七、配套运维工具、常用模板

常用命令集

cmd
:: 添加IPv4端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=192.168.1.100 connectport=80

:: 查看全部规则
netsh interface portproxy show all

:: 删除单条规则
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080

:: 清空所有规则
netsh interface portproxy reset

运维基线建议

  1. 临时调试使用,禁止长期作为生产业务端口映射方案;正式业务使用防火墙 DNAT;
  2. 使用后及时执行reset清理规则,防止遗留跳板;
  3. 组策略监控注册表路径:HKLM\SYSTEM\CurrentControlSet\Services\PortProxy 异常变更;
  4. 明确局限性:不支持 UDP、不能透传源 IP。

八、极简总结

  1. netsh interface portproxy 是 Windows 用户态 TCP 端口代理,依靠双 Socket 建立两段独立 TCP 连接,不是内核 DNAT;
  2. 底层依赖ws2_32.dll Winsock TCP 栈,规则持久化保存在注册表,无独立服务;
  3. 硬限制:仅 TCP、无法透传客户端真实源 IP、不支持 UDP;
  4. 适用场景:临时跳板、调试转发;生产公网发布业务优先防火墙 DNAT;
  5. 故障排查顺序:防火墙策略 → 端口占用 → 路由连通性 → 是否误用于 UDP 业务。

netsh interface portproxy 是一个用于配置 Windows 系统端口代理的命令行工具。 PowerShell 提供了等效的命令来管理端口代理。以下是 netsh interface portproxy 命令和对应的 PowerShell 命令的等效表格:

netsh interface portproxy 命令 PowerShell 等效命令
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100 New-NetIPAddress -IPAddress 0.0.0.0 -Port 8080 -ProxyAddress 192.168.1.100 -ProxyPort 80
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0 Remove-NetIPAddress -IPAddress 0.0.0.0 -Port 8080
netsh interface portproxy show all `Get-NetIPAddress
netsh interface portproxy reset Remove-NetIPAddress
netsh interface portproxy add v6tov4 listenport=8080 listenaddress=:: connectport=80 connectaddress=192.168.1.100 New-NetIPAddress -IPAddress :: -Port 8080 -ProxyAddress 192.168.1.100 -ProxyPort 80 -AddressFamily IPv6
netsh interface portproxy add v4tov6 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=:: New-NetIPAddress -IPAddress 0.0.0.0 -Port 8080 -ProxyAddress :: -ProxyPort 80 -AddressFamily IPv6
netsh interface portproxy show v4tov4 Get-NetIPAddress -AddressFamily IPv4
netsh interface portproxy show v6tov4 Get-NetIPAddress -AddressFamily IPv6
netsh interface portproxy show v4tov6 Get-NetIPAddress -AddressFamily IPv6
netsh interface portproxy delete v6tov4 listenport=8080 listenaddress=:: Remove-NetIPAddress -IPAddress :: -Port 8080 -AddressFamily IPv6

简要说明:

  • 添加端口代理:通过 New-NetIPAddress cmdlet 来设置端口代理,使用 -ProxyAddress 和 -ProxyPort 来指定代理目标地址和端口。可以使用 -AddressFamily 来指定 IPv4 或 IPv6。
  • 删除端口代理:使用 Remove-NetIPAddress 来删除指定的端口代理。
  • 查看端口代理:使用 Get-NetIPAddress 来列出所有网络接口的 IP 地址,结合 Where-Object 进行过滤,查找特定的端口代理。
  • 重置端口代理:使用 Remove-NetIPAddress 来移除所有配置的端口代理。

PowerShell 中没有与 netsh interface portproxy 完全等价的单一命令,因此需要结合多条命令和过滤器来实现端口代理的管理。


在Windows操作系统上进行端口映射通常需要使用网络地址转换(NAT)规则或端口转发来实现。下面是使用netsh命令进行端口映射的示例:

使用 netsh 命令进行端口映射

  1. 添加端口映射规则:
powershellCopy Code
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
  • listenaddress: 本地地址,通常为 0.0.0.0(所有接口)
  • listenport: 本地端口,你想要映射的端口
  • connectaddress: 目标地址,映射到的目标服务器地址
  • connectport: 目标端口,映射到的目标服务器端口
  1. 查看已添加的端口映射规则:
powershellCopy Code
netsh interface portproxy show all
  1. 删除特定端口映射规则:
powershellCopy Code
netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport

注意:在运行这些命令之前,请确保以管理员权限打开PowerShell或命令提示符。

示例

假设你想将本地端口80映射到远程服务器的端口8080,示例如下:

powershellCopy Code
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=destaddress connectport=8080

这样就会将本地计算机上的所有流量发送到本地端口80,并将其转发到远程服务器的端口8080上。

通过使用netsh命令,你可以在Windows上设置简单的端口映射规则。


通过 PowerShell 的其他相关命令和参数来进一步对 New-NetNat 进行配置和管理。以下是一些 New-NetNat 的参数功能分类表:

功能类别 参数/选项 功能描述
创建 NAT 实例 -Name 设置 NAT 实例的名称。
配置内外部网络 -InternalIPInterfaceAddressPrefix 设置 NAT 规则适用的内部网络 IP 地址范围。例如:192.168.1.0/24。
  -ExternalIPAddress 设置 NAT 规则适用的外部 IP 地址。通常是公共 IP 地址。
NAT 类型设置 -NATType 配置 NAT 类型,支持的选项包括 Static(静态 NAT)和 Dynamic(动态 NAT)。
启用或禁用 NAT -Enabled 启用或禁用 NAT 实例。值为 True 或 False。
配置网络接口 -InternalInterface 指定内部网络接口。如果你有多个网络接口,使用此参数来选择一个接口。
  -ExternalInterface 指定外部网络接口,用于与互联网或其他网络连接。
设置端口转发 -StaticMapping 创建静态映射,用于指定通过外部 IP 地址进行端口转发。
指定网络类型 -IPv4Address 为 IPv4 配置 IP 地址范围。
  -IPv6Address 为 IPv6 配置 IP 地址范围。
验证和调试功能 -PassThru 返回命令的结果,可以用于后续验证或调试。
描述和备注 -Description 为 NAT 实例添加描述,以便管理员识别。
高级配置 -InboundConnections 配置允许或拒绝入站连接。此参数可控制入站流量的处理方式。

示例:

  1. 创建一个新的 NAT 实例并启用:

    powershellCopy Code
    New-NetNat -Name "MyNat" -InternalIPInterfaceAddressPrefix "192.168.1.0/24" -ExternalIPAddress "203.0.113.5" -Enabled $true
  2. 创建静态端口转发规则:

    powershellCopy Code
    New-NetNat -Name "MyNat" -InternalIPInterfaceAddressPrefix "192.168.1.0/24" -ExternalIPAddress "203.0.113.5" -StaticMapping "80:80,443:443"

通过这些参数,您可以灵活地配置和管理网络的地址转换策略,从而优化和控制流量的路由。


Add-NetNatStaticMapping 是 PowerShell 中用于在现有的 NAT 实例中添加静态端口映射的命令。它并没有子命令,但可以通过各种参数来配置静态端口映射规则。下面是 Add-NetNatStaticMapping 命令的常用参数和功能分类表:

功能类别 参数/选项 功能描述
基础配置 -NatName 指定已有的 NAT 实例名称。
  -InternalIPAddress 内部网络的 IP 地址。此地址将用于端口映射的目标。
  -InternalPort 内部网络上目标主机的端口。
外部网络配置 -ExternalIPAddress 外部网络的 IP 地址。该地址是映射的公共地址。
  -ExternalPort 外部端口,通过此端口访问内部端口。
协议配置 -Protocol 指定协议类型。支持的选项有 TCP 和 UDP。
映射类型配置 -TranslationType 映射类型,支持 Dynamic(动态映射)或 Static(静态映射)。
网络接口配置 -InterfaceIndex 指定网络接口的索引。可用于指定使用的网络接口。
描述信息 -Description 给静态端口映射添加描述信息。
启用或禁用映射 -Enabled 控制该静态映射是否启用。$true 表示启用,$false 表示禁用。
备用配置 -PassThru 返回命令的输出对象,以便进行进一步的操作或验证。

示例:

  1. 在现有的 NAT 实例中添加静态映射:

    powershellCopy Code
    Add-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 8080 -ExternalIPAddress "203.0.113.5" -ExternalPort 8080 -Protocol TCP -Description "Web Server"
  2. 添加多个静态映射并启用:

    powershellCopy Code
    Add-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 8080 -ExternalIPAddress "203.0.113.5" -ExternalPort 8080 -Protocol TCP -Enabled $true
    Add-NetNatStaticMapping -NatName "MyNat" -InternalIPAddress "192.168.1.10" -InternalPort 443 -ExternalIPAddress "203.0.113.5" -ExternalPort 443 -Protocol TCP -Enabled $true

通过这些参数,Add-NetNatStaticMapping 使你能够将外部端口请求路由到内部网络的特定 IP 地址和端口上。这对于配置网络中的端口转发和静态路由非常有用。


Get-NetNatStaticMapping 是 PowerShell 中用于获取当前 NAT 实例中已配置的静态端口映射规则的命令。它没有子命令,但是可以通过多种参数来过滤、选择和查看 NAT 静态映射的详细信息。下面是 Get-NetNatStaticMapping 命令的常用参数及功能的分类表:

功能类别 参数/选项 功能描述
基础配置 -NatName 指定 NAT 实例的名称,筛选特定 NAT 实例下的静态映射。
过滤配置 -InternalIPAddress 过滤并仅显示匹配指定内部 IP 地址的静态映射。
  -InternalPort 过滤并仅显示匹配指定内部端口号的静态映射。
外部网络配置 -ExternalIPAddress 过滤并仅显示匹配指定外部 IP 地址的静态映射。
  -ExternalPort 过滤并仅显示匹配指定外部端口号的静态映射。
协议配置 -Protocol 过滤并仅显示匹配指定协议(如 TCP 或 UDP)的静态映射。
状态配置 -Enabled 过滤并显示启用($true)或禁用($false)的静态映射。
详细输出配置 -PassThru 返回命令的输出对象,以便进一步操作或验证。
接口配置 -InterfaceIndex 过滤并显示在指定网络接口上的静态映射。
描述信息 -Description 过滤并仅显示包含指定描述的静态映射。

示例:

  1. 获取所有静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping
  2. 获取特定 NAT 实例下的所有静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -NatName "MyNat"
  3. 获取特定内部 IP 和端口的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -InternalIPAddress "192.168.1.10" -InternalPort 8080
  4. 获取所有启用的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -Enabled $true
  5. 获取特定外部 IP 的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -ExternalIPAddress "203.0.113.5"
  6. 获取所有协议为 TCP 的静态映射:

    powershellCopy Code
    Get-NetNatStaticMapping -Protocol TCP

通过这些参数,Get-NetNatStaticMapping 可以帮助你过滤和查看当前网络上 NAT 实例中的端口映射配置,便于管理和调试。


在PowerShell中进行端口映射可以使用New-NetNat和Add-NetNatStaticMapping命令来实现。以下是在PowerShell中进行端口映射的示例:

使用 New-NetNat 和 Add-NetNatStaticMapping 命令进行端口映射

  1. 创建一个新的网络地址转换(NAT):
powershellCopy Code
New-NetNat -Name "MyNAT" -InternalIPInterfaceAddressPrefix "192.168.0.0/24"

这将创建一个名为"MyNAT"的新NAT,并指定内部IP接口的地址前缀。

  1. 添加静态映射规则:
powershellCopy Code
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0" -ExternalPort 8080 -InternalIPAddress "192.168.0.10" -InternalPort 80 -Protocol TCP
  • ExternalIPAddress: 外部IP地址,通常为0.0.0.0(所有外部地址)
  • ExternalPort: 外部端口,映射到的外部端口
  • InternalIPAddress: 内部IP地址,映射到的目标服务器地址
  • InternalPort: 内部端口,映射到的目标服务器端口
  • Protocol: 协议类型,如TCP或UDP

示例

假设你想将外部端口8080映射到内部服务器的端口80,示例如下:

powershellCopy Code
New-NetNat -Name "MyNAT" -InternalIPInterfaceAddressPrefix "192.168.0.0/24"
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0" -ExternalPort 8080 -InternalIPAddress "192.168.0.10" -InternalPort 80 -Protocol TCP

这将创建一个名为"MyNAT"的NAT,并将外部端口8080映射到内部服务器的端口80上。

通过使用New-NetNat和Add-NetNatStaticMapping命令,你可以在PowerShell中设置端口映射规则。

在PowerShell中查看端口映射规则可以使用Get-NetNatStaticMapping命令。这个命令可以列出当前配置的所有静态映射规则。以下是如何在PowerShell中查看端口映射规则的示例:

使用 Get-NetNatStaticMapping 命令查看端口映射规则

  1. 查看所有端口映射规则:
powershellCopy Code
Get-NetNatStaticMapping

此命令将列出所有当前配置的端口映射规则,包括外部IP地址、外部端口、内部IP地址、内部端口和协议等信息。

  1. 查看特定端口映射规则:

如果你只想查看特定的端口映射规则,可以使用筛选参数来限制结果。例如,查看外部端口为8080的映射规则:

powershellCopy Code
Get-NetNatStaticMapping | Where-Object {$_.ExternalPort -eq 8080}

这将显示外部端口为8080的端口映射规则的详细信息。

通过使用Get-NetNatStaticMapping命令,你可以轻松查看当前配置的端口映射规则,以便进行监控和管理。根据需要,你还可以结合其他命令和过滤条件,对端口映射规则进行进一步的筛选和操作。


在 PowerShell 中,NetNat 不能直接将端口转发到本机或物理局域网设备。如果你希望实现通过 PowerShell 脚本进行端口转发,可以结合使用 NetNat 和 New-NetIPAddress 配置。下面是一个可能的 PowerShell 解决方案,它包括如何通过虚拟网络地址进行端口转发:

PowerShell 脚本解决方案:端口转发到物理局域网设备

假设你需要将流量从本机某个端口(例如 8080)转发到本地物理网卡上的设备(例如 192.168.1.100:80),你可以按照以下步骤操作:

步骤 1:创建 NAT(Network Address Translation)规则

首先,确保你已经创建了 NAT 规则,允许从本机到虚拟网络的流量转发:

powershell
# 创建一个虚拟 NAT 网络接口 (例如 vEthernet)
New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (Default Switch)"

# 创建 NAT 网络规则
New-NetNat -Name "MyNat" -InternalIPInterfaceAddressPrefix "192.168.100.0/24" -ExternalIPAddress "0.0.0.0"

步骤 2:配置端口转发规则

接下来,你需要设置端口转发规则,将流量从本机某个端口(如 8080)转发到物理局域网设备上的目标 IP(例如 192.168.1.100:80):

powershell
# 设置端口转发规则
New-NetIPAddress -IPAddress "192.168.100.2" -PrefixLength 24 -InterfaceAlias "vEthernet (Default Switch)"

# 配置转发规则
Add-NetNatStaticMapping -NatName "MyNat" -Protocol TCP -ExternalIPAddress "0.0.0.0" -ExternalPort 8080 -InternalIPAddress "192.168.1.100" -InternalPort 80

步骤 3:测试并验证

你可以通过以下 PowerShell 命令验证 NAT 和端口转发规则是否已经配置成功:

powershell
# 查看 NAT 配置
Get-NetNat

# 查看 NAT 转发的静态规则
Get-NetNatStaticMapping

说明:

  1. New-NetIPAddress:此命令创建并配置虚拟网络接口的 IP 地址,确保端口转发规则能够生效。
  2. New-NetNat:此命令创建一个 NAT 网络,允许你设置规则进行 IP 地址和端口映射。
  3. Add-NetNatStaticMapping:此命令添加一个静态映射规则,将外部端口的流量转发到指定的内部设备和端口。
  4. Get-NetNat 和 Get-NetNatStaticMapping:这些命令用于验证和查看当前的 NAT 配置。

注意:

  1. 虚拟网卡:如果你使用的是 WSL、虚拟机或其他虚拟化技术,确保相关的虚拟网卡和接口正确配置。
  2. 网络适配器:确保目标物理局域网设备的 IP 地址正确无误,并且防火墙设置允许来自你配置的端口的流量。

这个方案使用 PowerShell 配置了一个端口转发规则,可以通过虚拟网络接口将流量转发到物理网络上的目标设备,解决了 NetNat 只能转发到虚拟设备的问题。


 

posted @ 2024-03-05 15:34  suv789  阅读(1983)  评论(2)    收藏  举报