经验分享—— WIN10 WSL2 网络桥接

[复制链接]
查看1571 | 回复10 | 2023-11-11 12:26:00 | 显示全部楼层 |阅读模式

本帖最后由 paopiu 于 2023-11-11 16:40 编辑

笔者手里的 WIN10 是家庭版,先看下系统版本。win + r 运行 winver

1.png

要想桥接 WSL2 网络,必须用到 Hyper-V 管理器。如果你是专业版,可以直接在 控制面板\程序\程序和功能\启用或关闭 Windows 功能 ,将 Hyper-V 打开。如果你的电脑像我一样是家庭版。需要一个 ps1 文件来完成。将下面的代码保存为 run.ps1

pushd "%~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hyper-v.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

管理员身份打开 powershell ,切换到脚本所在目录,执行这个代码,如果报错了,说明没有执行权限。可以执行以下代码,临时开放运行权限。

Get-ExecutionPolicy -List
Set-ExecutionPolicy Unrestricted
# 运行程序
Set-ExecutionPolicy Undefined # 改回权限

2.png

安装 run.ps1 之后,重启电脑,就可以在搜索里找到 Hyper-V 管理器 了。(因为我已经安装好了,就没有安装截图了)

3.png

宿主机先开一个 CMD 或者 PowerShell 启动 WSL ,放一边。

运行 GET-NetAdapter 查看当前的适配器名称。

4.png

我用的 WLAN ,所以接下来我的代码是,如果你插了网线,改对应的 -NetAdapterName 就可以了。

Set-VMSwitch -name "WSL" -NetAdapterName "WLAN" -AllowManagementOS $true

1. 动态 IP

动态 IP 方式,每次开机的 IP 都不确定,会变化。

接着我们回到 WSL 里面,刷新下 ip 地址,运行

sudo ip addr flush dev eth0
sudo dhclient eth0

修改 DNS

vi /etc/resolv.conf

内容改成 8.8.8.8 ,也可以改成其他 DNS

nameserver 8.8.8.8

查看当前 IP

ifconfig eth0 | grep inet

5.png

可以看到此时 WSLIP 地址和宿主机在同一个网段了。


2. 静态IP

WSL 中修改下面几个文件

vi /usr/lib/systemd/network/wsl_external.network
vi /etc/wsl.conf
vi /etc/resolv.conf

内容像这样

wsl_external.network
[Match]
Name=eth0
[Network]
Description=WSLBridge
DHCP=false
Address={Your ip for WSL}
Gateway={Gateway of the bridged card}
DNS={DNS used by your bridged card}
wsl.conf
[boot]
systemd=true
### command 可以写在这里,也可以在宿主机里执行
command = "/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe -Command 'Set-VMSwitch -name "WSL" -NetAdapterName "WLAN" -AllowManagementOS $true'"
[network]
generateResolvConf = false
resolv.conf
nameserver {DNS used by your bridged card}

最后设置下 network

systemctl enable systemd-networkd
systemctl restart systemd-networkd
systemctl enable systemd-resolved.service
systemctl restart systemd-resolved.service

每次先启动 WSL ,然后设置网桥(如果前面设置了 command ,这步骤不需要)

Set-VMSwitch -name "WSL" -NetAdapterName "WLAN" -AllowManagementOS $true

此时 WSL 的 IP 地址就是在前面配置文件中的了。


为了使宿主机和 WSL 之间可以相互 PING 通,需要修改宿主机防火墙。

依次打开 控制面板\系统和安全\Windows Defender 防火墙\高级设置 ,找到 入站规则 核心网络诊断 - ICMP 回显请求(ICMPv4-In) 专用,公用和域 ,启用这 2 条规则,就可以相互 PING 通了。这个方法,貌似 WSL 和 宿主机使用了同一个 IP 地址了。

6.png

如果最后关闭 WSL ,不再需要桥接了,可以运行下面的命令,将 WSL 改回 NAT

Set-VMSwitch WSL -SwitchType Internal
回复

使用道具 举报

Jun | 2023-11-11 12:33:14 | 显示全部楼层
老师,学习到了
回复 支持 反对

使用道具 举报

妖猊 | 2023-11-11 12:36:35 | 显示全部楼层
老师,学习到了
回复 支持 反对

使用道具 举报

hugon | 2023-11-11 12:37:58 来自手机 | 显示全部楼层
老师,学到了
回复 支持 反对

使用道具 举报

WangChong | 2023-11-11 12:39:50 | 显示全部楼层
感谢楼主分享,收下了



                                            藏起来的小尾巴,不让你看!  
    回复 支持 反对

    使用道具 举报

    yuyy1989 | 2023-11-11 12:42:18 | 显示全部楼层
    老师,学到了
    回复 支持 反对

    使用道具 举报

    jkernet | 2023-11-11 12:50:21 | 显示全部楼层

    回帖奖励 +1 金钱

    来了来了
    回复

    使用道具 举报

    molun | 2023-11-11 12:51:03 来自手机 | 显示全部楼层
    磁盘都飙红了
    等风,等雨,也等你!
    回复 支持 反对

    使用道具 举报

    翁vjk | 2023-11-11 12:59:21 来自手机 | 显示全部楼层
    学到了
    回复

    使用道具 举报

    paopiu | 2023-11-11 13:10:59 | 显示全部楼层

    清理一下
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则