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每次全新启动的时候将网络配置恢复成DHCP;重新生成网关和IP ;为了使我们的自定义IP能生效;我们需要对WSL2进行配置,阻止它每次重新配置网关;如果不进行此配置,即使自定义了IP,在WSL2启动后一段时间,自定义IP会被自动生成的IP进行覆盖而无法生效。配置方法如下:
进入WSL2,使用命令查看:cat /etc/resolv.conf

如图所示,我们可以看到,配置文件注释说明得很清楚:这个文件为WSL自动生成;如果不想生成这个文件,需要添加配置文件。
因此,我们按注释的意思,使用命令新建配置文件:vim /etc/wsl.conf ;配置文件内容为:
[network]
generateResolvConf = false
增加此配置后,则不会再自动生成此文件。
由于原来的/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也可能互相访问;只是映射后,主机名更容易记住。
WSL2-CentOS7固定IP的更多相关文章
- VMware Workstation安装CentOs7固定ip地址
今天发现之前hypervisor配置的CentOs7连接不了了,该死的加密系统和杀毒软件又搞事情了,于是决定试下VMware虚拟机,下载安装后,发现可以连上CentOS7界面,很开心,于是决定把之前的 ...
- virtualbox下给centos7固定ip
在virtualbox桥接连接模式下,固定虚拟机的ip. 修改/etc/sysconfig/network-scripts/ifcfg-ens33文件 添加如下信息: 保存 重启网卡: sudo se ...
- centOS7固定IP
接续安装完成centOS虚拟机后,重启完成后,会出现如下的界面: 这里,我们使用root帐号和已配置的root密码进行登陆,登陆完成后,输入如下命令,运行结果如下图: dhclient 通过上述命令, ...
- CentOS7 固定ip
1. 进入/etc/ network-scripts/ 下ifcfg-eno16777736(文件名可能不一样,单前缀一般是ifcfg-eno) 2. vi打开 编辑 修改bootproro=&qu ...
- Centos固定IP
centos7 联网 在虚拟机中以最小化方式安装centos7,后无法上网,因为centos7默认网卡未激活. 而且在sbin目录中没有ifconfig文件,这是因为centos7已经不使用 ifco ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网 ...
- 给虚拟机中的CentOS7配置固定ip
在虚拟机中安装完了CentOS7之后,使用了DHCP来获取ip,vmware的网络连接使用了NAT模式.但是在把Linux设置为固定ip地址后,虚拟机里的linux可以ping通全网段的ip地址,但是 ...
- CentOS7 设置局域网固定IP
题记: 在局域网内PC通常都是采用自动获取IP的方式从路由器拿到局域网IP的,每次PC启动后分配到的局域网IP都不一定相同.但是出于某些特殊的需求,例如要在局域网内做端口映射,需要将PC设置成使用固定 ...
- VirtualBox中CentOS7.2 网络配置(固定IP+联网)
一.前言 用虚拟机装Linux系统时,经常会出现一些问题.比如:从主机到虚拟机之间网络不通:虚拟机中无法联网:虚拟机中的IP地址不固定.为了解决这些问题,我曾花了不少时间.在此,记下填坑方法. 二.环 ...
- centos7虚拟机克隆后设置固定IP
虚拟机centos7克隆一份出来之后,新centos7更改了固定IP,可是不生效.重启网卡时报错: network.service: control process exited, code=exit ...
随机推荐
- 前端网络安全——前端CSRF
CSRF:Cross Site Request Forgy(跨站请求伪造) 用户打开另外一个网站,可以对本网站进行操作或攻击.容易产生传播蠕虫. CSRF攻击原理: 1.用户先登录A网站 2.A网站确 ...
- java继承当中都有一些什么样的构造函数规则?
6.继承当中的构造函数规则 马克-to-win:继承当中的构造函数规则貌似复杂: 记住我给你的以下几条口诀, 你高枕无忧.1)如果你在某类中写了带参构造函数,系统就不会再为你在那类中自动添加无参构 ...
- SQList基础+ListView基本使用
今日所学: SQList基础语法 SDList下载地址 SQLite Download Page SQList安装教程SQLite的安装与基本操作 - 极客开发者-博客 ListView用法 没遇到什 ...
- MySQL中 tinyint、bigint、bit、text、decimal、year、date、time、datetime、timestamp等对应Java中什么类型
MySQL中字段名称对应的Java类型 MySQL字段名 Java数据类型 varchar String text String bigint Long(已经有长度了,在mysql建表中的length ...
- 反射常用API以及内省机制(代码)
学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...
- Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found 解决办法
问题 每次vs重启都提示安装证书,即使执行dotnet dev-certs https --clean,dotnet dev-certs https -t然后重启vs也不行. 环境 win10, vs ...
- Java报错: A component required a bean of type 'com.sirifeng.testmybatis.mapper.BookMapper' that could not be found.
在学习Spring-boot-mybatis时,报错A component required a bean of type 'com.sirifeng.testmybatis.mapper.BookM ...
- 使用 Jenkins 进行持续集成与发布流程图
应用构建和发布流程说明: 用户向 Gitlab 提交代码,代码中必须包含 Dockerfile 将代码提交到远程仓库 用户在发布应用时需要填写 git 仓库地址和分支.服务类型.服务名称.资源数量.实 ...
- Java-NIO之Channel(通道)
1:Channel是什么 通道表示与实体的开放连接,例如硬件设备.文件.网络套接字或能够执行一个或多个不同 I/O 操作(例如读取或写入)的程序组件. 1.1:Channel与Stream的对比 St ...
- 新手小白入门C语言第四章:变量与常量
C 变量 变量其实只不过是程序可操作的存储区的名称. C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和 ...