wsl2安装+桥接模式+固定IP

前言

本文旨在为需要在 Windows 上使用 WSL(Windows Subsystem for Linux)进行开发的用户提供一份从安装到网络配置、再到开发环境搭建的完整指南。无论你是刚开始接触 WSL,还是已经使用过但遇到了网络连接、远程开发或软件源配置等问题,本文都将提供清晰的步骤和解决方案。

目标读者

  • 需要在 Windows 上搭建 Linux 开发环境的开发者。
  • 希望 WSL 能够与主机处于同一局域网,方便进行网络调试、远程连接的用户。
  • 遇到 WSL 网络桥接、DNS 解析、git clone 慢等常见问题的用户。

主要内容概览

  1. WSL 安装与基础配置:包括 Windows 终端安装、WSL 初始化、root 用户设置等。
  2. 网络桥接模式设置:详细讲解如何将 WSL 网络从默认的 NAT 模式改为桥接模式,使其获得与主机同网段的独立 IP,并解决桥接后可能遇到的网络互通、主机断网、DNS 解析等问题。
  3. 开发环境配置
    • SFTP 连接:在 WSL 中安装并配置 OpenSSH 服务,实现通过 SFTP 进行文件传输。
    • VS2022 远程调试:配置 WSL 作为 VS2022 的远程开发环境,支持 CMake 项目的编译与调试。
    • 更新软件源:将 Ubuntu 的软件源更换为国内镜像(如阿里云),加速软件包下载。
    • 解决 git clone 网络问题:通过修改 DNS 或使用镜像代理,解决 GitHub 克隆缓慢或失败的问题。
  4. 高级网络配置:包括为 WSL 设置固定 IP,确保其 IP 地址在重启后保持不变,方便服务部署与访问。

通过本文,你将能够搭建一个稳定、高效且与本地网络无缝集成的 WSL 开发环境。

Windows终端安装

bash 复制代码
wsl --install

wsl.exe --list --online
wsl.exe --install Ubuntu-22.04

wsl --unregister Ubuntu

设置root用户密码

bash 复制代码
sudo passwd root

查看wsl版本

bash 复制代码
wsl -l -v或者wsl --list --verbose

网络设置桥接模式

需要启用Hyper-V

控制面板 - 程序 - 启用或关闭Windows功能 - 启用Hyper-V

重启电脑

bash 复制代码
Get-Module -ListAvailable Hyper-V

#输出
    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version    PreRelease Name                                PSEdition ExportedCommands
---------- -------    ---------- ----                                --------- ----------------
Manifest   2.0.0.0               Hyper-V                             Core,Desk {Add-VMAssignableDevice, Add-VMDvdDrive...

Windows家庭版没有Hyper-V功能,需要单独下载安装

将下面的代码复制保存为 .cmd 文件,使用管理员身份运行。

脚本执行完成后,重启电脑,然后再在控制面板里启用Hyper-V

javascript 复制代码
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

1 查看物理网卡name

bash 复制代码
Get-NetAdapter

#输出
Name        InterfaceDescription
----        --------------------
以太网       Realtek PCIe GbE Family Controller
WLAN        Intel(R) Wi-Fi 6 AX201

2 创建外部虚拟交换机

bash 复制代码
New-VMSwitch `
  -Name "WSLBridge" `
  -NetAdapterName "以太网" `
  -AllowManagementOS $true
bash 复制代码
New-VMSwitch `
  -Name "WSLBridge" `
  -NetAdapterName "WLAN" `
  -AllowManagementOS $true
bash 复制代码
Get-VMSwitch

#输出
Name        SwitchType
----        ----------
WSLBridge   External

3 修改 .wslconfig

bash 复制代码
notepad $env:USERPROFILE\.wslconfig

#修改
[wsl2]
networkingMode=bridged
vmSwitch=WSLBridge
dhcp=false

4 重启WSL

bash 复制代码
wsl --shutdown

#查看ip
hostname -I
ifconfig

5 网络互通问题

主机能ping通WSL,但WSL内部可能ping不通主机

大概率是防火墙问题,可添加规则或将虚拟交换机设为内部网络

bash 复制代码
Get-NetConnectionProfile

#输出包含该项
NetworkCategory          : Public
bash 复制代码
#修改为可信任内部网络,然后就可以ping通了
Set-NetConnectionProfile `
  -InterfaceAlias "vEthernet (WSLBridge)" `
  -NetworkCategory Private

6 主机上不了网

bash 复制代码
#局域网链路检测
ping 192.168.120.1

#外网路由检测
ping 8.8.8.8

# DNS检测
nslookup www.microsoft.com

上述测试均正常,说明网络正常。

但是如果在配置过程中开启了网络代理(VP N),也可能导致主机上不了网。

此时关闭网络代理,再查看是否能上网。

确认能上网,再打开网络代理,一切正常。

7 删除桥接交换机

bash 复制代码
wsl --shutdown

Remove-VMSwitch -Name "WSLBridge" -Force

8 WSL DNS解析问题

bash 复制代码
#局域网
ping -c 3 192.168.120.1

#WSL 外网路由
ping -c 3 223.5.5.5

# DNS
ping -c 3 openapi.alipay.com

openapi.alipay.com 失败:确认只有 DNS 故障。

bash 复制代码
#查看当前 DNS
cat /etc/resolv.conf
bash 复制代码
# 临时修复
sudo tee /etc/resolv.conf > /dev/null <<'EOF'
nameserver 223.5.5.5
nameserver 119.29.29.29
nameserver 1.1.1.1
EOF

# 测试
cat /etc/resolv.conf

nslookup openapi.alipay.com
getent hosts openapi.alipay.com
ping -c 3 openapi.alipay.com
bash 复制代码
# 永久有效
sudo vi /etc/wsl.conf

# 写入
[network]
generateResolvConf=false

# 重新创建 DNS 文件
sudo rm -f /etc/resolv.conf

sudo tee /etc/resolv.conf > /dev/null <<'EOF'
nameserver 192.168.120.1
nameserver 223.5.5.5
nameserver 119.29.29.29
EOF

# 防止 dhcpcd 再次覆盖
sudo chattr +i /etc/resolv.conf

# 重启WSL
wsl --shutdown

设置不可变后,将来需要修改 DNS 时先执行:

sudo chattr -i /etc/resolv.conf

9 设置固定IP

bash 复制代码
# 查看地址是否已被分配
arp -a | findstr 192.168.120.196

# 创建添加固定 IP 脚本
sudo vi /usr/local/bin/fix-wsl-network.sh

#写入

#!/bin/bash

DEV="eth0"
IP="192.168.120.196"
GW="192.168.120.1"

ip link set $DEV up

# 清除所有旧地址
ip addr flush dev $DEV

# 添加固定地址
ip addr add $IP/24 dev $DEV

# 添加路由
ip route replace default via $GW dev $DEV



# 给权限
sudo chmod +x /usr/local/bin/fix-wsl-network.sh
bash 复制代码
# 检查 systemd 服务状态
systemctl status
bash 复制代码
创建 systemd 服务
sudo vi /etc/systemd/system/fix-wsl-network.service

# 写入

[Unit]
Description=Fix WSL Static IP
After=network.target


[Service]
Type=oneshot
ExecStart=/usr/local/bin/fix-wsl-network.sh
RemainAfterExit=yes


[Install]
WantedBy=multi-user.target



# 重新加载服务
sudo systemctl daemon-reload
# 设置开机启动
sudo systemctl enable fix-wsl-network.service
# 立即启动
sudo systemctl start fix-wsl-network.service
# 查看服务状态
systemctl status fix-wsl-network.service

# 检查检查ip地址
ip addr show eth0

# 显示无期限 固定ip
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 5e:bb:f6:9e:ee:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.120.196/24 scope global eth0
       valid_lft forever preferred_lft forever

SFTP连接wsl

安装OpenSSH

bash 复制代码
sudo apt update
sudo apt install openssh-server

查看版本

bash 复制代码
ssh -V

配置SSH

bash 复制代码
sudo vim /etc/ssh/ssh_config

配置文件打开端口

bash 复制代码
Port 22

启动ssh服务

bash 复制代码
sudo service ssh start

VS2022远程调试

安装构建工具

bash 复制代码
sudo apt-get install g++ gdb cmake git openssl libssl-dev ninja-build

设置VS2022------CMake------永不自动运行配置步骤

CMake设置------添加新的配置------选择WSL-GCC-Debug

更新源

Ubuntu 系统中关于软件源配置方式变化:

从传统的 sources.list 格式迁移到 deb822 格式

/etc/apt/sources.list ---> /etc/apt/sources.list.d/ubuntu.sources

bash 复制代码
# 备份 sources.list.d 目录下的所有源文件
sudo cp -r /etc/apt/sources.list.d/ /etc/apt/sources.list.d.bak/

# 若存在传统的 sources.list 文件,也一并备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
bash 复制代码
sudo rm -f /etc/apt/sources.list.d/ubuntu.sources  # 删除默认 Ubuntu 源
sudo rm -f /etc/apt/sources.list  # 若存在传统文件,也删除
bash 复制代码
sudo nano /etc/apt/sources.list.d/aliyun.sources

按 Ctrl+O 保存,Ctrl+X 退出编辑器。

css 复制代码
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-backports noble-security
Components: main restricted universe multiverse
Architectures: amd64
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb-src
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-backports noble-security
Components: main restricted universe multiverse
Architectures: amd64
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Ubuntu 24.04 → noble,22.04 → jammy,20.04 → focal,18.04 → bionic。

可通过 lsb_release -c 命令查看当前系统的代号。

bash 复制代码
sudo apt update

git clone网络问题

bash 复制代码
sudo nano /etc/resolv.conf
bash 复制代码
nameserver 8.8.8.8    # Google DNS
nameserver 1.1.1.1    # Cloudflare DNS
nameserver 8.8.4.4    # 备用 Google DNS

如果主机设置了DNS,需要与主机设置的DNS地址一致

bash 复制代码
# 镜像源下载
git clone https://gh.llkk.cc/https://github.com/unitreerobotics/unitree_sdk2.git

git clone https://gh-proxy.com/https://github.com/unitreerobotics/unitree_sdk2.git
相关推荐
小手智联老徐2 小时前
Ubuntu 下 CuteCom 串口调试工具指南:安装、权限配置与数据记录
linux·运维·ubuntu
Felven2 小时前
麒麟信安操作系统掉电保护方案
linux·运维·麒麟信安·硬盘保护
云栖梦泽2 小时前
将RAW打包成MIPI CSI2
linux·人工智能·嵌入式硬件
做萤石二次开发的哈哈2 小时前
如何接入萤石开放平台 ERTC Windows SDK?
windows·音视频·萤石开放平台
进击的荆棘3 小时前
Linux——基础指令(中)
linux·服务器·linux基础指令
霸道流氓气质3 小时前
Windows 本地搭建 CDC 全链路测试环境(Kafka+Canel+binlog+SpringBoot)
windows·spring boot·kafka
郝开3 小时前
Windows 安装 Ostris AI Toolkit
人工智能·windows·toolkit·ai toolkit
不能跑的代码不是好代码11 小时前
Linux系统常用命令中文速查表
linux·运维·服务器
石一峰69912 小时前
深入理解 Linux 中断三层机制与 1-Wire 时序锁原理
linux·运维·服务器