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 ...
随机推荐
- js技术之循环for
案例:把所有单词以空格为分割并将首字母转为大写 <!DOCTYPE html><html lang="en"><head> <meta c ...
- 聊一聊Java8 Optional,让你的代码更加优雅
码农在囧途 随着时间的推移,曾经我们觉得重要的东西,可能在今天看来是如此的浅薄和无知,同理,今天我们放不下,想不开,觉得重要的东西,多年后我们可能也会觉得也就那样,所以,今天的的所有烦恼,忧愁,想不开 ...
- CSS详细解读定位
一 前言 CSS定位是CSS布局只能够重要的一环.本篇文章带你解读定位属性,可以让你更加深入的理解定位带来的一些特性,熟练使用CSS布局. 二 正文 1.文档流布局的概念 将窗体自上而下分成一行行, ...
- 【转载】10个Web3D可视化精彩案例
1.化学元素周期表 六种排列方式,炫酷动画效果,TWaver 3D轻松实现. 演示地址:http://demo.servasoft.com/che... 2.DNA螺旋图 DNA3D模型,包含几千个球 ...
- 两个echarts地图联动高亮区域
项目要求左右两张地图能够在鼠标悬浮的时候高亮部分联动,曾尝试了connect不好使,所以自己写了这段代码.代码思路为: 鼠标移入地图时,另一侧的地图根据鼠标悬浮获取到的区域name使该区域高亮: 鼠标 ...
- 设计模式之简单工厂SimpleFactory的实现
internal interface Chart { void Display(); } internal class LineChart : Chart { public LineChart() { ...
- Android Studio 异常以及解决方案
1. Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVER ...
- PAT B1081 检查密码
题目描述: 本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能.该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母.数字和小数点 .,还必须既有字母也有数字. 输入格式: ...
- 微信小程序插件组件-Taro UI
微信小程序组件使用以下官网查看 ↓ ↓ ↓ https://taro-ui.jd.com/#/docs/fab
- 关于#pragma 和 _pragma
首先要明确 #pragma 和_Pragma 是什么 这两个都是出自于c/c++ 的 ,其中#pragma 是预处理指令(preProcess directive ) ,#pragma是用来向编译器传 ...