前置问题:
A 内网服务器 (无法访问外网,可以访问B,无法访问C)
B 外网服务器 (可以访问外网,无法访问A,可以访问C)
C 第三方mysql数据库(外网)
需求:
A 连接 C
跳板机一般用于异构网络间的中转站,比如对方在防火墙上只给你开放了一台服务器的权限,你无法访问对方局域网的其它主机,但你能访问的这台服务器则有权限访问其它主机。那么这台服务器就可以作为对方网络的跳板机,有时又被称为前置机。
Windows 系统自带的 IP Helper 服务具有端口转发的功能,这个功能可以用来作为跳板,通过跳板机来访问其它主机的服务。
在 cmd 中运行 services.msc 检查 IP Helper 服务是否启动,Windows 的端口转发是由该服务提供的。在 “IP Helper” 服务的属性中可以查看服务描述:
“ IP Helper 服务:使用 IPv6 转换技术(6to4、ISATAP、端口代理和 Teredo)和 IP-HTTPS 提供隧道连接。如果停止该服务,则计算机将不具备这些技术提供的增强连接优势。”
当停用此服务时,端口转发将不生效。可以使用 netstat -an -p tcp 检查本地监听状态。
netstat -an -p tcp| findstr LISTENING
命令行启动 'IP Helper'服务:
C:\> net start 'IP Helper'
IP Helper 服务正在启动 .
IP Helper 服务已经启动成功。
设置端口转发规则,示例:将远程主机 192.168.23.18 的 65530 端口映射到本地的 1111 端口
netsh interface portproxy add v4tov4 listenport=1111 connectaddress=192.168.23.18 connectport=65530
命令行说明:
netsh interface portproxy add v4tov4 /?
用法: add v4tov4 [listenport=]<integer>|<servicename>
[connectaddress=]<IPv4 address>|<hostname>
[[connectport=]<integer>|<servicename>]
[[listenaddress=]<IPv4 address>|<hostname>]
[[protocol=]tcp]
参数:
标记 值
listenport - IPv4 侦听端口。
connectaddress - IPv4 连接地址。
connectport - IPv4 连接端口。
listenaddress - IPv4 侦听地址。
protocol - 使用的协议。现在只支持 TCP。
命令执行后,检查是否生效:
C:\> netsh interface portproxy show all
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
* 1111 192.168.23.18 65530
可以看到远程主机的端口已经映射到了本地的1111端口,即可以直接访问跳板机的1111端口来间接访问目标主机。
此时配置已生效,具体是否已经在本地开启对应端口的监听,需要通过netstat 命令进行查看:
C:\> netstat -an -p tcp | findstr 1111
TCP 0.0.0.0:1111 0.0.0.0:0 LISTENING
如果想导出配置,可以执行以下命令:
netsh interface portproxy dump > port.con
如果配置错误,想删掉重新配,可以执行以下命令:
netsh interface portproxy reset
可以执行 add 命令重新配,也可以修改导出的配置文件,通过还原命令导入之前的配置:
netsh -f port.conf
如果有多个端口需要映射,可以直接在配置文件中修改,然后重新导入配置即可:
C:\> netsh interface portproxy dump
#========================
# 端口代理配置
#========================
pushd interface portproxy
reset
add v4tov4 listenport=1111 connectaddress=192.168.23.18 connectport=65530
popd
# 端口代理配置结束
比如上面 dump 出来的配置,直接重定向到文本文件,在其中 add 命令处复制多行,把端口改掉然后重新导入。
导入修改后的配置,效果如下:
从本地监听可以看到,本地的多个端口映射到了远程主机的同一个端口。这种将远程主机端口映射本地端口的**机制也被叫做正向代理,反之将本地端口映射到远程主机的模式叫反向代理。
正向代理一般用于做跳板机,而反向代理则常用于在防火墙上打洞。