< >
Home » Windows系统入门教程 » Windows系统入门教程-通过桥接实现WSL2与主机之间通讯

Windows系统入门教程-通过桥接实现WSL2与主机之间通讯

Windows系统入门教程-通过桥接实现WSL2与主机之间通讯

说明:

  • 介绍如何通过桥接实现WSL2与主机之间通讯
  • 主机的网卡名vEthernet (WSL)IP为172.27.xxx.xxx
  • WSL2的网卡名eth0的IP为172.27.yyy.xxx
  • 两个系统之间的ip是不在同一个网段里,导致不能正常互相通讯
  • 通过桥接实现主机和WSL2系统之间的通信并可以上网

准备工作:

    1. 开启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系统之间的通信并可以上网

    1. 开启hyper-v
  • 进入控制面板—程序—启用或关闭windows功能,勾选hyper-v,确认后重启电脑

    1. 新建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

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: windows系统入门教程