首页 > 系统相关 >【WSL2】在Windows通过自定义域名访问wsl2中的服务

【WSL2】在Windows通过自定义域名访问wsl2中的服务

时间:2024-07-26 19:19:01浏览次数:13  
标签:domain 自定义 Windows win wsl hosts ip path wsl2

前言

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

具体教程

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

快捷键win+r,输入C:\Windows\System32\drivers\etc,或在该文件夹中找到hosts文件,右键选择“属性” ,选择“安全选项卡”;
点击“编辑”,找到当前用户组(一般是Users),为其添加完全控制权限,即勾选"完全控制",弹出的对话框确认,确定即可。

  2. 进入Windows Linux子系统(切换到root账户操作),在/opt/目录下新建脚本。

cd /opt/
vim win_wsl_domain.sh

  3. 粘贴脚本内容,其中wsl_domain为自定义域名,可以修改为想要的,保存。

#!/bin/bash
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"
#=================
# win_domain="win02"
# # 获取 win 的 ip
# win_ip=$(/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command "Get-NetIPAddress -AddressFamily IPv4 | Where-Object { \$_.InterfaceAlias -notmatch 'vEthernet' -and \$_.AddressState -eq 'Preferred' -and \$_.IPAddress -ne '127.0.0.1' } | Select-Object -ExpandProperty IPAddress -First 1")
# # 判断是否已存在 win 的域名,如果存在则修改,否则追加
# if grep -wq "$win_domain" $win_hosts_path; then
#     # 此处因为权限问题没有直接用 sed 修改 hosts 文件
#     win_hosts=$(sed -s "s/.* $win_domain/$win_ip $win_domain/g" $win_hosts_path)
#     echo "$win_hosts" > $win_hosts_path
#     echo "$(date '+%Y-%m-%d %H:%M:%S') 修改win-hosts[$win_domain] ==> $win_ip $win_domain"
# else
#     echo "$win_ip $win_domain" >> $win_hosts_path
#     echo "$(date '+%Y-%m-%d %H:%M:%S') 新增win-hosts[$win_domain] ==> $win_ip $win_domain"
# fi
#=================
wsl_domain="wslubuntu"
# 获取 wsl 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
# 判断是否已存在 win 的域名,如果存在则修改,否则追加
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
    echo "$(date '+%Y-%m-%d %H:%M:%S') 修改win-hosts[$wsl_domain] ==> $wsl_ip $wsl_domain"
else
    echo "$wsl_ip $wsl_domain" >> $win_hosts_path
    echo "$(date '+%Y-%m-%d %H:%M:%S') 新增win-hosts[$wsl_domain] ==> $wsl_ip $wsl_domain"
fi
echo "host change ok!"

  4. 把上述脚本设置成一个服务,方便启动时自动执行和日志的查看,粘贴内容并保存。

vim /etc/systemd/system/winhosts.service

粘贴内容:

[Unit]
Description=Run my script at startup

[Service]
ExecStart=bash /opt/win_wsl_domain.sh
Restart=on-failure

[Install]
WantedBy=default.target

  5. 加载服务并设置开机执行

sudo systemctl daemon-reload
sudo systemctl start winhosts.service
sudo systemctl enable winhosts.service

  6. 查看日志,日志正常即可

journalctl -u winhosts.service -f -o cat

  7. 后续操作回到宿主机windows系统打开命令行工具PowerShell,此时在宿主机已经可以使用自定义的域名(wslubuntu) ping通wsl2子系统了,如下:

   8. 最后做一个端口映射(此例为ssh服务的端口22,局域网内其它电脑直接ssh root@上述宿主机ip即可完成连接wsl2系统),方便局域网内其它主机访问到此电脑的wsl2子系统中的服务(其它)

添加端口映射:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=wslubuntu connectport=22
删除端口映射:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=22
查看所有的映射:
netsh interface portproxy show all

 

标签:domain,自定义,Windows,win,wsl,hosts,ip,path,wsl2
From: https://www.cnblogs.com/007sx/p/18326067

相关文章

  • Windows11重置后出现Windows.old文件夹无法删除,报错C:\Windows.old\WINDOWS\System
    问题:Windows11重置后出现Windows.old文件夹无法删除,报错C:\Windows.old\WINDOWS\System32\WDI-目录不是空的。网上的各种方法均不奏效:https://baike.baidu.com/item/windows.old/2431751?fr=ge_ala最终的解决方法:发现在WDI文件夹下是空的,于是在这个文件夹下面建立了......
  • Qt自定义控件
    开发系统:ubuntu22.04IDE:clion构建工具:cmakeQt自定义控件之插件形式插件形式是指将自定义控件按照一定的规则,生成动态库,放到Qtdesigner插件加载目录/usr/lib/x86_64-linux-gnu/qt5/plugins/designer下,Qtdesigner启动时加载,自定义控件就像内置控件一样可以直接拖拽。下面......
  • 鸿蒙next开发学习:@AnimatableExtend装饰器-自定义可动画属性
    @AnimatableExtend装饰器用于自定义可动画的属性方法,在这个属性方法中修改组件不可动画的属性。在动画执行过程时,通过逐帧回调函数修改不可动画属性值,让不可动画属性也能实现动画效果。也可通过逐帧回调函数每帧修改可动画属性的值,实现逐帧布局的效果。可动画属性:如果一个属......
  • Windows窗口函数常规
    1、wWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPWSTRlpCmdLine,intnCmdShow)宽字符版本主函数hInstance(HINSTANCE):这是一个句柄,指向当前应用程序的实例。当程序启动时,系统会为该应用程序创建一个实例,并且这个句柄会被用来标识它。此句柄可以......
  • 动态数据增强的艺术:Mojo模型的自定义应用
    动态数据增强的艺术:Mojo模型的自定义应用在机器学习和深度学习领域,数据增强是提升模型泛化能力的重要手段。Mojo模型,作为深度学习模型的一种封装形式,通常指的是通过训练得到的模型参数的集合,它能够被用于快速推理。但是,Mojo模型本身是否支持在推理阶段进行自定义的数据增强......
  • 打造个性化文件操作:Perl中的自定义文件句柄全攻略
    打造个性化文件操作:Perl中的自定义文件句柄全攻略在Perl编程中,文件句柄是处理文件的基本工具。Perl提供了丰富的内置函数来实现文件的打开、读取、写入和关闭等操作。然而,在某些情况下,我们可能需要对文件操作进行更细粒度的控制,或者实现一些特定的功能,比如文件缓冲区的管理......
  • 280:vue+openlayers 自定义上下左右移动键
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第280个示例文章目录一......
  • 如何在 Windows 10 中重置忘记的密码而不丢失数据
    面对电脑开机密码忘记的尴尬情况,许多用户可能会感到手足无措,尤其是对于那些依赖电脑进行日常工作和学习的人来说,这无疑是一个急需解决的难题。幸运的是,根据不同的操作系统(如Windows、macOS等),存在几种相对安全且有效的方法来重置或绕过开机密码,从而恢复对电脑的访问权限。以下,......
  • windows中MySQL迁移数据存放盘符位置
    由于刚开始安装mysq时都选择了默认安装,数据存放在了c盘,后面数据量过大c盘不堪重负,所以迁移数据到D盘windows中MySQL迁移数据存放盘符位置参考:https://blog.csdn.net/ZYX121799/article/details/136474869查看MySQL的数据存放位置showglobalvariableslike"%datadir%"......
  • 如何在 Windows 上配置 Java 开发环境
    配置Java开发环境是Java开发者的基础任务之一。本文将指导你如何在Windows操作系统上安装Java开发工具包(JDK)并设置相应的环境变量,确保你的开发环境能够正确编译和运行Java程序。第一步:下载和安装JDK访问JDK下载网站:前往Oracle官方网站或其他JDK提供商......