之前因为Valora这个东西部署在Zeabur上面,然后Zeabur被我用超了,给我发邮件了,让我升级我的套餐,那既然这样我肯定得寻找更好的服务器去搭建Valora了;前些阵子我问了@CyanFalse想问问有没有什么好的服务器,结果人家很大气啊,直接给了一台12H48G的Windows服务器(没错是Windows不是Linux),虽然说Windows做服务器没啥问题,又不是不会用,天天用着这个视窗11怎么可能不会用,不过Windows还是有点不方便,然后我就装了WSL来跑我的服务
但是但是,Windows的WSL是有防火墙加持的,这个防火墙是Windows自己的防火墙,会阻挡Windows访问WSL的服务,也会阻挡WSL访问Windows的服务,这很不方便,所以就有了这个文章
找到目标IP
首先得搞清楚我们要访问的IP,要不然关了防火墙访问错IP也是没用的,不过这一部分很简单,甚至可以跳过
找到WindowsIP
直接在设置里面找到自己当前使用的网络驱动器,里面就有(这里用我自己电脑截个图,我自己电脑是设置了静态IP的,一般来说上面IP分配那里会写自动,要看下面那个IPv4地址的IP)
当然如果你更习惯用命令行(例如我),那可以使用以下命令获取
然后会有一堆的输出(取决于你有多少个网卡)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| PS C:\Users\GamerNoTitle> ipconfig
Windows IP 配置
未知适配器 Tailscale:
连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::d8ff:5060:f230:9168%67 自动配置 IPv4 地址 . . . . . . . : 169.254.83.107 子网掩码 . . . . . . . . . . . . : 255.255.0.0 默认网关. . . . . . . . . . . . . :
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接 连接特定的 DNS 后缀 . . . . . . . : DHCP HOST
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 192.168.0.233 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 192.168.0.1
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 192.168.10.1 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 192.168.43.1 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . :
以太网适配器 vEthernet (Default Switch):
连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . . . . . : fe80::369c:b5be:230:32bb%79 IPv4 地址 . . . . . . . . . . . . : 172.21.96.1 子网掩码 . . . . . . . . . . . . : 255.255.240.0 默认网关. . . . . . . . . . . . . :
|
我这里网卡是用的以太网适配器 以太网
,所以我的IP就是192.168.0.233
找到WSL的IP
首先你得安装net-tools
(一般来说正常的Linux都会有,但指不定你用的WSL它没有呢?)
1
| $ sudo apt install net-tools -y
|
安装完以后输入Linux的经典命令
然后就会有你所有网卡的输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| gamernotitle@DESKTOP-HRHFRVI:~$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet xxx.xx.xx.123 netmask 255.255.240.0 broadcast xxx.xx.xx.xxx inet6 fe80::215:5dff:fee6:d2ab prefixlen 64 scopeid 0x20<link> ether 00:15:5d:e6:d2:ab txqueuelen 1000 (Ethernet) RX packets 151123 bytes 210055048 (210.0 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 22062 bytes 12461359 (12.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
这里要看的是eth0
,看里面的inet
写的啥,这里可以得到IP地址为xxx.xx.xx.123
(因为用的是公网服务器,所以码一下)
让访问流量通过防火墙
这里就得打开一个管理员终端了,按下Win + X,选择终端(管理员)
然后输入以下命令,添加防火墙规则,放行两端访问的流量
1
| New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
|
会弹出这样子的提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Name : {规则的UUID} DisplayName : WSL Description : DisplayGroup : Group : Enabled : True Profile : Any Platform : {} Direction : Inbound Action : Allow EdgeTraversalPolicy : Block LooseSourceMapping : False LocalOnlyMapping : False Owner : PrimaryStatus : OK Status : 已从存储区成功分析规则。 (65536) EnforcementStatus : NotApplicable PolicyStoreSource : PersistentStore PolicyStoreSourceType : Local RemoteDynamicKeywordAddresses : {} PolicyAppId :
|
就说明已经打通了,现在你试试访问WSL的服务,是不是已经可以访问通了呢
Windows转发WSL流量
因为我是使用公网服务器,但是服务跑在WSL里面,所以得让Windows来转发一下,幸好Powershell可以直接做到
1
| netsh interface portproxy add v4tov4 listenport=<"Windows监听的端口"> connectaddress="<WSL的IP地址,前面获取过的>" connectport=<"WSL中的服务端口"> listenaddress=* protocol=tcp
|
协议这个地方,如果你是UDP服务的话,记得把tcp
改为udp
打完后按回车,添加转发不会有任何的提示;然后在公网访问服务器,就可以发现已经访问到WSL中的服务了