Windows环境下端口转发案例两则

几个月前买了一台新电脑(台式机)放在工位,以前用来办公的笔记本电脑终于可以放在宿舍。因为办公需要,新电脑必须是Windows系统。为了写代码,我又安装了WSL2docker。在平衡两台电脑的服务的时候,端口转发方面踩了点坑,特此记录下来。

背景说明

宿舍和工位分别有电脑一台,以下分别称为服务器A和服务器B。服务器Aip地址为10.*.*.*,其连接的路由器有AP隔离,即A与连接相同路由器的设备之间不能互相访问。服务器Bip地址为222.*.*.*,网络环境没有AP隔离。但是服务器B安装了WSL2,WSL2并不与宿主Windows系统公用一套网关,或者说网卡。也就是说,WSL2有自己的ip地址,并且不是127.0.0.1,这与第一代WSL完全不同。

技术原理

Windows环境下可以使用netsh命令,实现类似于iptables的端口转发功能。

使用netsh interface portproxy show v4tov4可以查看当前端口转发规则。新建转发规则的命令如下:

1
2
3
4
5
netsh interface portproxy add v4tov4 \
listenport=1234 \
listenaddress=0.0.0.0 \
connectport=80 \
connectaddress=192.168.1.1

该规则的功能是在1234端口上监听所有地址发来的请求,并转发到192.168.1.180端口。

上述命令需要在获得了管理员权限的PowerShell/CMD窗口中执行。

案例说明

案例一 暴露WSL2的服务

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:26:a4:80 brd ff:ff:ff:ff:ff:ff
inet 172.22.91.163/20 brd 172.22.95.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe26:a480/64 scope link
valid_lft forever preferred_lft forever

使用ip addr确定WSL2ip地址为172.22.91.163。然后运行指令,把WSL2ssh服务暴露到校园网里。

1
2
3
4
5
netsh interface portproxy add v4tov4 \
listenport=****** \
listenaddress=0.0.0.0 \
connectport=22 \
connectaddress=172.22.91.163

案例二 “往返”绕过AP隔离

上文提到,服务器A所在网络环境有AP隔离,这使得我的ipad有一些看漫画和动画的需求无法实现。与此同时服务器A和服务器B之间没有AP隔离,经测试是可以互相访问的。为了绕过AP隔离,我使用服务器B作为跳板,依然在B上添加转发规则,实现“宿舍-工位-宿舍”的网络链路。

运行netsh interface portproxy show v4tov4查看配置好的规则。

1
2
3
4
5
6
7
8
9
PS C:\WINDOWS\system32> netsh interface portproxy show v4tov4

侦听 ipv4: 连接到 ipv4:

地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 80 172.22.91.163 80
0.0.0.0 ****** 172.22.91.163 22
0.0.0.0 10808 10.**.**.*** 10808

其中10808YACReader服务的端口,一个漫画管理软件。最后的最后还需要在防火墙里打开相关端口的入站权限,在此不表。

结论

本文基于netsh命令实现了Windows环境下的端口转发,最终给出两个应用案例,分别实现了WSL2的端口暴露和AP隔离的绕过。

Fin.

0条搜索结果。