前言
升级到 Windows 10 版本 2004 后,了解到 WSL 2 就是一个虚拟机。Docker for Windows 在2004版本,使用的也是Windows 自带的Hyper-V,我决定删掉 VMware 和 VirtualBox,使用Windows 自带的 Hyper-V。可以看到,Hyper-V 与 PowerShell 高度集成,配置网络环境十分容易理解。并且,Hyper-V 以后台模式运行虚拟机,软件也与系统高度集成。虽然 VMware 和 VirtualBox 也可以后台运行,但是总有一种分裂感。
当然,这种看法的前提是,您得同意 “Linux 不需要 Desktop Environment”。
我接触 Linux 好几年了,与很多网友一样,好几年的时间都在纠结于Linux 桌面的美化。实际上了解后会发现,无论是 KDE 还是 GNOME,还是 Xfce4,你都只能被动的接受相应开发者的设定,我曾经是 Unity 用户,后来Ubuntu 把这个项目砍掉后,我才意识到 Linux 还真没有我喜欢的桌面环境了。除开华丽的特效,KDE、xfce等桌面环境根本没有 Windows的桌面环境好用,GNOME3 的顶部状态栏无用又占面积,查找软件还会打开个全屏页面,现在来看,统一移动和桌面两个平台的UI这个想法毫无疑问是破产的。搞不懂GNOME3 还在坚持什么。
当学会配置和使用新版 Windows Terminal 后,这种感觉尤为明显,Windows 的终端已经变得美观实用了,对 Linux 的需求只剩运行 Linux 的 App 了。装在本地的 Linux 往往对性能要求不大,因此装在虚拟机里;对性能要求高的,往往装在服务器里,都不会直接使用 Linux 的桌面环境。一些 Linux GUI App,通过 SSH + x11 forwarding 就可以在Windows 的桌面呈现出来。Microsoft 已经打算为 WSL 2 提供 GUI 支持(The Windows Subsystem for Linux BUILD 2020 Summary)。目前 VcXsrv (VcXsrv Windows X Server) 已经满足很多 GUI App 的需要。因此,我对虚拟机软件有两个基本要求:
- 后台运行,不使用时无视觉干扰
- 端口转发,便于 SSH 登录(本地、局域网、远程)
Hyper-V 简介
https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/
在 Windows 10 上安装 Hyper-V
https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v
在 Hyper-V 安装 Ubuntu
- 打开 Hyper-V 管理器
- 操作 - 新建 - 虚拟机
一些细节:
- 选择第二代 Hyper-V
- 创建完成后,打开虚拟机设置,“安全”一栏,选用“Microsoft UEFI 证书颁发机构”
配置网络
虚拟机默认使用的是 vEthernet(Default Switch)
,这个网络启用了 DHCP,既然要做端口转发,就希望虚拟机的本地IP是固定的。
创建一个 静态 NAT 网络:
New-VMSwitch -SwitchName “NATSwitch” -SwitchType Internal
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias “vEthernet (NATSwitch)”
New-NetNAT -Name “NATNetwork” -InternalIPInterfaceAddressPrefix 192.168.0.0/24
PowerShell 执行Get-NetAdapter
,可以看见 vEthernet (NATSwitch) 已创建。
Ubuntu Server 设置静态IP
参考 https://www.cnblogs.com/jianxuanbing/archive/2018/11/30/10042892.html
在 Hyper-V 管理器中,把虚拟机的网络适配器切换到刚才创建的 “NATSwitch” 上,重启虚拟机(也许不用)。注意由于发生了网络变动,虚拟机启动会较慢,稍等一下即可。
执行 ip addr
,发现没有获取到 ip 地址。编辑 /etc/netplan/00-installer-config.yaml
network:
ethernets:
eth0:
addresses:
- 192.168.0.2/24
gateway4: 192.168.0.1
nameservers:
addresses:
- # 自己填 DNS
search: []
dhcp4: false
version: 2
具体细节搜索 netplan
命令。
设置端口转发:
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 9022 -Protocol TCP -InternalIPAddress "192.168.0.2" -InternalPort 22 -NatName NATNetwork
这样,外部的 9022 端口就被转发到虚拟机的 22 端口了。