目录
文章目录
- 目录
- 环境信息
- WSL
- [启用 Win11 WSL 和虚拟机平台功能](#启用 Win11 WSL 和虚拟机平台功能)
- [在 Win11 上使用 WSL安装 Ubuntu](#在 Win11 上使用 WSL安装 Ubuntu)
- [修改 WSL 的网络模式支持局域网访问](#修改 WSL 的网络模式支持局域网访问)
- [配置 Ubuntu SSH](#配置 Ubuntu SSH)
- [配置 Win11 防火墙放行 ssh 流量](#配置 Win11 防火墙放行 ssh 流量)
环境信息
- Win11
- WSL2
- Ubuntu 22.04 LTS
WSL
WSL 是一个与 Microsoft Windows 操作系统紧密集成的容器化环境,使得用户可以以非常轻量级的方式在 Windows 操作系统上运行 Linux 操作系统,而不再需要双系统或 VMware/Hyper-V 虚拟机。
启用 Win11 WSL 和虚拟机平台功能
- 管理员身份打开 PowerShell。
- (按需,Win11 默认已安装)安装 WSL:https://learn.microsoft.com/en-us/windows/wsl/install
- 启用 WSL 功能。
bash
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 启用虚拟机平台功能。
bash
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 重启电脑。
在 Win11 上使用 WSL安装 Ubuntu
-
打开 Microsoft Store 搜索 Ubuntu。
-
选择最新的 Ubuntu LTS 版本点击安装。
-
安装完成后,从开始菜单启动 Ubuntu。可能的,会自动提示并需要下载和更新 WSL版本。然后会自动进行完成 Ubuntu 初始化设置,输出 Username 和 Password。
-
从开始菜单启动 WSLsetting,打开设置页面可以修改虚拟机的 CPU、内存、网络、磁盘等配置。
-
管理员身份打开 PowerShell。
-
Ubuntu 启动后,查看 WSL运行实例信息。
bash
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
修改 WSL 的网络模式支持局域网访问
默认情况下,WSL 的网络模式是 NAT。此时 Ubuntu 操作系统 IP 地址默认为 172 段。通过 WLS NAT 网络模式访问互联网。
bash
$ 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 一样。既支持访问公网,也只是局域网访问。
bash
$ 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
- 卸载初始 ssh
bash
sudo apt remove openssh-server
- 更新操作系统
bash
sudo apt update
- 重装 ssh
bash
sudo apt install openssh-server
- 修改 ssh 配置
bash
sudo vim /etc/ssh/sshd_config
...
# ssh 服务监听端口
Port 2223
# ssh 服务允许远程 root 用户登入
PermitRootLogin yes
# ssh 服务允许使用用户名密码方式登入
PasswordAuthentication yes
- 重启 ssh
bash
sudo service ssh restart
- 查看 ssh 状态
bash
sudo service ssh status
- 常驻 ssh
bash
sudo systemctl ssh enable
配置 Win11 防火墙放行 ssh 流量
- 管理员身份打开 PowerShell。
- (NAT 模式网络下需要配置,Mirrored 模式不需要配置)添加端口代理,配置 Port DNAT,使得 Remote 可以 ssh 到 localhost:port。
bash
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
- 设置防火墙入向规则
bash
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
- 测试流量
bash
remote $ ssh username@win11_ip -p 2223