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 端口拦截了。
- 打开控制面板 -> Windows Defender 防火墙 -> 高级设置。
- 点击左侧 "入站规则" -> 右侧 "新建规则"。
- 选择 "端口" -> 下一步。
- 选择 "TCP",特定本地端口输入 3306(和你上面 listenport 设置的一样) -> 下一步。
- 选择 "允许连接" -> 下一步 -> 默认全选 -> 下一步。
- 名称随便填,比如"数据库转发转发" -> 完成。
第三步:电脑 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 的系统服务。如果这个服务没开,命令敲了也没用,端口根本不会打开。
- 在电脑 A 上,按 Win + R,输入 services.msc 回车。
- 在服务列表中找到 IP Helper。
- 如果它的状态不是"正在运行",右键点击它 -> 启动。
- 为了保险,右键 -> 属性 -> 启动类型改为 自动。
- 重启电脑 A(或者重启后再次运行一遍 netsh 命令)。
检查防火墙配置
如果防火墙拦截,你会得到"连接超时"或"连接被拒绝"。
快速测试法(仅用于排查):
- 在电脑 A 上,暂时关闭 Windows 防火墙(控制面板 -> Windows Defender 防火墙 -> 启用或关闭 -> 全部选关闭)。
- 让电脑 B 再次尝试连接。
- 结果判断:如果通了:说明刚才的入站规则没配置对。重新打开防火墙,删除旧规则,重新添加一条允许 TCP 端口(如 3306)的入站规则。如果还是不通:继续看第三步,别忘了把防火墙开回去。
检查端口监听状态
我们需要确认 netsh 命令是否生效,以及它是监听在"所有网卡"还是"本地回环"。
- 在电脑 A 上,打开 CMD(管理员)。
- 输入命令:
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 服务,或者检查是否有其他软件占用了该端口。