给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通相关的知识,希望对你有一定的参考价值。

我们知道wsl2是基于hyper-v的虚拟机,每次重新启动的时候,都会重新拉一个新的hyper-v虚拟机实例,然后虚拟网卡的IP是dhcp随机分配的,如果作为开发系统用,就会比较烦每次都要换一个IP。

有人提供了个脚本,他写了个bat脚本在windows里面把wsl拉起来,同时用root权限给wsl实例分配了一个固定的IP,然后在windows宿主分配了一个同网段的IP,实现了固定IP访问wsl。 这个脚本我研究了一下,在wsl拉起来的时候,可以顺便把需要启动的服务,比如docker拉起来,这样同时也解决了wsl不支持systemd服务自启动问题。

@echo off
setlocal enabledelayedexpansion

:: 重新拉起虚拟机,并且用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.0.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

右键点击脚本,”以管理员身份运行“,就能完成设置。这样,在WSL虚拟机ubuntu中,网卡eth0有两个IP,其中172.19.62.245用于和互联网通信,192.168.10.101用于和windows宿主机通信。

# ip a

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:9e:9a:db brd ff:ff:ff:ff:ff:ff
    inet 172.19.62.245/20 brd 172.19.63.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.10.101/24 brd 192.168.10.0 scope global eth0:1
       valid_lft forever preferred_lft forever

以上是关于给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 127.0.0.1 从 Windows 主机访问在 WSL2 中运行的服务?

WSL2 jupyter notebook 在windows主机打开

在 Linux 主机上运行的 Windows 10 来宾 VM 中运行 WSL2

如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?

WSL2 虚拟主机 IP 地址

windows 子系统wsl2 占用内存过大的解决方案