WSL2常用命令、设置静态 IP 地址

常用命令:

列出分发版
wsl -l , wsl --list
wsl --list --all
wsl --list --running
设置默认分发版
wsl -s Ubuntu
取消注册和重新安装分发版
注销后,与该分发关联的所有数据、设置和软件都将永久丢失。 从 Store 重新安装会安装分发版的干净副本。
wsl --unregister <DistributionName>
wsl --unregister Ubuntu
将 WSL 2 设置为默认版本
wsl --set-default-version 2
用于管理适用于 Linux 的 Windows 子系统的参数
--export <分发版> <文件名>  将分发版导出到 tar 文件
--import <分发版> <安装位置> <文件名>  导入指定的 tar 文件作为新的分发版
--list、-l [选项]  列出分发版

wsl --shutdown
立即终止所有正在运行的发行版和 WSL 2 轻量级实用程序虚拟机
wsl --terminate Ubuntu  //关闭ubuntu

service docker status/start/restart

设置静态IP:

WSL2 采用 Hyper-V 的 Internal Virtual Switch,这个虚拟交换机本身是可以设置静态 IP 地址的,但是 WSL2 在每次全新启动的时候将网络配置恢复成 DHCP,这样不仅可能会造成局域网内网段的冲突,而且对于需要固定地址访问 WSL2 内服务的需求也带来了不少麻烦。

解决方案

注:以下解决方案适用于 Debian 系的发行版(如 Ubuntu 等),其它发行版可能需要自行适配。

既然 WSL2 会在启动时做网络适配器的配置,那么我们只需要在启动后重新为其配置网络就可以了。

首先,我们假定我们要将 WSL2 的网关设置为 192.168.50.1,并为 WSL2 分配 192.168.50.2 的 IP 地址,那么我们进入 WSL2 之后,执行以下命令即可:

sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
sudo ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
sudo ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
sudo echo nameserver 192.168.50.1 > /etc/resolv.conf

上述命令首先删除掉 WSL2 已经配置的 IP 地址,然后为其分配 192.168.50.2/24,最后配置路由并指定 DNS Server。

这样配置完成后,你会发现 WSL2 内连不了网了。这是因为我们还没有对 WSL2 使用的 Internal Virtual Switch 进行配置。

打开 PowerShell,执行以下命令:

Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False
New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'
Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False
New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;

上述命令中,首先找到 vEthernet (WSL) 这个网络适配器,然后将其所有已有的 IP 地址删除,然后为其添加 192.168.50.1/24 的 IP 地址。

最后设置 NAT:首先删除名字叫做 WSLNat 的 NAT(因为我们后续创建的 NAT 名字叫做 WSLNat,这些命令每次启动系统后都需要执行,因此可能系统中已经存在名为 WSLNat 的 NAT 了,为了防止冲突,如果存在的话就先删掉) ,然后创建一个名字叫做 WSLNat 的 NAT,设置内部地址为 192.168.50.0/24

上述命令全部执行完成后,WSL2 将恢复网络连接。

查看并测试一下 WSL2 内的网络:

再看看 Windows 下 Virtual Switch 的网络配置,并访问 WSL2 看看:

> get-netadapter 'vEthernet (WSL)' | get-netipaddress

IPAddress         : 192.168.50.1
InterfaceIndex    : 62
InterfaceAlias    : vEthernet (WSL)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Preferred
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

> get-netnat 'WSLNat'

Name                             : WSLNat
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.50.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

> ping 192.168.50.2

至此,你可以通过 192.168.50.2 从 Windows 下访问 WSL2(由于 Windows 会为 WSL2 自动配置端口转发,因此也可以直接访问 localhost 访问里面的应用),通过 192.168.50.1 从 WSL2 访问 Windows 了。

一键运行解决方案

由于每次重新启动 WSL2(指完全重新启动,即重新启动了 Windows 或者通过 wsl --shutdown 彻底停止 WSL2 后的首次启动,如果只是切出去的话那不需要)都需要执行一次,不如保存成脚本文件方便使用:

wsl -d Ubuntu -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d Ubuntu -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
wsl -d Ubuntu -u root ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
wsl -d Ubuntu -u root echo nameserver 192.168.50.1 ^> /etc/resolv.conf
powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;"

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在WSL 2中设置静态IP,需要进行以下步骤: 1. 打开Windows Terminal或其他终端应用程序,并在其中启动WSL 2。 2. 运行以下命令以安装所需的软件包: ``` sudo apt update sudo apt install net-tools ``` 3. 通过运行以下命令,查找要配置静态IP的网络接口的名称: ``` ip link ``` 通常情况下,该接口的名称类似于“eth0”或“wsl0”。 4. 运行以下命令以编辑网络接口的配置文件: ``` sudo nano /etc/network/interfaces ``` 5. 在文件中添加以下行,替换为您要使用的IP地址、网关和DNS服务器的值: ``` auto <接口名称> iface <接口名称> inet static address <IP地址> netmask <子网掩码> gateway <网关地址> dns-nameservers <DNS服务器地址> ``` 例如,如果要将静态IP地址设置为“192.168.1.100”、“255.255.255.0”子网掩码、“192.168.1.1”网关和“8.8.8.8”DNS服务器,则应添加以下行: ``` auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 ``` 6. 保存文件并退出编辑器。 7. 运行以下命令以重启网络服务: ``` sudo service networking restart ``` 8. 确认静态IP地址是否已成功设置,可以通过运行以下命令来检查: ``` ip addr show <接口名称> ``` 例如,如果要检查名为“eth0”的接口,则应运行以下命令: ``` ip addr show eth0 ``` 如果一切正常,则应该看到接口已配置为使用静态IP地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值