PS:该方法是胡正教我的。
实验
现在有三台主机:
- 客户端:10.1.33.111
- Windows 代理:10.1.33.59
- 服务器:10.1.33.91
需要实现客户端通过访问 Windows 代理的 22 端口,连接到服务器的 SSH 服务(22 端口)。
CODE
建立端口映射
C:\Users\Administrator\Desktop> netsh interface portproxy add v4tov4 listenaddr=10.1.33.59 listenport=22 connectaddr=10.1.33.91 connectport=22
# netsh interface portproxy add v4tov4 listenport=22 connectaddr=10.1.33.91 connectport=22
C:\Users\Administrator\Desktop> netsh interface portproxy show all
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
10.1.33.59 22 10.1.33.91 22
C:\Users\Administrator\Desktop> netsh firewall set opmode disable
客户端访问
ssh catroll@10.1.33.59
最终成功建立对 10.1.33.91 的 SSH 连接。
取消端口映射
C:\Users\Administrator\Desktop> netsh interface portproxy delete v4tov4 listenaddr=10.1.33.59 listenport=22
# netsh interface portproxy delete v4tov4 listenport=22
说明
- 设置端口代理,即建立连接,将当前主机的指定端口绑定到另一台局域网主机的指定端口。
- 关闭 Windows 防火墙,让其他网络主机可以访问当前主机的指定端口(通过设置防火墙规则实现的话更好)。
延伸
Linux 主机的实现思路
- 利用 iptables 做 NAT 规则,实现数据的转发
- SSH 的本地代理机制
- 未经验证 利用
echo 1> /proc/sys/net/ipv4/ip_forward
转发所有数据包
然后,客户端将网关指向这台机器(1、修改网络配置中的网关;2、增加route
规则)即可。
Windows 上的网络命令
arp -a
查看地址解析映射表netsh
进入网络配置
netsh -c interface ip dump > c:\interface.txt
导出网络配置tracert
路由跟踪nbtstat
ping
分组网间探测netstat