Windows环境下端口转发案例两则
几个月前买了一台新电脑(台式机)放在工位,以前用来办公的笔记本电脑终于可以放在宿舍。因为办公需要,新电脑必须是Windows系统。为了写代码,我又安装了WSL2和docker。在平衡两台电脑的服务的时候,端口转发方面踩了点坑,特此记录下来。
背景说明
宿舍和工位分别有电脑一台,以下分别称为服务器A和服务器B。服务器A的ip地址为10.*.*.*,其连接的路由器有AP隔离,即A与连接相同路由器的设备之间不能互相访问。服务器B的ip地址为222.*.*.*,网络环境没有AP隔离。但是服务器B安装了WSL2,WSL2并不与宿主Windows系统公用一套网关,或者说网卡。也就是说,WSL2有自己的ip地址,并且不是127.0.0.1,这与第一代WSL完全不同。
技术原理
Windows环境下可以使用netsh命令,实现类似于iptables的端口转发功能。
使用netsh interface portproxy show v4tov4可以查看当前端口转发规则。新建转发规则的命令如下:
1 | netsh interface portproxy add v4tov4 \ |
该规则的功能是在1234端口上监听所有地址发来的请求,并转发到192.168.1.1的80端口。
上述命令需要在获得了管理员权限的PowerShell/CMD窗口中执行。
案例说明
案例一 暴露WSL2的服务
1 | $ ip addr |
使用ip addr确定WSL2的ip地址为172.22.91.163。然后运行指令,把WSL2的ssh服务暴露到校园网里。
1 | netsh interface portproxy add v4tov4 \ |
案例二 “往返”绕过AP隔离
上文提到,服务器A所在网络环境有AP隔离,这使得我的ipad有一些看漫画和动画的需求无法实现。与此同时服务器A和服务器B之间没有AP隔离,经测试是可以互相访问的。为了绕过AP隔离,我使用服务器B作为跳板,依然在B上添加转发规则,实现“宿舍-工位-宿舍”的网络链路。
运行netsh interface portproxy show v4tov4查看配置好的规则。
1 | PS C:\WINDOWS\system32> netsh interface portproxy show v4tov4 |
其中10808是YACReader服务的端口,一个漫画管理软件。最后的最后还需要在防火墙里打开相关端口的入站权限,在此不表。
结论
本文基于netsh命令实现了Windows环境下的端口转发,最终给出两个应用案例,分别实现了WSL2的端口暴露和AP隔离的绕过。
Fin.