环境信息

  • Win11
  • WSL2
  • Ubuntu 22.04 LTS

WSL

WSL 是一个与 Microsoft Windows 操作系统紧密集成的容器化环境,使得用户可以以非常轻量级的方式在 Windows 操作系统上运行 Linux 操作系统,而不再需要双系统或 VMware/Hyper-V 虚拟机。

启用 Win11 WSL 和虚拟机平台功能

  1. 管理员身份打开 PowerShell。
  2. (按需,Win11 默认已安装)安装 WSL:https://learn.microsoft.com/en-us/windows/wsl/install
  3. 启用 WSL 功能。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

  1. 启用虚拟机平台功能。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

  1. 重启电脑。

在 Win11 上使用 WSL安装 Ubuntu

打开 Microsoft Store 搜索 Ubuntu。
在这里插入图片描述

选择最新的 Ubuntu LTS 版本点击安装。

安装完成后,从开始菜单启动 Ubuntu。可能的,会自动提示并需要下载和更新 WSL版本。然后会自动进行完成 Ubuntu 初始化设置,输出 Username 和 Password。

从开始菜单启动 WSLsetting,打开设置页面可以修改虚拟机的 CPU、内存、网络、磁盘等配置。
在这里插入图片描述

管理员身份打开 PowerShell。

Ubuntu 启动后,查看 WSL运行实例信息。

PS C:\WINDOWS\system32> wsl -l -v

NAME STATE VERSION

  • Ubuntu-22.04 Running 2

    修改 WSL 的网络模式支持局域网访问

    默认情况下,WSL 的网络模式是 NAT。此时 Ubuntu 操作系统 IP 地址默认为 172 段。通过 WLS NAT 网络模式访问互联网。

    $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
     valid_lft forever preferred_lft forever
     inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
     valid_lft forever preferred_lft forever
     inet6 ::1/128 scope host
     valid_lft forever preferred_lft forever
     2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
       link/ether 00:15:5d:70:5d:e8 brd ff:ff:ff:ff:ff:ff
       inet 172.30.36.188/20 brd 172.30.47.255 scope global eth0
       valid_lft forever preferred_lft forever
       inet6 fe80::215:5dff:fe70:5de8/64 scope link
       valid_lft forever preferred_lft forever

    但在局域网 SSH 的场景中,WSL 提供了更方便的 Mirrored 模式。
    在这里插入图片描述

    此时 Ubuntu 的 IP 地址和 Host IP 一样。既支持访问公网,也只是局域网访问。

    $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
     valid_lft forever preferred_lft forever
     inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
     valid_lft forever preferred_lft forever
     inet6 ::1/128 scope host
     valid_lft forever preferred_lft forever
     2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
       link/ether 74:5d:22:c7:ab:04 brd ff:ff:ff:ff:ff:ff
       3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
         link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
         4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
           link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
           5: loopback0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
             link/ether 00:15:5d:2f:cc:52 brd ff:ff:ff:ff:ff:ff
             6: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
               link/ether 14:ac:60:b4:cb:73 brd ff:ff:ff:ff:ff:ff
               inet 192.168.1.7/24 brd 192.168.1.255 scope global noprefixroute eth3
               valid_lft forever preferred_lft forever
               inet6 2408:8207:1862:7f50:7fcc:d06d:e1e8:45e1/64 scope global nodad deprecated noprefixroute
               valid_lft forever preferred_lft 0sec
               inet6 2408:8207:1862:7f50:c53e:b25c:8176:ffd0/128 scope global nodad noprefixroute
               valid_lft forever preferred_lft forever
               inet6 fe80::7af4:f1eb:99e9:a7f/64 scope link nodad noprefixroute
               valid_lft forever preferred_lft forever

    配置 Ubuntu SSH

    1. 卸载初始 ssh

    sudo apt remove openssh-server

    1. 更新操作系统

    sudo apt update

    1. 重装 ssh

    sudo apt install openssh-server

    1. 修改 ssh 配置

    sudo vim /etc/ssh/sshd_config
    ...

    ssh 服务监听端口

    Port 2223

    ssh 服务允许远程 root 用户登入

    PermitRootLogin yes

    ssh 服务允许使用用户名密码方式登入

    PasswordAuthentication yes

    1. 重启 ssh

    sudo service ssh restart

    1. 查看 ssh 状态

    sudo service ssh status

    1. 常驻 ssh

    sudo systemctl ssh enable

    配置 Win11 防火墙放行 ssh 流量

    1. 管理员身份打开 PowerShell。
    2. (NAT 模式网络下需要配置,Mirrored 模式不需要配置)添加端口代理,配置 Port DNAT,使得 Remote 可以 ssh 到 localhost:port。

    PS C:\WINDOWS\system32> netsh interface portproxy add v4tov4 listenport=2223 listenaddress=0.0.0.0 connectport=2223 connectaddress=<WSL2_IP_Address>
     # ubuntu ip
     PS C:\WINDOWS\system32> netsh interface portproxy show v4tov4
     Listen on ipv4: Connect to ipv4:
     Address Port Address Port
     --------------- ---------- --------------- ----------
     0.0.0.0 2223 localhost 2223
     # netsh interface portproxy delete v4tov4 listenport=2223 listenaddress=0.0.0.0

    1. 设置防火墙入向规则

    PS C:\WINDOWS\system32> netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2223
    PS C:\WINDOWS\system32> netsh advfirewall firewall show rule WSL2

    Rule Name: WSL2

    Enabled: Yes
    Direction: In
    Profiles: Domain,Private,Public
    Grouping:
    LocalIP: Any
    RemoteIP: Any
    Protocol: TCP
    LocalPort: 2223
    RemotePort: Any
    Edge traversal: No
    Action: Allow
    Ok.

    netsh advfirewall firewall delete rule WSL2

    1. 测试流量

    remote $ ssh username@win11_ip -p 2223

标签: Ubuntu, WSL

添加新评论