将 WSL2 的 IP 地址设为静态

Nic*_*ick 5 ssh netsh windows-10 windows-subsystem-for-linux

我在 WIN10 机器上的 WSL2 中运行 SSH 服务器。为了完成这项工作,我正在使用:

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=172.19.237.178 connectport=22
Run Code Online (Sandbox Code Playgroud)

这最初工作正常。172.19.237.178是 WSL2 VM 的 IP。

只有一个问题。我将 sshd 设置为在 PC 启动时运行,并且每次启动机器时 WSL2 都有不同的 IP。有没有办法将 WSL2 配置为使用静态 IP?

编辑:有关确定 WSL 机器 IP 的变通方法,请参阅此问题

Art*_*ius 11

这个解决方案帮助我设置了我的wsl的静态IP,尝试:

在您的 Windows 主机上运行此命令:

netsh interface ip add address "vEthernet (WSL)" 192.168.99.1 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

在你的 wsl linux 机器上:

sudo ip addr add 192.168.99.2/24 broadcast 192.168.99.255 dev eth0 label eth0:1;
Run Code Online (Sandbox Code Playgroud)

但要在重新启动系统后保留此 IP,您需要在启动脚本中设置这些命令。

  • 太棒了。这解决了我的问题。谢谢。 (2认同)

Nic*_*ick 6

WSL2 机器的 IP 地址不能设为静态,但可以使用wsl hostname -I

基于此,我能够创建以下 powershell 脚本,该脚本将在我的 WSL 机器上启动 sshd 并将流量路由到它。

wsl.exe sudo /etc/init.d/ssh start
$wsl_ip = (wsl hostname -I).trim()
Write-Host "WSL Machine IP: ""$wsl_ip"""
netsh interface portproxy add v4tov4 listenport=22 connectport=22 connectaddress=$wsl_ip

Run Code Online (Sandbox Code Playgroud)

我通过 visudo 将以下内容添加到我的 sudoers 文件中,以避免需要密码来启动 sshd

%sudo ALL=(ALL) NOPASSWD: /etc/init.d/ssh
Run Code Online (Sandbox Code Playgroud)

最后,从管理 powershell 终端,我安排我的脚本在启动时运行

$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:15
Register-ScheduledJob -Trigger $trigger -FilePath C:\route_ssh_to_wsl.ps1 -Name RouteSSHtoWSL
Run Code Online (Sandbox Code Playgroud)