由于作者水平有限,内容可能存在错漏,若有发现,还望您在评论区指出。 本博客内容仅适用于 VMWare Workstation,Virtual Box 上的操作可能有所不同。
使用 VMWare Workstation 让 PC 提供云桌面服务
1. 当我们搭建云桌面服务的时候,我们到底在做什么?
桌面云这个东西相信大家都不陌生,比较诸如阿里、腾讯,亦或是 Vultr,都在提供类似的服务(VPS)。对于使用者而言,我们就是拿到了一个 IP 地址,一个账号,一个密码,然后就可以通过各种方式远程控制一台电脑了。我们这次的作业就是要实现一个类似的东西。
那么,我们是不是只需要安装一个 Linux 虚拟机,然后令其访问公网就好了呢?可是为什么这次的操作指南如此冗长呢?
答案当然是“不是”了。作为一个云服务的提供商,我们要做的不仅仅是让虚拟机能被外部网络访问。为了方便管理所有的 VPS 实例(也就是每个虚拟机),我们需要建立一个子网来连接所有的虚拟机。用图来说会比较直观:
对于非 VPS 的云桌面来说,每一个系统都是真正独立的计算机,因而其架构图如上。每个计算机直接与 Internet 相连(有些服务商可能是通过端口映射和 Internet 相连),同时,每台计算机与一台路由或者交换机相连,构建一个局域网,方便服务商的管理。
而对于 VPS 的桌面云系统来说,其架构图如下:
每个服务器中存在有多个虚拟系统,如此将一台服务器分割成多个虚拟专享服务器,来充分分割细化服务器资源。每个虚拟机通过桥接模式参与到 Internet 连接中,再通过仅主机模式构成一个子网。同时服务器之间通过连接路由器/交换机构成子网,虚拟机通过端口映射连入其中,方便服务提供商管理。
那么我们这次作业想要搭建的是怎样的呢?
我们为主机创建了两张虚拟网卡,它们分别构建了一个子网络。其中 NAT 模式的虚拟网卡使得子网内的所有虚拟机可以共享主机的物理网络,而仅主机模式的虚拟网卡则仅作为局域网的 DHCP 服务器使用。
2. 从安装虚拟机开始
推荐从各个大学的 FTP 站点下载光盘映像文件,可以享受校园网的超高带宽。推荐您下载 CentOS7,其自带的浙江大学源能让你的 yum 也享受到校园网内联的舒爽。
关于 CPU 之类的设置看老师的指南就好,下面来说说网卡的配置。
2.1. 恼人的网卡
在前面一节我们说了我们要为 主机 创建两张虚拟网卡,不过在 VMWare 中,这两张网卡实际上已经创建好了,你可以在 编辑->虚拟网络编辑器 中找到他们。其中,仅主机模式的是 VMnet1,NAT 模式的是 VMnet8。剩下的工作,就是为 虚拟机 创建两张网卡,来分别连接到这两个虚拟网络适配器上。
在 虚拟机->设置 中,我们可以添加虚拟机的设备,选择网络适配器,添加两张网卡。其中一张是 NAT 模式,它会自动地通过 VMnet1 来共享主机的网络连接。另一张,我们选择 仅主机模式,他则会连接到 VMnet8 来接入到这个局域网中。
如此设置完成并安装虚拟机后,进入虚拟机,我们会惊喜地发现——依旧不能上网。冷静一下……这并不是因为你没有进行正确的设置,而是 CentOS7 默认不会启用你为他配置的两张网卡而已。通过如下命令可以启用:
1 | cd /etc/sysconfig/network-scripts/ |
修改 ONBOOT=yes 后,保存并退出。然后执行以下命令重启网络服务即可:
1 | service network restart |
2.2. 关于 yum 源
实际上 CentOS7 自带的有浙江大学的镜像源,能够利用高速的教育网来完成 yum 的包安装和更新。不过如果你需要更换源,可以按如下操作:
备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载相应的repo文件,然后放入/etc/yum.repos.d/
mv yourfile /etc/yum.repos.d/CentOS-Base.repo
重新生成 yum 缓存
yum clean all
yum makecache
如此即可。
注:如果不清楚工具在哪个 yum 包中,可以使用如下命令查找:
yum whatprovides [tool name]
2.3. 关于复制虚拟机
云服务的提供商通常不会止步于单个系统,那么如何批量生产这些满足要求的系统就是个问题了。复制虚拟机便是一个不错的方案。在 VMWare Workstation 中,该操作首先会创建一个当前虚拟机的快照(可以理解为当前状态的完整记录),然后用快照生成一个与原虚拟机独立的系统。
在这里 VM 和 VB 都提供了两种不同的复制方式:链接复制 和 完整复制。其中,链接复制的虚拟机虽然和原虚拟机在运行上是独立的,但是仍旧使用原来系统的磁盘空间,而所有对于原虚拟机快照中文件的修改将会被存储在一个“差量磁盘”上。这种方法的好处是省去了创建新虚拟磁盘的时间,使得两个虚拟机共享一套快照文件,节约磁盘空间。坏处是二者不能完全独立,仍旧共用磁盘空间。而后者则是单独开辟虚拟磁盘,并在之上创建虚拟机。
你可以在 虚拟机->管理->克隆 中进行相关操作。需要注意的是,虚拟机中网卡的 MAC 地址必须不同(可以在虚拟机的设置中重新生成),而 IP 地址则无需担心,因为我们配置的主机虚拟网卡均配置了 DHCP 服务,子网中的设备会自动获得不冲突的 IP 地址。
2.4. 关于虚拟机环境配置
VMWare Tools
和 VB 的增强套件差不多的东西,开启虚拟机后在 虚拟机->安装VMWare Tools 处安装即可。
Kernel Headers
其实是内核的头文件。部分开发软件(CUDA,PSXE)会需要。直接
yum install kernel-devel
即可安装
远程连接(ssh)
CentOS 7 原生支持 ssh,只需要在客户机上面使用命令
ssh username@ipadderss
即可连接到虚拟机的终端。
但是这里引入了一个问题:虽然虚拟机可以访问外网,但是外部网络如何访问虚拟机呢?
进入 编辑->虚拟网络编辑器,在虚拟机中使用 ifconfig 找到虚拟机的 ip 地址(NAT 模式网卡的)。然后在主机的 NAT 模式的虚拟网卡下为虚拟机的地址设置一个端口映射即可。然后我们就可以通过
ssh username@hostip:setport
访问到虚拟机了。
2.5. 远程桌面
我们之前完成了 ssh
的配置,可以让外部用户通过这个工具方便地连接到 Linux 终端。但是 CLI 毕竟是极客们的狂欢,我们还得为普通用户准备一个 GUI 的方案……
配置 CentOS 的图形化桌面
安装图形化桌面组件(如果没有在系统安装时就加载的话):
yum groupinstall "GNOME Desktop"
设置图形化组建为启动目标
ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
重新启动
shutdown -r now
你可以看到我们的 CentOS 已经具有了图形化界面。
配置 Xrdp 远程桌面环境
Windows 自带的远程桌面使用的是 rdp
协议,而 Linux 中需要通过额外的组件 Xrdp
来支持这种协议的远程桌面。首先,我们需要配置 EPEL 源,这是对于 CentOS 原生 yum 源的补充。
首先:
yum search epel
结果里会有
epel-release-latest.noarch
安装 EPEL 源
yum install -y epel-release-latest.noarch
然后就可以安装 Xrdp 组件啦:
yum install xrdp tigervnc-server
安装完成之后,该服务默认并为启动,我们启动它,并且为他添加开机启动
systemctl start xrdp
systemctl enable xrdp
之后,我们可以看看现在系统的端口调用:
netstat -antup | grep xrdp
不出意外的话,你应该能看到:
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 1508/xrdp
tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN 1507/xrdp-sesman
3389 端口就是 Xrdp 用来监听 rdp 请求的端口。不过为了让 rdp 正常使用,我们还需要配置防火墙(控制网络入口)和 SELinux(控制程序访问权限):
firewall-cmd --permanent --add-port=3389/tcp
firewall-cmd --reload
chcon --type=bin_t /usr/sbin/xrdp
chcon --type=bin_t /usr/sbin/xrdp-sesman
配置到此全部完成,试试用 Windows 自带的远程桌面连接虚拟机吧~初始化耗时可能较久,请耐心等待哦~