当前位置:   article > 正文

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

wsl 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
  • 1
  • 2

脚本内容如下:

# 为 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!"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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

chmod +x wsl2_auto_host_to_win.sh
  • 1

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

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

编辑用户目录下的.bashrc

cd ~
vim .bashrc
  • 1
  • 2

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

sudo /home/user/wsl2_auto_host_to_win.sh
  • 1

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

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

sudo apt-get install net-tools
  • 1

二、验证

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

结语

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

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

如有问题欢迎在留言评论区讨论
如果本文对你有帮助请点个赞,支持一下,感谢~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/234215?site
推荐阅读
相关标签
  

闽ICP备14008679号