设置wsl子系统静态IP

1,823 阅读3分钟

方法一(我没成功)

1、新建wsl-config.bat,内容如下:

::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
wsl -d Ubuntu(这里换成你自己的名称) -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0

2、查看wsl系统名称

wsl -l -v

image.png

3、将.bat文件(名称随便)放置在不会被删除的地方,我的放在了hosts文件所在目录C:\Windows\System32\drivers\etc

image.png

4、打开C:\Users\jenso\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\目录,在此目录下新建快捷方式,(目的是设置开启启动)

image.png

5、进入子系统命令窗口,修改hosts文件内容,最下边一行是新增的内容。

image.png

6、由于WSL2默认/etc/hosts每次重启会自动改变,需要添加/etc/wsl.conf,内容如下:

[network]
generateHosts = false

7、最后重启电脑验证

方式二,需要提前安装docker(我这个成功了)

  • 1、新建脚本wsl-config.bat,内容如下:
@echo off
setlocal enabledelayedexpansion

::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务
wsl -u root service docker start | findstr "Starting Docker" > nul
if !errorlevel! equ 0 (
    echo docker start success
    :: 设置wsl2虚拟机ubuntu的ip
    wsl -u root ip addr | findstr "192.168.10.101" > nul
    if !errorlevel! equ 0 (
        echo wsl ip has set
    ) else (
        :: 没有的话给安排上
        wsl -u root ip addr add 192.168.10.101/24 broadcast 192.168.10.0 dev eth0 label eth0:1
        echo set wsl ip success: 192.168.10.101
    )


    :: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
    ipconfig | findstr "192.168.10.102" > nul
    if !errorlevel! equ 0 (
        echo windows ip has set
    ) else (
        netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
        echo set windows ip success: 192.168.10.102
    )
)
pause

2、将.bat文件(名称随便)放置在不会被删除的地方,我的放在了hosts文件所在目录C:\Windows\System32\drivers\etc

image.png

3、打开启动菜单目录,我的是在C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\,在此目录下新建快捷方式,指向脚本所在目录。(目的是设置开启启动) image.png 4、由于WSL2默认/etc/hosts每次重启会自动改变,需要添加/etc/wsl.conf,内容如下:

[network] generateHosts = false

5、最后重启电脑验证

方法三:(和方法二相同,唯一区别是不需要安装docker),脚本内容如下

  • 说明:该脚本能够固定ip,同时能够上网,能够启动ssh。
    将脚本放入启动文件夹,使得Windows系统开机会自动设置wsl固定ip,开启ssh。
  • wsl.bat 文件,内容如下,运行该脚本后 UbuntuIp: 192.168.10.101
@echo off
::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
setlocal enabledelayedexpansion
:: 这里是先停止子系统,可以在cmd中通过wls -l -v查看名称,我的子系统名称为Ubuntu
wsl --shutdown ubuntu
:: 重新拉起虚拟机,并且用root身份,启动ssh服务
wsl -u root service ssh start
if !errorlevel! equ 0 (
  :: 设置wsl2虚拟机ubuntu的ip
  wsl -u root ip addr | findstr "192.168.10.101" > nul
  if !errorlevel! equ 0 (
    echo wsl ip has set: 192.168.10.101
  ) else (
    :: 没有的话给安排上
    wsl -u root ip addr add 192.168.10.101/16 broadcast 192.168.10.0 dev eth0 label eth0:1
    echo set wsl ip success: 192.168.10.101
  )

  :: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
  ipconfig | findstr "192.168.10.102" > nul
  if !errorlevel! equ 0 (
    echo windows ip has set: 192.168.10.102
  ) else (
    :: 没有的话给安排上
    netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
    echo set windows ip success: 192.168.10.102
  )
)
ping 192.168.10.101
pause

如果报错Unit sshd.service could not be found.可检查ssh是否安装,未安装则先安装ssh使用以下命令安装:

sudo apt-get install openssh-server # 安装

sudo service sshd start # 启动

补充说明:使用方法三后没办法保持wsl一直在后台运行,需要借助以下方法实现

  1. WIN+R 运行 shell:startup 打开启动目录
  2. 在此目录中创建文件 wsl-startup.vbs
  3. 在 wsl-startup.vbs 中填充如下内容,Ununtu需替换为你使用的发行版名称。
方式一:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Ununtu", 0

方式二:
' 设置wsl的启动方式:
' -d Ubuntu 指定wsl的版本名称,可通过wsl -l -v查看版本名称
' -u root 指定以root用户启动
' vbhide 在后台保持运行,不显示终端窗口
cmd="wsl -d Ubuntu -u root"
CreateObject("wscript.shell").run cmd,vbhide

参考链接:zhuanlan.zhihu.com/p/612755941 blog.csdn.net/qq_19922839…