最近接集团的项目,要连他们的 Oracle 数据库。数据库在内网,客户端只有 Windows 版,我的 Mac 连不上。
公司有一台 Windows 电脑能正常连内网,我的想法是:把这台 Windows 变成跳板机,把内网里的数据库端口转到局域网,Mac 直接连这台 Windows 的局域网 IP,数据经过它再走到内网里的 Oracle。
整体链路
Mac(不在内网)
│ TCP 连 Windows局域网IP:1521
▼
Windows 跳板机(已连内网)
│ netsh portproxy 转发至内网地址
│ TCP 连 10.8.0.5:1521
▼
集团 Oracle
在 Windows 上建转发规则
以管理员身份打开 CMD(右键"以管理员身份运行"),执行:
netsh interface portproxy add v4tov4 \
listenaddress=0.0.0.0 listenport=1521 \
connectaddress=10.8.0.5 connectport=1521
listenaddress=0.0.0.0:监听所有网卡,局域网设备都能接入。如果只是你一个人用,可以改成你的 Mac IP,更精准。listenport=1521:跳板机对外开放的端口,和数据库端口保持一致方便记。connectaddress=10.8.0.5:内网中 Oracle 的真实 IP,以connectport=1521为端口。
防火墙放行端口
转发规则建好了,但 Windows 防火墙默认会拦外部入站的 1521,还需要放行。同样在管理员 CMD 里:
netsh advfirewall firewall add rule \
name="Oracle 中转" dir=in action=allow protocol=TCP localport=1521
命令式和图形界面效果相同,习惯 GUI 的也可以走:「控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则」,选 TCP 端口、填 1521、允许连接,只勾"专用",不勾"公用"。
验证连通
在 Mac 终端测试端口是否可达:
bash
nc -zv <Windows局域网IP> 1521
返回 succeeded 说明链路打通。然后用 DataGrip 或你惯用的 Oracle 客户端,地址填 Windows局域网IP:1521,用户名密码用集团给的那套,正常连上就算成了。
几个日常会用到的命令
查看当前所有转发规则:
netsh interface portproxy show all
删掉某条规则:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=1521
删掉防火墙规则:
netsh advfirewall firewall delete rule name="Oracle 中转"
有一点要留意:内网连接断开后,转发规则还在,但 connectaddress 不可达,连接会超时报错。遇到这种情况先确认内网连接是否正常,别去查其他链路。重启 Windows 后 portproxy 规则通常保留,但防火墙规则偶尔会被域策略重置,遇到了重新 add 一次就好。