从局域网访问 wsl2
首先必须得知道这两个 ip 的含义。
- 在 windows 下执行
wsl hostname -i
命令,是通过 WSL 2 安装的 Linux 分发版 IP 地址(WSL2 VM 的地址) - 在 linux 子系统下执行
cat /etc/resolv.conf
命令,是表示从 WSL2 子系统看到的 WINDOWS 系统的 IP 地址 (WSL 2 VM)
WSL2 已经支持在 windows 系统下 localhost 访问 wsl。
命令需要在管理员权限下执行
配置端口转发
在 powerShell 下使用 Netsh 命令添加端口转发,将 Windows 端口映射到 WSL 2 VM 的 IP 地址。
netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname -I)
- <yourPortToForward>:Windows 转发代理的端口
listenaddress=0.0.0.0
:表示将接受来自任何 IPv4 地址的传入请求,即多个网卡的 ip 皆可以访问到- <yourPortToConnectToInWSL>:wsl 需要被转发的端口
- connectaddress:wsl 的 ip,通过在 powershell 下执行
wsl hostname -i
命令获取。刚说到 wsl2 已经支持 localhost 访问 wsl,因此可以使用 localhost 代替
如我需要将 wsl 的 8023 端口转发至 Windows 的 8023 端口,可以这样设置:
netsh interface portproxy add v4tov4 listenport=8023 listenaddress=0.0.0.0 connectport=8023 connectaddress=localhost
如果使用 IPv4 转发 IPv4 失效,可能 localhost 指向的是 IPv6 地址,这时候更改成 v4tov6 即可。如:
netsh interface portproxy add v4tov6 listenport=8023 listenaddress=0.0.0.0 connectport=8023 connectaddress=localhost
再比如我需要远程 ssh 连接 wsl,
若 wsl 尚未安装 ssh,需要先安装 ssh 服务
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install openssh-server
sudo service ssh start
如果想通过公私钥对登录,可以生成公私钥对,比密码登录安全,一切为了服务器安全着想。
cd ~/.ssh
:不存在则自己创建ssh-keygen
:使用默认选项(全部直接回车),生成公钥/私钥 RSA 密钥对cat id_rsa.pub >> authorized_keys
:将密钥追加到 authorized_keys 文件chmod 640 authorized_keys
:更改文件读写权限sudo service ssh restart
:重启 ssh,使得更改生效ssh localhost
:通过 localhost 访问测试
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=localhost
wsl2 暂时不支持 IPv6 访问
查看创建的转发
netsh interface portproxy show all
删除转发规则
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
使用工具进行配置
目前了解到的工具,但博主暂未尝试使用,后期可能会补充,这里仅提供个思路。
https://github.com/HobaiRiku/wsl2-auto-portproxy