WSL2固定IP有三种主流方法:一、用netplan永久配置静态IP(如172.28.0.2/24)并设默认路由;二、通过Windows批处理脚本在启动时自动注入IP及路由;三、结合端口转发与hosts绑定域名实现逻辑固定。

你在WSL2里跑着开发服务、数据库或NFS服务器,但每次重启后IP地址就变,导致前端连不上后端、IDE调试断连、hosts绑定失效——这不是配置没生效,而是WSL2默认用DHCP从vEthernet虚拟交换机动态租约,根本没给你留静态入口。
确认Windows侧vEthernet网关信息
打开PowerShell(无需管理员权限),执行:
Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceDescription -like "*vEthernet (WSL)*"}
找到类似 172.28.0.1 的IPv4地址,这就是WSL2的网关;子网掩码默认是/24,对应网络号为 172.28.0.0/24。记下这个网关IP,后续所有静态配置必须与它同网段,否则网络直接中断。
这一步跳过会导致后续所有IP设置无法通信,因为WSL2 eth0没有默认路由指向宿主机。
方法一:通过netplan永久配置(Ubuntu/Debian系推荐)
进入WSL2终端,用sudo权限编辑netplan配置文件:
sudo nano /etc/netplan/00-installer-config.yaml
将原内容全部替换为以下YAML(注意缩进必须是空格,不能用Tab):
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses: [172.28.0.2/24]
routes:
- to: default
via: 172.28.0.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
保存后执行:
sudo netplan apply
立即验证:
ip -4 addr show eth0 | grep inet
如果输出中出现你设定的 172.28.0.2/24,且无报错,说明配置已生效。该方式在WSL2重启后依然保持,无需额外脚本。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
方法二:开机自动注入IP(兼容老版本或netplan不生效时)
此法绕过Linux网络栈,在WSL2启动后由Windows主动推送配置,适用于netplan被覆盖、systemd未启用或Ubuntu 18.04等旧发行版。
第一步:在Windows上创建批处理脚本(如 fix-wsl-ip.bat),用记事本保存,右键“以管理员身份运行”:
@echo off
wsl --shutdown
wsl -d Ubuntu -u root ip addr flush dev eth0
wsl -d Ubuntu -u root ip addr add 172.28.0.2/24 dev eth0
wsl -d Ubuntu -u root ip link set eth0 up
wsl -d Ubuntu -u root ip route add default via 172.28.0.1
wsl -d Ubuntu -u root sh -c "echo 'nameserver 172.28.0.1' > /etc/resolv.conf"
⚠️ 注意:脚本中 Ubuntu 需替换成你实际的发行版名称,可用 wsl -l 查看;若提示“wsl命令未识别”,请确保已启用“适用于Linux的Windows子系统”可选功能。
第二步:将该bat文件添加到Windows启动文件夹(shell:startup),下次开机即自动执行。
验证与互通测试
在WSL2中执行:
ping -c 3 172.28.0.1
在Windows PowerShell中执行:
ping -n 3 172.28.0.2
双向能通,说明静态IP已稳定生效。此时可在Windows hosts中绑定该IP:
172.28.0.2 wsl.local
之后浏览器访问 http://wsl.local:3000 或 VS Code Remote-SSH 连接 wsl.local,都不再受IP漂移影响。










