文章目录
WSL 2 访问局域网内设备
WSL 2 访问本机 Windows
由于 WSL 2 基于 Hyper-V,其与宿主 Windows 的关系可以看作是同一网络下的不同主机。要实现 WSL 2 到 Windows 的通信,首先要让 WSL 2 知道 Windows 的 IP 地址。
在 Windows 中,打开终端,执行 ipconfig
,可以看到 WSL 相关的网络信息:
![](https://img-blog.csdnimg.cn/0095a6ef253941d9a1ec521ae70045ec.png#pic_center)
需要注意的是,在没有特殊配置的情况下,电脑的 IP 地址通常会随网络环境的变化而变化,此处及后文的 IP 地址仅供参考,具体 IP 地址需要以自己实际操作时的输出为准。
通过 ipconfig
的输出可以发现,在 Windows-WSL 2 这一体系中,Windows 的 IP 地址为 192.168.176.1
。
Linux 系统中,/etc/resolv.conf
为 DNS 配置文件,对于 WSL 2 也是如此。在 WSL 2 中,执行 cat /etc/resolv.conf
,查看其中的内容:
![](https://img-blog.csdnimg.cn/805e5423c52a4f4591f5443ca39cfe4c.png#pic_center)
可以发现,此处指向的 DNS 服务器 IP 为 192.168.176.1
,正是 Windows 的 IP,说明 WSL 2 是借助 Windows 去寻找真正的 DNS 服务器的。
可以尝试在 WSL 2 中 ping Windows,即执行 ping `cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`
,能 ping 通即表示 WSL 2 能通过网络访问 Windows。
因为每次启动 WSL 2 都会重新分配虚拟网络,可以在 ~/.bashrc
中加入 Windows 网络相关环境变量,便于后续使用:
# Windows 宿主机 IP
WINDOWS_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}' | head -1)
# Windows 宿主机代理端口
WINDOWS_PROXY_PORT=7890
# 更新 Windows 网络信息
function update_windows_net_info() {
WINDOWS_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}' | head -1)
WINDOWS_PROXY_PORT=7890
}
如果有需要的话,还可以在 update_windows_net_info
中将 Windows 的 IP 地址写入 /etc/hosts
。
WSL 2 访问非本机 Windows 设备
如果局域网内非本机 Windows 设备开放了防火墙入站,WSL 2 无需额外配置就能直接访问。
局域网内设备访问 WSL 2
本机 Windows 访问 WSL 2
本机 Windows 可以直接通过 localhost
访问 WSL 2。
非本机 Windows 设备访问 WSL 2
要实现局域网内非本机 Windows 设备访问 WSL 2,需要在 Windows 上配置端口转发以及防火墙入站规则。
为了便于操作,可以将配置端口转发和防火墙入站规则的操作封装成函数,在 Windows PowerShell 的配置文件 PROFILE
中添加以下内容:
# 添加 WSL 端口转发以及防火墙入站规则
function Add-WSLPortForwarding ($Port = '23333', $Protocol = 'TCP') {
$WSLIP = wsl -- hostname -I
$WSLIP =