前言
本文旨在为需要在 Windows 上使用 WSL(Windows Subsystem for Linux)进行开发的用户提供一份从安装到网络配置、再到开发环境搭建的完整指南。无论你是刚开始接触 WSL,还是已经使用过但遇到了网络连接、远程开发或软件源配置等问题,本文都将提供清晰的步骤和解决方案。
目标读者:
- 需要在 Windows 上搭建 Linux 开发环境的开发者。
- 希望 WSL 能够与主机处于同一局域网,方便进行网络调试、远程连接的用户。
- 遇到 WSL 网络桥接、DNS 解析、git clone 慢等常见问题的用户。
主要内容概览:
- WSL 安装与基础配置:包括 Windows 终端安装、WSL 初始化、root 用户设置等。
- 网络桥接模式设置:详细讲解如何将 WSL 网络从默认的 NAT 模式改为桥接模式,使其获得与主机同网段的独立 IP,并解决桥接后可能遇到的网络互通、主机断网、DNS 解析等问题。
- 开发环境配置 :
- SFTP 连接:在 WSL 中安装并配置 OpenSSH 服务,实现通过 SFTP 进行文件传输。
- VS2022 远程调试:配置 WSL 作为 VS2022 的远程开发环境,支持 CMake 项目的编译与调试。
- 更新软件源:将 Ubuntu 的软件源更换为国内镜像(如阿里云),加速软件包下载。
- 解决 git clone 网络问题:通过修改 DNS 或使用镜像代理,解决 GitHub 克隆缓慢或失败的问题。
- 高级网络配置:包括为 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