通过中转机器B实现远程数据库C端口访问的方案咨询
通过中转机器B实现远程数据库C端口访问的方案咨询
没问题,这种场景完全可以实现!既然你完全控制机器B,咱们可以用B做端口转发,把B的8000端口流量直接转发到C的8000端口上。下面给你两种常用的方法,都是不需要登录C就能搞定的:
Linux系统下的机器B(iptables方案)
- 首先开启IP转发功能:
临时开启可以执行:echo 1 > /proc/sys/net/ipv4/ip_forward
如果要重启后依然生效,编辑/etc/sysctl.conf,找到net.ipv4.ip_forward=1这行去掉注释,然后执行sysctl -p让设置生效。 - 添加端口转发规则:
把B的8000端口流量转发到C的8000端口:iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination [C的IP地址]:8000
再添加返回流量的转发规则,确保连接正常:iptables -t nat -A POSTROUTING -p tcp -d [C的IP地址] --dport 8000 -j MASQUERADE - 保存规则:
根据不同Linux发行版,保存命令略有差异,比如Ubuntu可以用iptables-save > /etc/iptables/rules.v4,CentOS用service iptables save。
Windows系统下的机器B(netsh方案)
- 打开管理员权限的命令提示符,执行端口转发命令:
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=[B的IP地址] connectport=8000 connectaddress=[C的IP地址] - (可选)如果后续需要删除这条规则,执行:
netsh interface portproxy delete v4tov4 listenport=8000 listenaddress=[B的IP地址] - 别忘了配置Windows防火墙:添加一条入站规则,允许TCP 8000端口的连接请求,避免流量被防火墙拦截。
设置完成后,你在本地通过VPN连接到B,直接访问B的IP地址:8000,就相当于访问C的8000端口了,完全不需要登录C,所有转发逻辑都在B上完成,刚好匹配你的需求!
备注:内容来源于stack exchange,提问作者Kartik




