Windows系统入门教程-通过桥接实现WSL2与主机之间通讯
Windows系统入门教程-通过桥接实现WSL2与主机之间通讯
说明:
- 介绍如何通过桥接实现WSL2与主机之间通讯
- 主机的网卡名vEthernet (WSL)IP为172.27.xxx.xxx
- WSL2的网卡名eth0的IP为172.27.yyy.xxx
- 两个系统之间的ip是不在同一个网段里,导致不能正常互相通讯
- 通过桥接实现主机和WSL2系统之间的通信并可以上网
准备工作:
- 开启hyper-v
- 进入控制面板—程序—启用或关闭windows功能,勾选hyper-v,确认后重启电脑
- 效果如图:
- 2.要准备几个参数
- 2.1先查看局域网IP地址范围
- 在powershell下输入ipconfig查看,本机的ip地址
- 效果如下:
以太网适配器 vEthernet (WSL) 2:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::291d:2048:dc5c:a5%59
IPv4 地址 . . . . . . . . . . . . : 192.168.1.105
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
- 可以了解到本机的IP是192.168.1.105,网关是192.168.1.1,子网掩码是192.168.1.255
- 2.2 设置WSL的IP,取与192.168.1.105同网段的ip,比如192.168.1.110
- 2.3 查看本机的用户名,打开powershell之后,会显示如下:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Users\ROSEASY-WIN10>
- 从PS C:\Users\ROSEASY-WIN10>一行可以看到用户名为ROSEASY-WIN10
- 3.避免没有权限执行脚本,管理员身份启动powershell,运行如下命令
Set-ExecutionPolicy Unrestricted -Force
Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false -Force
自动安装步骤:
- 1.利用RCM工具实现自动添加
- 进入WSL系统中,安装RCM工具
# 安装rcm
curl -k https://www.ncnynl.com/rcm.sh | bash -
- 2.执行脚本安装脚本
rcm common_wsl2 install_wsl2_bridge
- 效果如下
+---------------------------------------------------+
| |
| ============================================= |
| |
| 欢迎使用ROS命令管理器(RCM)命令行版 |
| |
| ============================================= |
| 作者:ncnynl |
| 邮箱:1043931@qq.com |
| 网站:https://ncnynl.com |
| 更新:2022-11-18 |
| 创客智造B群:926779095 |
| 创客智造C群:937347681 |
| 创客智造D群:562093920 |
+---------------------------------------------------+
#####################################################
Alternative scripts:
#####################################################
common_wsl2:
ID:48 - install_wsl2_bridge.sh
------------------------------------------ 用于生成WSL2系统桥接脚本,WSL2的IP配置脚本和取消桥接脚本的脚本
└ Whether to execute the script? [Y/n]y
Build wsl-bridge ......
Please input your windows username(Like: ROSEASY-WIN10) :ROSEASY-WIN10
Your windows username is: ROSEASY-WIN10
Your username folder is: /mnt/c/Users/ROSEASY-WIN10
Please input your WSL gateway (Like: 192.168.1.1):192.168.1.1
Your WSL gateway is: 192.168.1.1
Please input your WSL netmask (Like: 192.168.1.255):192.168.1.255
Your WSL netmask is: 192.168.1.255
Please input your WSL IP (Like: 192.168.1.110):192.168.1.110
Your WSL IP is: 192.168.1.110
Please input your windows netadapter name, Check with Get-NetAdapter from powershell (Like: Wifi/WLAN ):WLAN 2
Your windows netadapter is: WLAN 2
Build set_eth0.sh.......
Copy template to /root/set_eth0.sh
Replace variable to ~/set_eth0.sh
Build wsl-bridge-on.ps1..........
Copy template to ~/wsl-bridge-on.ps1
Replace variable to ~/wsl-bridge-on.ps1
Build wsl-bridge-off.ps1..........
Copy template to ~/wsl-bridge-off.ps1
- 如上,分别输入本机用户名,网关,WSL的IP,子网掩码
- 分别生成set_eth0.sh,wsl-bridge-on.ps1,wsl-bridge-off.ps1三个文件
- set_eth0.sh位于wsl终端的根目录
- wsl-bridge-on.ps1,wsl-bridge-off.ps1位于Powershell终端的根目录 PS C:\Users\ROSEASY-WIN10>
测试:
- 1.启动桥接
- 管理员身份启动windows ternimal preview/终端预览,默认进入终端,执行命令
.\wsl-bridge-on.ps1
- 在主机终端pingWSL:
ping 192.168.1.110
- 在主机终端ping外部网站:
ping baidu.com
- 在WSL端ping网关:
ping 192.168.1.1
- 2.取消桥接
- 管理员身份启动windows ternimal preview/终端预览,默认进入终端,执行命令
.\wsl-bridge-off.ps1
分步安装步骤:
主机的网卡名vEthernet (WSL)IP为172.27.xxx.xxx
WSL2的网卡名eth0的IP为172.27.yyy.xxx
两个系统之间的ip是不在同一个网段里,导致不能正常互相通讯
通过桥接实现主机和WSL2系统之间的通信并可以上网
- 开启hyper-v
进入控制面板—程序—启用或关闭windows功能,勾选hyper-v,确认后重启电脑
- 新建PS1脚本wsl-bridge-on.ps1和wsl-bridge-off.ps1,实现创建桥接和取消,并分配IP给WSL,实现联网
管理员身份启动windows ternimal preview/终端预览,默认进入终端,执行命令wsl,进入WSL2目录下
PS C:\Users\ROSEASY-WIN10> wsl
root@DESKTOP-5VI62BV:/mnt/c/Users/ROSEASY-WIN10#
- ROSEASY-WIN10是本机的用户名,默认进入用户根目录
- 执行wsl后,所在位置也是win系统的用户根目录
- 新建文件wsl-bridge-on.ps1
vim wsl-bridge-on.ps1
- 内容如下:
if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
Exit;
}
}
echo "Checking wsl status..."
wsl --cd ~ -e ls
echo "Geting netadapter..."
Get-NetAdapter
echo "Build a WSL Bridge for WLAN 2 ..."
Set-VMSwitch WSL -NetAdapterName "WLAN 2"
echo "Editing WSL Network configuration..."
wsl --cd ~ -e sh -c ./set_eth0.sh
echo "All done!!"
pause
- 上面的脚本需要调用set_eth0.sh,用于给WSL2设置IP,路由和DNS
- 3.新建set_eth0.sh
- 需要先进入WSL的根目录执行
root@DESKTOP-5VI62BV:/mnt/c/Users/ROSEASY-WIN10# cd
root@DESKTOP-5VI62BV:~#
- 创建set_eth0.sh
vim set_eth0.sh
- 内容如下:
#!/bin/bash
new_ip=192.168.1.110 #设置WSL2的IP地址,根据本机的局域网IP自定一个
brd=192.168.1.255 #设置子网掩码范围
gateway=192.168.1.1 #设置局域网的网关
nameserver=192.168.1.1 #设置使用DNS,同局域网网关即可
net_dev=eth0 #设置WSL2的网卡,默认是eth0
sudo -S ip addr del $(ip addr show $net_dev | grep 'inet\b' | awk '{print $2}' | head -n 1) dev $net_dev
sudo ip addr add $new_ip/24 broadcast $brd dev $net_dev
sudo ip route add 0.0.0.0/0 via $gateway dev $net_dev
echo "nameserver $nameserver" | tee /etc/resolv.conf
- 4.继续再新建wsl-bridge-off.ps1, 取消桥接
- 回到跟wsl-bridge-on.ps1的同一个目录下,即本机用户的根目录下
root@DESKTOP-5VI62BV:~#cd /mnt/c/Users/ROSEASY-WIN10
root@DESKTOP-5VI62BV:/mnt/c/Users/ROSEASY-WIN10#
- ROSEASY-WIN10是你本机的用户名
- 新建文件wsl-bridge-off.ps1
vim wsl-bridge-off.ps1
- 内容如下:
if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
Exit;
}
}
echo "Delete WSL Bridge..."
Set-VMSwitch WSL -SwitchType Internal
echo "Restart WSL"
wsl --shutdown
wsl --cd ~ -e ls
echo "All Done!"
pause
测试:
- 1.启动桥接
- 管理员身份启动windows ternimal preview/终端预览,默认进入终端,执行命令
.\wsl-bridge-on.ps1
- 在主机终端pingWSL:
ping 192.168.1.110
- 在主机终端ping外部网站:
ping baidu.com
- 在WSL端ping网关:
ping 192.168.1.1
- 2.取消桥接
- 管理员身份启动windows ternimal preview/终端预览,默认进入终端,执行命令
.\wsl-bridge-off.ps1
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号