我想从我的 LAN 访问安装在 WSL2 中的 Linux 发行版提供的服务。
好的,我知道如何在主机上重新映射端口。我的问题是,每次我关闭 Windows11 主机 (wsl) 然后重新启动它时,它都会为 WSL2 分配不同的 IP 地址,因此我无法建立某种永久规则。奇怪的是,它似乎也不是保留的本地 IP。例如,现在它是172.21.32.121
。
有办法解决这样的问题吗?我的意思是..我可以告诉 Windows 为 WSL2 分配一个静态 IP 吗?最终目标是告诉 Windows,在 wsl2 上运行的特定服务(端口)必须始终可从 LAN 访问。
答案1
我知道如何在主机上重新映射端口...[但是]每次我[重新启动 WSL] 时,Windows11 主机都会为 WSL2 分配不同的 IP 地址,因此我无法建立某种永久规则。
有没有什么办法可以解决这样的问题呢?
事实上,有相当多的可能性:
WSL1
如果您的服务在 WSL1 下运行,那么您可以转换发行版(或创建一个新的发行版)并简单地使用 Windows 主机 IP 访问服务。这曾经是大多数人的首选解决方案,但 WSL1 开始显得有些过时了。
SSH 反向隧道
正如您所注意到的,IP 地址是动态的,这使得端口转发规则更具挑战性。因此,一种解决方案是撤销端口转发的“源”,以便它源自之内WSL2(始终知道自己的 IP 地址)。我在这个 Ask Ubuntu 答案。
它确实要求您ssh
在每次重新启动 WSL 时运行该命令,但您可以将其作为启动服务的同一脚本的一部分来执行。例如,将其作为字符串的一部分放在部分/etc/wsl.conf
中。[boot]
command =
WSL 1.1.0 或更高版本
虽然不能保证,最新的 WSL2 预发布版本最近发布的版本在发行说明中包含以下功能:
尝试在 WSL NAT 网络中始终重用相同的 IP 地址
这意味着,理论上,一旦你分配了端口转发规则,IP 地址就会不变除非由于某种奇怪的原因,它(或子网)已被使用。
由于它目前处于预发布阶段,因此必须通过带有 的管理员 PowerShell 手动下载和安装 1.1.0 Add-AppxPackage <packagename>
,但 WSL 团队通常会在解决任何预发布问题后发布生产版本,因此请密切关注发布页面中查找版本号大于 1.1.0 的“最新版本”。当出现这种情况时,它应该可以在正常Microsoft Store 页面。
(实验)桥接网络
我可以告诉 Windows 为 WSL2 分配一个静态 IP 吗?
可能吗?我(仍然)没有亲自尝试过,因为微软似乎在去年将此功能保留在“实验”类别中,但正如与上述 AU 答案相同,WSL2 中有一项功能(曾经有?),允许您创建自己的 Hyper-V 网络交换机并指定它用于 WSL2。 这篇博文仍然是我见过的对该功能的最佳描述。
在过去一年左右的时间里,微软根本没有提及该功能,所以我不确定该功能的计划是什么,或者在最新版本中是否仍然启用该功能。