【WSL2】在Windows和wsl2中互相网络访问的优雅做法,不用再手动写死IP了

这篇具有很好参考价值的文章主要介绍了【WSL2】在Windows和wsl2中互相网络访问的优雅做法,不用再手动写死IP了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 目前在windows与windows的wsl系统之间,还无法通过相对较固定的方式来互相网络访问,通常需要使用各自的ip来互相访问,而ip可能不是很直观并且可能会有变更,当前教程解决了这个问题,通过hosts映射的方式打通wsl与windows宿主机之间的访问。
  • 脚本的原理:在linux启动时或shell加载时,执行一次修改windows和linux上的hosts文件的脚本。为windows添加wsl的host以及为wsl添加windows的host,这样就能做到互相映射。

注:
当前教程演示使用的wsl2环境为linux ubuntu,故在脚本中使用“ubuntu”来映射wsl2子系统的实际ip,该名称可以根据需要自行定义。

一、具体步骤

  1. 给予当前windows用户修改hosts文件的权限

快捷键win+r,输入C:\Windows\System32\drivers\etc,或在该文件夹中找到hosts文件,右键选择“属性” ,选择“安全选项卡”;

点击“编辑”,找到当前用户组(一般是Users),为其添加完全控制权限,即勾选"完全控制",弹出的对话框确认,确定即可。

  1. 编辑脚本

启动wsl2子系统,在命令行中输入:

cd ~
vim wsl2_auto_host_to_win.sh

脚本内容如下:

# 为 win 设置 wsl host
# win hosts 文件路径
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"

# !!!为 wsl2 设置的域名,可以改成自己习惯的名称,后面使用该名称来访问资源
wsl_domain="ubuntu"

# 获取 wsl2 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
# 判断是否已存在 wsl2 的域名,如果存在则修改,否则追加
if grep -wq "$wsl_domain" $win_hosts_path
then
    # 此处因为权限问题没有直接用 sed 修改 hosts 文件
    win_hosts=$(sed -s "s/.* $wsl_domain/$wsl_ip $wsl_domain/g" $win_hosts_path)
    echo "$win_hosts" > $win_hosts_path
else
    echo "$wsl_ip $wsl_domain" >> $win_hosts_path
fi

# 为 wsl 设置 win host
wsl_hosts_path="/etc/hosts"

# 为 windows主机 设置的域名,可以改成自己习惯的名称,后面使用该名称来访问资源
win_domain="win"
win_ip=$(cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}')
if grep -wq "$win_domain" $wsl_hosts_path
then
    wsl_hosts=$(sed -s "s/.* $win_domain/$win_ip $win_domain/g" $wsl_hosts_path)
    echo $wsl_hosts > $wsl_hosts_path
else
    echo "$win_ip $win_domain" >> $wsl_hosts_path
fi
echo "host change ok!"

保存脚本,给予脚本可执行权限

chmod +x wsl2_auto_host_to_win.sh

注意:
如果脚本是在windows编辑过的,可能会有字符转义的问题,需要通过dos2unix转义字符后才可以执行。
安装dos2unix(可选):

# 如果没有更新过软件列表则需要更新
sudo apt-get update
sudo apt-get install dos2unix
  1. 设置脚本自启

编辑用户目录下的.bashrc

cd ~
vim .bashrc

在该文件末尾添加以下内容(具体脚本位置请替换成你放置脚本的实际位置)

sudo /home/user/wsl2_auto_host_to_win.sh

保存后退出shell界面,当再进入wsl2子系统时,输入当前账户密码,就会自动执行一次脚本,也就完成了windows和wsl2中hosts文件的修改。

如果提示没有ifconfig需要安装:

sudo apt-get install net-tools

二、验证

在windows上打开cmd,执行:ping ubuntu
以及在wsl2子系统中执行:ping win
即可验证是否已经可以互相访问。

结语

当前脚本优雅且轻松的实现了在wsl2和宿主机windows之间互相通过固定domain访问的方式,可以为日常开发工作带来一定程度的便捷性。

wsl中获取windows ip参考:https://learn.microsoft.com/en-us/windows/wsl/networking

如有问题欢迎在留言评论区讨论
如果本文对你有帮助请点个赞,支持一下,感谢~文章来源地址https://www.toymoban.com/news/detail-854636.html

到了这里,关于【WSL2】在Windows和wsl2中互相网络访问的优雅做法,不用再手动写死IP了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WSL2配置网络代理

    注意 :本文参考自文章:WSL2配置代理,是对原文的补充,使其适用于河对岸云服务代理。 请注意:本文的WSL2代理配置, 需要Windows的代理软件已经能够正常工作 。 以河对岸云服务为例,购买相关服务。开启软件之后,右键 高级设置 ,在 Core: basic settings 页面中,可以查看

    2024年02月02日
    浏览(41)
  • Windows+WSL2+SSH实现远程办公

    在这里分享一下我如何实现用MacBook连接主机服务器远程办公,我目前有一台主机在寝室,但是在教室或者图书馆我手边是一台MacBook便不能跑一些算力较大的项目,这时我只需要远程打开我的主机服务器,然后用MacBook的终端或者vs code等连接到我的主机服务器遍可以进行一些大

    2024年01月21日
    浏览(37)
  • windows10安装wsl2,centos内核

    检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】【程序】【程序和功能】【启用或关闭Windows功能】 二、下载Linux内核更新包 下载 双击安装 三、设置WSL2为默认版本 四、下载安

    2024年02月12日
    浏览(43)
  • windows10 安装WSL2, Ubuntu,docker

    阅读时长:10分钟 本文内容: window上安装ubuntu虚拟机,并在虚拟机中安装docker,通过docker部署数字人模型,通过vscode链接到虚拟机进行开发调试.调试完成后,直接部署在云端即可. WSL2(Windows Subsystem for Linux)是windows系统默认支持的功能,也就是Windows Linux子系统,类似于一台

    2024年02月12日
    浏览(59)
  • wsl2 ubuntu ip 自动同步到windows端的vscode remote ssh(wsl2 ubuntu 静态ip 固定ip)

    ​ wsl2 中linux版本:ubuntu ​ windows版本: win10/win11 最近装了wsl2,使用vscode远程连接wsl2时遇到了如下问题: 1、wsl2的ip无法固定 2、wsl2的ssh服务不能自动开启。 尝试了网上许多方法,都不能解决,于是决定自己写python脚本解决。 如下方案可以自动将wsl2的ip同步到vscode remote s

    2024年02月03日
    浏览(59)
  • Ubuntu20.4 WSL2 无法访问github终极解决方案

    sudo rm /etc/resolv.conf sudo bash -c \\\'echo \\\"nameserver 8.8.8.8\\\" /etc/resolv.conf\\\' sudo bash -c \\\'echo \\\"[network]\\\" /etc/wsl.conf\\\' sudo bash -c \\\'echo \\\"generateResolvConf = false\\\" /etc/wsl.conf\\\'      

    2024年02月07日
    浏览(39)
  • WSL2和Windows之间通信实现【以Unity为例】

    WSL2可以视为一个独立的虚拟机,具有自己独立的IP地址,通过虚拟路由器与Windows连接,因此WSL2不能直接访问到Windows的主机地址,需要动态获取。 默认情况下Windows的防火墙会阻止WSL2中应用对Windows的网络访问(see: Add \\\"allow\\\" rule to Windows firewall for WSL2 network · Issue #4585 · microsof

    2024年02月12日
    浏览(47)
  • windows11使用wsl2环境安装svox2

    1. wsl --install -d ubuntu-22.04 输入用户名和密码 2. 用以下命令将系统迁移到d盘: wsl --export ubuntu-22.04 d:ubuntuwslubuntu22.04.tar(导出) wsl --import ubuntu d:ubuntuwsl d:ubuntuwslubuntu22.04.tar(导入) wsl --unregister ubuntu-22.04(删除原系统) wsl进入新系统 3.安装miniconda. 4.安装svox2 下载:sxyu/

    2024年02月06日
    浏览(51)
  • windows下的wsl2如何进行docker数据卷挂载

     这是数据卷挂载命令 docker run -it -v /宿主机绝对路径目录: /容器内目录 镜像名  在Linux中我们可以直接使用该命令进行挂载,那在windows如何把我们c盘d盘下的目录挂载到容器呢,其实只要在路径前面加上/mnt就好了,下面来演示一下 首先拉取一个ubuntu镜像 docker pull ubuntu 这是

    2023年04月11日
    浏览(39)
  • windows10(家庭版)和windows11(家庭版)开启WSL2

    WSL 是什么? WSL的全称为Windows Subsystem for Linux。翻译成中文的意思就是“适用于Windows的Linux子系统”。WSL是一个在Windows 1011上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。 注:如果是windows10,需确保 Windows 10 版本号为 22H2 或更高,操作系统内部版本为 19045.2311 或

    2023年04月18日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包