Skip to content

Windows 端口映射

使用 Windows 自带的 netsh 命令配置端口转发,无需第三方软件。

示例场景:电脑 B -> (连接) -> 电脑 A:3306 -> (转发) -> 122.112.198.11:3306

配置端口转发

第一步:电脑A管理员cmd运行

bash
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=122.112.198.11 connectport=3306
  • 解释
    • listenaddress=0.0.0.0:监听电脑 A 上所有的网卡,(也可以指定本机内网IP)。

    • listenport=3306:电脑 A 开放这个端口给电脑 B 连(如果电脑 A 本地也装了 MySQL,这个端口可能冲突,你可以改成 3307)。

    • connectaddress=122.112.198.11:VPN 里那个数据库的真实 IP。

    • connectport=3306:数据库的真实端口。

第二步:在代理电脑上开放防火墙

很多时候转发配置好了但连不上,是因为 Windows 防火墙把 3306 端口拦截了。

  1. 打开控制面板 -> Windows Defender 防火墙 -> 高级设置
  2. 点击左侧 "入站规则" -> 右侧 "新建规则"
  3. 选择 "端口" -> 下一步。
  4. 选择 "TCP",特定本地端口输入 3306(和你上面 listenport 设置的一样) -> 下一步。
  5. 选择 "允许连接" -> 下一步 -> 默认全选 -> 下一步。
  6. 名称随便填,比如"数据库转发转发" -> 完成。

第三步:电脑 B 连接

  • 主机 (Host): 192.168.1.100 (注意!这里填电脑 A 的 IP不是 122 那一个)
  • 端口 (Port): 3306
  • 用户名/密码: 填真实的数据库账号密码。

解除端口映射

bash
# 查看当前所有的端口转发规则
netsh interface portproxy show all
# 清理所有端口转发规则
netsh interface portproxy reset

# 删除指定规则, 先查看所有规则 (netsh interface portproxy show all),再删除
# 1.如果你刚才设的是 0.0.0.0 (监听所有)
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3306
# 2.如果你刚才设的是具体 IP (比如 192.168.1.100)
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.100 listenport=3306
# 最后关掉防火墙入站规则

问题排查

"连接被拒绝"(Connection Refused)通常意味着电脑 B 的请求到达了电脑 A,但电脑 A 把它拒之门外,或者电脑 A 根本没有在这个端口上进行监听

请按照以下顺序,一步步排查。通常是第一步第二步的问题。

检查 IP Helper 服务(最容易被忽略!)

Windows 的 netsh 端口转发功能依赖于一个名为 IP Helper 的系统服务。如果这个服务没开,命令敲了也没用,端口根本不会打开。

  1. 电脑 A 上,按 Win + R,输入 services.msc 回车。
  2. 在服务列表中找到 IP Helper
  3. 如果它的状态不是"正在运行",右键点击它 -> 启动
  4. 为了保险,右键 -> 属性 -> 启动类型改为 自动
  5. 重启电脑 A(或者重启后再次运行一遍 netsh 命令)。

检查防火墙配置

如果防火墙拦截,你会得到"连接超时"或"连接被拒绝"。

快速测试法(仅用于排查):

  1. 电脑 A 上,暂时关闭 Windows 防火墙(控制面板 -> Windows Defender 防火墙 -> 启用或关闭 -> 全部选关闭)。
  2. 让电脑 B 再次尝试连接。
  3. 结果判断如果通了:说明刚才的入站规则没配置对。重新打开防火墙,删除旧规则,重新添加一条允许 TCP 端口(如 3306)的入站规则如果还是不通:继续看第三步,别忘了把防火墙开回去。

检查端口监听状态

我们需要确认 netsh 命令是否生效,以及它是监听在"所有网卡"还是"本地回环"。

  1. 电脑 A 上,打开 CMD(管理员)。
  2. 输入命令:netstat -ano | findstr 3306(假设你用的端口是 3306,如果是别的请替换)

分析结果:

  • 情况 A(正常): 显示 TCP 0.0.0.0:3306 ... 或者 TCP 192.168.x.x:3306 ... 这说明端口开了。如果 B 连不上,大概率还是防火墙问题,或者是电脑 A 的 IP 变了
  • 情况 B(监听错了): 显示 TCP 127.0.0.1:3306 ... 这说明电脑 A 只允许自己连自己,不允许局域网别人连。 解决:你需要删除旧规则,重新添加,并指定具体的局域网 IP。netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3306 netsh interface portproxy add v4tov4 listenaddress=192.168.1.100 listenport=3306 connectaddress=122.112.198.11 connectport=3306(注意把 192.168.1.100 换成电脑 A 真实的局域网 IP)
  • 情况 C(啥也没有): CMD 没有返回任何内容。 这说明转发规则根本没生效。请回到第一步检查 IP Helper 服务,或者检查是否有其他软件占用了该端口。