WSL 固定IP的两种方法

首发于个人博客

1. 网桥配置固定ip

这种模式不稳定,wsl经常崩溃

@echo off
setlocal enabledelayedexpansion
::先停掉可能在跑的wsl实例
wsl --shutdown ubuntu
if !errorlevel! equ 0 (
    ::检查WSL有没有我需要的IP
    wsl -u root ip addr | findstr "192.168.3.100" > nul
    if !errorlevel! equ 0 (
        echo wsl ip has set
    ) else (
        ::IP不存在则绑定IP
        wsl -u root ip addr add 192.168.3.100/24 broadcast 192.168.3.255 dev eth0 label eth0:1
        echo set wsl ip success: 192.168.3.100
    )
    ::检查宿主机有没有我需要的IP
    ipconfig | findstr "192.168.3.200" > nul
    if !errorlevel! equ 0 (
        echo windows ip has set
    ) else (
        ::IP不存在则绑定IP
        netsh interface ip add address "vEthernet (WSL)" 192.168.3.200 255.255.255.0
        echo set windows ip success: 192.168.3.200
    )
)
 ::为主机设置SSH转发端口
 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=192.168.3.100 connectport=22

pause

wsl无法ping通windows

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

允许wsl通过防火墙

2.另一种模式,自动配置wsl2 host

WSL2 启动时会自动变换IP,IP地址不可固定。使用Localhost有时候可以连接上去,有时候连接不上去。
现在设置一个固定的host来配置WSL2

1. 配置Linux 获取IP启动脚本

如果无法写入,则需要在windows配置etc目录的权限,更改所属组,让User也有写入权

cd /etc
touch initWsl.sh
chmod 775 initWsl.sh
chmod 777 /mnt/c/Windows/System32/drivers/etc/hosts
vim initWsl.sh

initWsl.bash

#! /bin/sh

# 启动对应服务
#service ssh ${1}
#service docker ${1}

# 设置本地Wsl2域名,默认为wsl2host
ipaddr=$(ip -4 addr show dev eth0 | egrep 'inet ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})' | awk '{print $2}' | awk -F/ '{print $1}')
hostName='wsl.local'
sed -i "/${hostName}/d" /mnt/c/Windows/System32/drivers/etc/hosts
echo "${ipaddr} ${hostName}" >> /mnt/c/Windows/System32/drivers/etc/hosts

sed -i "/${hostName}/d" /etc/hosts
echo "${ipaddr} ${hostName}" >> /etc/hosts

winip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
winhost='win.local'

sed -i "/${winhost}/d" /etc/hosts
echo "${winip} ${winhost}" >> /etc/hosts

./initWsl.sh start
2. 配置Windows 启动运行脚本
  1. 进入 C:\Users\hanli\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. 创建Ubuntu.vbs
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Ubuntu -u root /etc/initWsl.sh start", vbhide
  1. 执行Ubuntu.vbs

3. 通过localhost访问

curl localhost:port 

即可访问到wsl2的端口

### 配置 Windows 11 WSL 使用固定 IP 地址 为了使 WSL 在 Windows 11 中拥有固定IP 地址,可以遵循以下方法: #### 设置 Windows vEthernet 适配器的静态 IP 地址 由于 WSL2 运行在一个轻量级的虚拟机中,其网络依赖于 Windows 创建的一个名为 `vEthernet (WSL)` 的虚拟交换机。因此,通过配置该接口来间接控制 WSL 实例获得特定范围内的 IP。 打开 PowerShell 或者命令提示符并以管理员身份运行下面脚本片段[^3]: ```powershell New-NetIPAddress ` -InterfaceAlias "vEthernet (WSL)" ` -IPAddress 192.168.50.1 ` -PrefixLength 24 ` -DefaultGateway 192.168.50.2 ``` 上述代码指定了一个静态 IP 给宿主机端口 (`vEthernet`) 并设定了默认网关;注意这里的 IP 和子网掩码应根据实际环境调整。 #### 修改 WSL 内部网络配置文件 接着,在 WSL 发布版内部创建或编辑 `/etc/wsl.conf` 文件以便持久化指定参数。此操作允许自定义启动行为以及分配给 Linux 子系统的资源属性。具体来说,添加如下内容至 `.conf` 文件内: ```ini [network] generateHosts = false generateResolvConf = false hostname = ubuntu-wsl interface = eth0 nameserver = 8.8.8.8 address = 192.168.50.28/24 gateway = 192.168.50.1 ``` 以上设置确保每次重启后都能保持一致性的网络状态,并且明确了所期望获取的具体 IPv4 地址及其关联信息。 完成这些更改之后,重新加载 WSL 环境或者简单地注销再登录即可生效新的设定。此时应当能够观察到预期中的静态 IP 被正确应用到了对应的 Ubuntu 版本上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值