WSL2-CentOS7固定IP

WSL2-CentOS7固定IP

WSL2 采用 Hyper-V 的 Internal Virtual Switch,这个虚拟交换机本身是可以设置静态 IP 地址的,但是 WSL2 却自作聪明,在每次全新启动的时候将网络配置恢复成 DHCP,这就导致WSL2每次全新启动后的IP都不固定,如果需要一个固定的IP,需要做一些设置。

备注:如果使用localhost方式可正常访问的话,可不做此固定IP配置;我是在win11中使用IDEA配置远程访问docker地址localhost:2375时无法连接,才进行配置的;实测在win10中可正常连接。

WSL2-CentOS7固定IP

前置设置

因为WSL2每次全新启动的时候将网络配置恢复成DHCP;重新生成网关和IP ;为了使我们的自定义IP能生效;我们需要对WSL2进行配置,阻止它每次重新配置网关;如果不进行此配置,即使自定义了IP,在WSL2启动后一段时间,自定义IP会被自动生成的IP进行覆盖而无法生效。配置方法如下:

进入WSL2,使用命令查看: cat /etc/resolv.conf

WSL2-CentOS7固定IP

如图所示,我们可以看到,配置文件注释说明得很清楚:这个文件为WSL自动生成;如果不想生成这个文件,需要添加配置文件。

因此,我们按注释的意思,使用命令新建配置文件: vim /etc/wsl.conf ;配置文件内容为:

[network]
generateResolvConf = false

添加此配置后,不再自动生成此文件。

[En]

After you add this configuration, this file is no longer automatically generated.

由于原来的/etc/resolv.conf是可能是一个软链接(链接到/run/resolvconf/resolv.conf);不管是真实文件还是软链接,我们都需要删除它,为后面脚本进行自定义DNS做准备

执行删除命令: rm /etc/resolv.conf

至此,WSL2固定IP的前置设置完成

创建批处理文件设置静态IP

完成前面的设置后,我们需要在windows创建一个 set_static_ip.bat 批处理脚本进行IP设置,脚本内容如下:

@echo off
rem 以管理员身份运行
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

rem 需要设置的子系统名称
set linux=CentOS7
rem 设置网段
set localnet=192.168.86
rem 设置子系统的ip
set ip=%localnet%.2

wsl -d %linux% -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d %linux% -u root ip addr add %ip%/24 broadcast %localnet%.255 dev eth0
wsl -d %linux% -u root ip route add 0.0.0.0/0 via %localnet%.1 dev eth0
wsl -d CentOS7 -u root echo "nameserver %localnet%.1" ^> /etc/resolv.conf

powershell -c "Get-NetAdapter -IncludeHidden -Name 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress  %localnet%.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix %localnet%.0/24"
exit

脚本中的子系统名称和网段可根据实际情况修改;双击执行此脚本可完成WSL2的静态IP设置

开机自动设置

由于每次重新启动Windows系统都需要执行一次这个脚本来设置静态IP ;为了方便,我们需要一些设置来实现开机自动执行脚本;有两种方式,可根据需要选择:

  • 方式一: 把 set_static_ip.bat 批处理脚本放到windows开机启动目录下 C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 实现开机自动执行;需要注意的是,请把路径中的 “用户名” 替换为实际的用户名
  • 方式二: 在WSL2中使用命令编辑 vim ~/.bashrc;在最后添加如下内容:
if [ hostname -I != 192.168.8.2 ]; then
     cmd.exe /c "D:\set_static_ip.bat" 1>nul
fi

注意:此方式实现是的在WSL2启动时设置IP,且只适用于从windows应用商店下载安装的WSL2分发版本,因为只有是从windows应用商店下载安装的WSL2分发才可能调用cmd.exe;而其他方式(例如从github下载)安装的WSL2分发则可能无法直接调用cmd.exe

Host映射

在windows的host文件(C:\Windows\System32\drivers\etc\hosts)添加如下内容: 192.168.86.2 windows.wsl

在WSL2的host文件添加如下内容:(/etc/hosts)添加如下内容: 192.168.86.1 windows.local

添加Host映射后,可实现windows和wsl互ping及互相访问的能力;不添加映射,根据IP也可能互相访问;只是映射后,主机名更容易记住。

Original: https://www.cnblogs.com/yuque/p/16283730.html
Author: yuque
Title: WSL2-CentOS7固定IP

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523583/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球