Windows 全平台端口映射实现方案(按使用场景、原生 / 第三方分类,含底层原理、命令、优缺点)端口映射核心作用:将本机 A 端口流量转发到目标 IP:B 端口,支持本地转发、内网穿透、跨网段访问,分为系统原生自带工具、第三方专用转发工具、虚拟化 / 路由转发三大类。
Windows 全平台端口映射实现方案完整汇总
一、系统原生内置方案(零安装,优先内网静态端口转发)
1. netsh interface portproxy 内核 TCP 端口代理(全 Windows 通用)
底层原理
核心命令
# 添加转发:本机监听0.0.0.0:监听端口 → 目标IP:目标端口
netsh interface portproxy add v4tov4 listenport=监听端口 listenaddress=0.0.0.0 connectport=目标端口 connectaddress=目标IP
# 查看全部规则
netsh interface portproxy show all
# 删除单条规则
netsh interface portproxy delete v4tov4 listenport=监听端口 listenaddress=0.0.0.0
# 清空所有转发
netsh interface portproxy reset
配套要求
优缺点
2. PowerShell New-NetNat NAT 静态端口转发(Win10 1709+/Server2016+)
底层原理
# 创建NAT网段
New-NetNat -Name NatGateway -InternalIPInterfaceAddressPrefix "192.168.100.0/24"
# 添加静态端口映射
Add-NetNatStaticMapping -NatName NatGateway -ExternalPort 外部端口 -InternalIPAddress 内网IP -InternalPort 内网端口 -Protocol TCP
3. Windows OpenSSH SSH 端口转发(Win10 1809/Server2019 + 预装)
- 本地端口映射(本地端口→远端内网服务)
ssh -L 本地端口:目标IP:目标端口 用户名@中转公网IP
- 远程端口穿透(公网服务器端口映射回本地内网)
ssh -R 公网端口:127.0.0.1:本地端口 用户名@公网中转机
4. IIS ARR 应用请求路由(仅 Windows Server,七层 HTTP 反向代理)
5. ICS 互联网连接共享(网关整机流量转发)
二、第三方通用四层端口转发工具(支持 UDP+TCP,弥补原生短板)
1. Socat(绿色单文件,万能转发)
socat UDP-LISTEN:53,fork,reuseaddr UDP:192.168.1.10:53
2. Simple Port Forwarder / PortForward GUI
3. HAProxy Windows 编译版
三、七层 Web 反向代理(仅 HTTP/HTTPS 业务专用)
1. Nginx for Windows
2. Caddy Windows
四、隧道 & VPN 类穿透方案(跨公网内网端口映射)
1. WireGuard + Wintun 虚拟网卡
2. Xray/V2R/***
3. FRP(Fast Reverse Proxy)
五、WSL2 / Hyper-V 虚拟机专属端口映射方案
- netsh portproxy 静态映射宿主机端口至 WSL2 虚拟 IP;
- WSL 内置 socat 实现虚拟机内部转发;
- New-NetNat 为 Hyper-V 虚拟网卡批量 NAT 端口转发。
六、各方案核心能力横向对比表
| 方案 | TCP | UDP | 图形界面 | 公网穿透 | 性能 | 持久后台 | 适用场景 |
|---|---|---|---|---|---|---|---|
| netsh portproxy | ✅ | ❌ | ❌ | ❌ | 极高 | ✅ | 内网静态 TCP 转发、服务器 |
| PowerShell NetNat | ✅ | ❌ | ❌ | ❌ | 高 | ✅ | Hyper-V 虚拟机子网 |
| OpenSSH 转发 | ✅ | ❌ | ❌ | ✅ | 高 | ❌(需保活) | 加密跨网临时映射 |
| Socat | ✅ | ✅ | ❌ | ✅ | 中高 | ✅(后台运行) | UDP/DNS/ 游戏转发 |
| HAProxy | ✅ | 部分 | ❌ | ❌ | 高 | ✅ | 四层集群负载均衡 |
| Nginx/Caddy | HTTP only | ❌ | ❌ | ❌ | 高 | ✅ | Web 网站反向代理 |
| WireGuard | ✅ | ✅ | 可选 | ✅ | 高 | ✅ | 异地局域网互通 |
| FRP | ✅ | ✅ | 可选 | ✅ | 中 | ✅ | 家用内网公网穿透 |
| GUI PortForward | ✅ | 部分 | ✅ | ❌ | 中 | ✅ | 新手可视化运维 |
| IIS ARR | HTTP only | ❌ | ✅ | ❌ | 高 | ✅ | Windows Server 网站代理 |
七、选型速记运维规范
- 内网服务器 TCP 固定转发:首选 netsh interface portproxy,性能最优、无额外进程;
- 需要 UDP 转发(DNS、游戏、视频):Socat 常驻后台;
- Web 网站域名分流、SSL 代理:Nginx / IIS ARR;
- 异地公网穿透内网端口:FRP、WireGuard;
- 虚拟机 Hyper-V 批量转发:New-NetNat;
- 临时加密跨网端口访问:SSH -L 本地转发;
- 多后端 TCP 负载均衡:HAProxy。
八、通用注意事项
- 所有监听端口必须放行 Windows 防火墙入站规则,否则外部无法访问;
- netsh 规则永久保存,系统重启不丢失;socat/FRP 等第三方工具需配置开机自启;
- 公网端口映射需要路由器做端口转发 / DMZ 主机,同时做好 IP 白名单防护;
- 原生 netsh 无访问控制,公网暴露端口建议搭配第三方工具做来源 IP 限制;
- 生产环境优先内核级 netsh,UDP 业务使用 socat 后台守护运行。
Windows 全平台端口映射实现方案(按使用场景、原生 / 第三方分类,含底层原理、命令、优缺点)
一、Windows 原生自带方案(无需额外安装软件,所有 Windows 通用)
方案 1:netsh interface portproxy(IPHTTPS/IPv4 端口代理,最常用)
底层原理
PortProxy 组件,工作在内核层 TCP 转发,不占用额外进程,支持 IPv4↔IPv4、IPv4↔IPv6、本地环路转发。
核心命令
- 添加本地端口转发(本机 8080 → 192.168.1.100:80)
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100
- 查看所有映射规则
netsh interface portproxy show all
- 删除单条规则
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0
- 清空全部转发规则
netsh interface portproxy reset
配套防火墙要点
优缺点
方案 2:PowerShell New-NetNat(Win10 1709+/WinServer2016+ NAT 转发)
底层原理
示例:创建 NAT 网络并端口转发
# 创建NAT虚拟网络
New-NetNat -Name LocalNAT -InternalIPInterfaceAddressPrefix "192.168.137.0/24"
# 端口转发:本机3389 → 内网192.168.137.10:3389
Add-NetNatStaticMapping -NatName LocalNAT -ExternalPort 3389 -InternalIPAddress 192.168.137.10 -InternalPort 3389 -Protocol TCP
优缺点
方案 3:WSL2 内置端口转发(适用于 WSL Linux 环境)
# 宿主机443转发到WSL2 IP 443
netsh interface portproxy add v4tov4 listenport=443 connectport=443 connectaddress=$(wsl -d Ubuntu -- hostname -I)
方案 4:SSH 端口转发(Windows 自带 OpenSSH 客户端,Win10 1809 起预装)
- 本地端口映射(本机 9000 → 远端服务器 127.0.0.1:80)
ssh -L 9000:127.0.0.1:80 root@远程服务器IP
- 远程端口映射(远程机器开放端口映射回本地服务)
ssh -R 8080:127.0.0.1:3306 root@公网服务器
方案 5:IIS Application Request Routing (ARR)(服务器专用 HTTP 反向代理)
二、第三方轻量端口映射工具(弥补原生短板,支持 UDP/TCP)
1. Socat(跨平台万能转发工具)
socat UDP-LISTEN:53,fork UDP:192.168.1.5:53
2. PortForward / Simple Port Forwarder 图形化工具
3. Nginx for Windows(七层反向代理)
4. Xray / V2 / ***(带端口转发功能)
5. Haproxy Windows 编译版
三、全局透明转发 / 网关级方案(整机流量转发)
1. Windows 路由 + ICS 互联网连接共享
2. Wintun + WireGuard(VPN 层端口转发)
四、按场景选型对比
| 方案 | 支持 TCP | 支持 UDP | 图形界面 | 公网穿透 | 性能 | 适用场景 |
|---|---|---|---|---|---|---|
| netsh portproxy | ✅ | ❌ | ❌ | ❌ | 极高 | 内网静态 TCP 端口转发 |
| Windows OpenSSH | ✅ | ❌ | ❌ | ✅ | 高 | 加密跨网端口映射 |
| PowerShell NetNat | ✅ | ❌ | ❌ | ❌ | 高 | Hyper-V 虚拟机 NAT |
| Socat | ✅✅ | ✅✅ | ❌ | ✅ | 中高 | 需要 UDP、复杂转发 |
| Nginx | 仅 HTTP | ❌ | ❌ | ❌ | 高 | Web 反向代理 |
| 图形 PortForward | ✅ | 部分支持 | ✅ | ❌ | 中 | 新手运维快速配置 |
五、补充关键注意事项
- netsh portproxy 规则重启后保留,无需重复配置;
- 所有监听端口必须在 Windows 防火墙添加入站允许规则,否则外部设备无法连接;
- 原生 netsh 不支持 UDP,DNS、游戏 UDP 转发只能选用 socat、*** 等第三方工具;
- 公网端口映射需要路由器做 DMZ / 端口转发,同时本机防火墙放行;
- 生产服务器优先使用 netsh(内核转发性能最优),UDP 业务搭配 socat 后台常驻运行。
在 Windows 系统上实现端口映射可以采用多种方式,以下是其中两种常用的方法:
使用路由器进行端口映射:将路由器连接到 Internet 上,并将要公网访问的服务所在的计算机连接到路由器上,然后在路由器的设置页面中进行端口映射的配置,将来自公网的访问请求转发到指定的内部 IP 地址和端口号。具体操作步骤视路由器型号和品牌而有所不同,请参考相应的说明文档或在线帮助。
使用端口映射工具进行配置:在 Windows 上可以使用诸如 PortMapper、Simple Port Forwarding 等端口映射工具,通过简单的界面操作来完成端口映射的配置。这些工具通常支持 TCP/UDP 协议、多种映射方式和多个端口转发,同时提供了日志记录和高级设置等功能,便于用户进行检查和优化。
Windows 下实现端口映射
1. 查询端口映射情况
PS C:\Users\Administrator> netsh interface portproxy show
下列指令有效:
此上下文中的命令:
show all - 显示所有端口代理参数。
show v4tov4 - 显示 IPv4 代理连接到另一个 IPv4 端口的参数。
show v4tov6 - 显示 IPv4 代理连接到 IPv6 的参数。
show v6tov4 - 显示 IPv6 代理连接到 IPv4 的参数。
show v6tov6 - 显示 IPv6 代理连接到另一个 IPv6 端口的参数。
PS C:\Users\Administrator> netsh interface portproxy show all
当你运行 netsh interface portproxy show all 并没有返回任何输出时,表示 没有配置端口代理(端口转发) 或当前没有任何活动的端口映射。
在 Windows 系统中,端口代理 是由 netsh 命令设置的,它允许将某个本地端口转发到其他主机或端口。如果你没有手动配置过端口代理,或者没有其他软件配置了它,那么运行该命令时就不会显示任何内容。
如果你希望 设置端口转发 或查看其他类型的 端口映射(例如在路由器上进行的映射),你可能需要手动配置它,或者直接登录到你的路由器管理界面,查看和管理 UPnP 端口映射。
你可以尝试以下操作:
-
配置端口代理(如果你需要) 例如,你可以通过
netsh配置本地端口映射,将端口 8080 转发到 192.168.1.10:80:cmdnetsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.10 -
查看路由器的 UPnP 设置: 登录到你的路由器管理界面(通常是通过浏览器访问
http://192.168.1.1或http://192.168.0.1),查看端口映射或 UPnP 配置。
netsh interface portproxy show v4tov4
在 PowerShell 中,netsh interface portproxy show all 的等效命令是:
Get-NetIPAddress
或者,如果你特别关注端口代理配置,可以使用:
Get-NetNat
Get-NetIPAddress 显示的是所有网络接口的 IP 地址,而 Get-NetNat 则列出网络地址转换(NAT)相关的配置信息。
如果你想查看端口转发配置,PowerShell 的 Get-NetFirewallRule 或 Get-NetTCPConnection 也可以提供相关的信息,尤其是在检查网络流量和端口映射时。
2. 查询某一个 IP 的所有端口映射情况
netsh interface portproxy show v4tov4 | find "[IP]"
例:
netsh interface portproxy show v4tov4 | find "192.168.1.1"
3. 增加一个端口映射
netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口]
例:
netsh interface portproxy add v4tov4 listenaddress=2.2.2.2 listenport=8080 connectaddress=192.168.1.50 connectport=80
4. 删除一个端口映射
netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]
例:
netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080
在 Windows Server 2022 中,您可以使用以下命令行工具和批处理脚本来进行端口映射的查询、创建和删除操作:
查询端口映射:
netsh interface portproxy show all
该命令将显示当前计算机上所有的端口映射规则。
创建端口映射:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
其中,将 listenaddress 和 listenport 替换为本地地址和端口号,将 connectaddress 和 connectport 替换为目标地址和端口号。例如,要将本地计算机的 80 端口映射到远程计算机的 8080 端口,可以运行以下命令:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.100 listenport=80 connectaddress=192.168.2.100 connectport=8080
删除端口映射:
netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport
其中,将 listenaddress 和 listenport 替换为要删除的规则的本地地址和端口号。例如,要删除前面创建的映射规则,可以运行以下命令:
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.100 listenport=80
以上命令可以直接在命令提示符窗口中执行。如果您想将多个命令组合成批处理脚本,则可以创建一个文本文件,将各个命令逐行添加进去,并保存为 .bat 扩展名的文件。然后,只需双击该文件即可运行其中的所有命令。
在 Windows 11 中,您可以使用以下命令行工具和批处理脚本来进行端口映射的查询、创建和删除操作:
查询端口映射:
netsh interface portproxy show all
该命令将显示当前计算机上所有的端口映射规则。
创建端口映射:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
其中,将 listenaddress 和 listenport 替换为本地地址和端口号,将 connectaddress 和 connectport 替换为目标地址和端口号。例如,要将本地计算机的 80 端口映射到远程计算机的 8080 端口,可以运行以下命令:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.100 listenport=80 connectaddress=192.168.2.100 connectport=8080
删除端口映射:
netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport
其中,将 listenaddress 和 listenport 替换为要删除的规则的本地地址和端口号。例如,要删除前面创建的映射规则,可以运行以下命令:
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.100 listenport=80
以上命令可以直接在命令提示符窗口中执行。如果您想将多个命令组合成批处理脚本,则可以创建一个文本文件,将各个命令逐行添加进去,并保存为 .bat 扩展名的文件。然后,只需双击该文件即可运行其中的所有命令。
使用 netsh interface portproxy 命令可以在 Windows 上设置和管理网络端口代理。这些命令允许您配置 IPv4 和 IPv6 之间的代理关系。以下是每个命令的简要说明和示例:
1. 添加端口代理
-
add v4tov4:添加 IPv4 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100 -
add v4tov6:添加 IPv4 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy add v4tov6 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=2001:db8::1 -
add v6tov4:添加 IPv6 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy add v6tov4 listenport=8080 listenaddress=:: connectport=80 connectaddress=192.168.1.100 -
add v6tov6:添加 IPv6 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy add v6tov6 listenport=8080 listenaddress=:: connectport=80 connectaddress=2001:db8::1
2. 删除端口代理
-
delete v4tov4:删除 IPv4 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0 -
delete v4tov6:删除 IPv4 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy delete v4tov6 listenport=8080 listenaddress=0.0.0.0 -
delete v6tov4:删除 IPv6 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy delete v6tov4 listenport=8080 listenaddress=:: -
delete v6tov6:删除 IPv6 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy delete v6tov6 listenport=8080 listenaddress=::
3. 重置端口代理
-
reset ipv4:重置所有 IPv4 代理配置。bashCopy Codenetsh interface portproxy reset ipv4 -
reset ipv6:重置所有 IPv6 代理配置。bashCopy Codenetsh interface portproxy reset ipv6
4. 设置端口代理
-
set v4tov4:设置或更新 IPv4 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy set v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100 -
set v4tov6:设置或更新 IPv4 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy set v4tov6 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=2001:db8::1 -
set v6tov4:设置或更新 IPv6 到 IPv4 的端口代理。bashCopy Codenetsh interface portproxy set v6tov4 listenport=8080 listenaddress=:: connectport=80 connectaddress=192.168.1.100 -
set v6tov6:设置或更新 IPv6 到 IPv6 的端口代理。bashCopy Codenetsh interface portproxy set v6tov6 listenport=8080 listenaddress=:: connectport=80 connectaddress=2001:db8::1
5. 显示端口代理配置
-
show all:显示所有配置的端口代理。bashCopy Codenetsh interface portproxy show all -
show v4tov4:显示所有 IPv4 到 IPv4 的端口代理配置。bashCopy Codenetsh interface portproxy show v4tov4 -
show v4tov6:显示所有 IPv4 到 IPv6 的端口代理配置。bashCopy Codenetsh interface portproxy show v4tov6 -
show v6tov4:显示所有 IPv6 到 IPv4 的端口代理配置。bashCopy Codenetsh interface portproxy show v6tov4 -
show v6tov6:显示所有 IPv6 到 IPv6 的端口代理配置。bashCopy Codenetsh interface portproxy show v6tov6
netsh interface portproxy add v4tov4 命令在 Windows 中设置 IPv4 到 IPv4 的端口代理的详细说明,包括每个参数的意义以及示例。
语法
netsh interface portproxy add v4tov4 listenport={Integer | ServiceName} [[connectaddress=]{IPv4Address | HostName}] [[connectport=]{Integer | ServiceName}] [[listenaddress=]{IPv4Address | HostName}] [[protocol=]tcp]
参数说明
-
listenport:
指定要侦听的 IPv4 端口,可以是端口号(如8080)或服务名称(如http)。 -
connectaddress:
指定要连接的目标 IPv4 地址。可以是 IP 地址(如192.168.1.100)、计算机的 NetBIOS 名称或 DNS 名称(如example.com)。如果未指定,默认连接到本地计算机。 -
connectport:
指定要连接的目标端口,可以是端口号(如80)或服务名称(如http)。如果未指定,默认连接到与listenport相同的端口。 -
listenaddress:
指定要侦听的 IPv4 地址。可以是 IP 地址、计算机的 NetBIOS 名称或 DNS 名称。如果未指定,默认侦听所有可用的地址(0.0.0.0)。 -
protocol:
指定要使用的协议,默认为tcp。
示例
-
添加一个简单的端口代理 将所有发送到本地计算机 8080 端口的流量转发到 192.168.1.100 的 80 端口。
bashCopy Codenetsh interface portproxy add v4tov4 listenport=8080 connectaddress=192.168.1.100 connectport=80 -
使用服务名称 如果想要监听
http服务(通常是 80 端口),并将流量转发到example.com的 8080 端口。bashCopy Codenetsh interface portproxy add v4tov4 listenport=http connectaddress=example.com connectport=8080 -
指定侦听地址 监听来自特定 IP 地址(如
192.168.1.10)的请求,并将其转发到同一台机器的 9090 端口。bashCopy Codenetsh interface portproxy add v4tov4 listenport=9090 listenaddress=192.168.1.10 connectport=9090 -
使用默认连接地址 只指定
listenport和listenaddress,使其转发到本地的 80 端口。bashCopy Codenetsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0
查看当前的端口代理配置
要查看当前的端口代理配置,可以使用以下命令:
netsh interface portproxy show all
删除端口代理
如果需要删除刚才添加的端口代理,可以使用以下命令:
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0

浙公网安备 33010602011771号