利用 netsh 实现 WSL 服务到 Windows 的端口映射

引言

随着微软在 Windows 10 中引入了 Windows Subsystem for Linux (WSL),Linux 和 Windows 的界限变得越来越模糊。WSL 允许用户在 Windows 上直接运行 Linux 环境,极大地方便了开发者。但是,当我们在 WSL 中运行诸如 Web 服务器或数据库服务时,可能会遇到一些网络访问的问题。本文将介绍如何使用 Windows 的 netsh 命令,将 WSL 中的服务端口映射到 Windows 宿主机上,以解决这一问题。

WSL 简介

WSL 是一种为在 Windows 10 上运行 Linux 二进制可执行文件(例如 ELF 格式)提供的兼容层。它允许你安装一个或多个 Linux 发行版,比如 Ubuntu、Debian 或 Kali Linux,并在原生 Windows 环境下直接运行它们。

端口映射的必要性

在 WSL 环境中运行服务(如 HTTP 服务器)时,它们默认只在 Linux 子系统内部可见。如果你想通过 Windows 访问这些服务,就需要进行端口映射,将 WSL 中的端口映射到 Windows 上的端口。

使用 netsh 进行端口映射

netsh 是 Windows 中一个强大的命令行工具,用于显示或修改本地计算机的网络配置。通过 netsh,我们可以设置端口转发规则,将 WSL 中的端口映射到 Windows 主机。

示例命令

例如,如果你在 WSL 中运行了一个监听在 80 端口的 Web 服务器,想要将它映射到 Windows 的 80 端口,可以使用以下命令:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=172.20.73.40

这条命令的作用是:

  • listenport=80: 监听 Windows 上的 80 端口。
  • listenaddress=0.0.0.0: 监听所有的网络接口。
  • connectport=80: 将流量转发到 80 端口。
  • connectaddress=172.20.73.40: 将流量转发到 WSL 实例的 IP 地址。

查找 WSL IP 地址

在执行上述命令之前,你需要知道 WSL 实例的 IP 地址。可以在 WSL 中使用 ip addr 命令来查找。

ip addr

在输出中找到与你的网络接口相关的 IP 地址。

注意事项

  • 确保 Windows 防火墙允许对应端口的流量。
  • 每次 WSL 重启后,IP 地址可能会更改,需要更新 netsh 规则。
  • 在某些 Windows 版本上,这种端口映射可能不起作用。

结语

通过使用 netsh 命令,我们可以方便地将 WSL 中运行的服务映射到 Windows 宿主机的端口,从而实现更灵活的网络配置和服务访问。这为使用 WSL 的开发者提供了更多的便利性和可能性。

最后修改:2024 年 01 月 29 日
如果觉得我的文章对你有用,请随意赞赏