Windows 端口代理的实现方法

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

说明

  1. 设置端口代理,即建立连接,将当前主机的指定端口绑定到另一台局域网主机的指定端口。
  2. 关闭 Windows 防火墙,让其他网络主机可以访问当前主机的指定端口(通过设置防火墙规则实现的话更好)。

延伸

Linux 主机的实现思路

  1. 利用 iptables 做 NAT 规则,实现数据的转发
  2. SSH 的本地代理机制
  3. 未经验证 利用 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