## 0.前期准备工作

一台工作正常的 PVE 服务器， PVE 安装与配置方法参考我的系列文章《[Proxmox VE 折腾手记](https://gitee.com/callmer/pve_toss_notes)》。  

访问 RouterOS 的官网 [Mikrotik](https://mikrotik.com/download) 下载 Winbox 和 CHR 版本的固件，并一同下载固件的校验文件。

![ROS系统下载](img/p0/ros_download.png)

## 1.创建 RouterOS 的虚拟机

### 1.1.常规

登录到 PVE 后台后，进入新建虚拟机流程，并打开高级选项。  

节点即本机，`VM ID` 和 名称 可以自由定义。  

![虚拟机-常规](img/p0/ros_pve_init.png)

### 1.2.操作系统

操作系统类别选择 `Linux` 、内核版本 `5.x - 2.6 Kernel` 即可，且无需使用引导介质。

![虚拟机-操作系统](img/p0/ros_pve_guestos.png)

### 1.3.系统

系统部分需要修改几项参数。  

显卡选择 `默认` ，演示环境选择了 `SPICE` 以供测试。  

机型选择 `q35` ，SCSI 控制器选择 `VirtIO SCSI single` 。  

新版的 RouterOS 对 `Qemu Agent` 支持良好，因此建议勾选 `Qemu代理` 选项。    

如果后续使用过程中 RouterOS  **不稳定** ，请保持机型选择 `默认(i440fx)` 。

![虚拟机-系统](img/p0/ros_pve_os.png)

### 1.4.磁盘

磁盘部分，为了避免后续有多块磁盘，此处选择删掉所有的磁盘。

![虚拟机-磁盘](img/p0/ros_pve_hd.png)

### 1.5.CPU

根据设备的 CPU 资源来定义 RouterOS 的 CPU 虚拟资源。  

CPU类别选择 `host` ，核心根据您物理 CPU 核心数进行酌情设置。  

如果设备有多路 CPU 推荐启用 **NUMA** 。  

如果设备 CPU **超分（Over-Commit）** 比较严重，可适当将 `CPU权重` 参数翻倍，让 RouterOS 获得更多的 CPU 时间。  
 
![虚拟机-CPU](img/p0/ros_pve_cpu.png)

### 1.6.内存

内存一般 2G 足够使用，关闭 `Ballooning` 设备选项。

![虚拟机-内存](img/p0/ros_pve_mem.png)

### 1.7.网络

网络处需要注意，此页设置只能添加一个网络设备，而网络设备的添加顺序将和 RouterOS 内部显示的网卡顺序一致。  

因此我们此处先仅添加 WAN 对应的网口（此处为 `vmbr0` ），模型选择 `VirtIO` ，并取消勾选防火墙选项。  

对于使用硬件直通的小伙伴，可以根据实际情况来修改此处网络设备选项。  

推荐在 **Multiqueue** 处根据前面设置的 CPU 数量进行网卡多队列设置，设置比例为 1:1 。  

即有 n 个 CPU 核心，此处多队列也设置为 n 。  

![虚拟机-网络](img/p0/ros_pve_eths.png)

根据官方文档中对 `Multiqueue` 的描述：

![虚拟机-网络-网卡多队列](img/p0/ros_pve_eths_multiqueue.png)

因此，对于使用 `VirtIO` 模型的网卡设备，能在一定程度上提高虚拟机的网络吞吐性能，尤其是在该虚拟机用作路由器且需要处理大流量带宽时。  

需要注意的是，老旧的内核对 `Multiqueue` 可能未良好支持，RouterOS v7 及以上版本可开启该选项。  

### 1.8.确认

接下来查看设置总览，确认无误，即可点击 “完成” 。

![虚拟机-确认](img/p0/ros_pve_confirm.png)


## 2.调整虚拟机硬件参数

此时，查看虚拟机详情页，可以看到我们刚才创建的虚拟机。  

![虚拟机参数](img/p0/ros_hw_review.png)

去掉 CD/DVD 驱动器后，开始添加需要的网络设备。  

![虚拟机添加网卡](img/p0/ros_add_eths.png)

按需添加需要的网络设备，并去掉防火墙，增加网卡多队列选项。示例如下：

![虚拟机添加网卡完成](img/p0/ros_add_eths_done.png)


## 3.创建RouterOS硬盘

### 3.1.上传 RouterOS 镜像到 PVE

鉴于大家使用的操作系统有 Windows、macOS、Linux，因此大家使用的 SSH 工具可能不同。  

因此此处不演示如何使用 SFTP 工具。  

![上传ROS的img文件](img/p0/ros_img_upload.png)

使用 SSH 工具登录到 PVE 服务器，并进入 tmp 目录，创建一个文件夹：

```bash
# 进入 tmp 目录
cd /tmp

# 创建文件夹
mkdir RouterOS

# 进入文件夹
cd RouterOS

```

将 RouterOS 固件上传到该文件夹中，并检查 `hash` ：

![ROS的img文件校验](img/p0/ros_img_hash.png)

```bash
# 检查文件是否存在
ls -la

# 计算文件 hash
sha256sum chr-7.3.1.img.zip 

```

确认无误后，开始对镜像进行转换，并导入刚才创建的 RouterOS 虚拟机中。

### 3.2.镜像转换

由于上传的镜像为 Zip 压缩格式，因此需要首先对其解压缩。

![img文件解压缩](img/p0/ros_img_unzip.png)

```bash
# 将固件解压缩
unzip -q chr-7.3.1.img.zip  

```

解压出 RouterOS 的 `img` 格式的镜像，然后使用 PVE 自带命令行工具，对其进行格式转换：

![img文件转换](img/p0/ros_img_convert.png)

```bash
# 将 img 格式的镜像转换成 qcow2 格式
qemu-img convert -f raw -O qcow2 chr-7.3.1.img routeros.qcow2

```

得到了大家最为熟悉的 **qcow2** 格式的镜像。

### 3.3.镜像导入虚拟机

在创建 RouterOS 虚拟机时，曾指定了 `VM ID`，演示中为 **`233`** ；该编号后续会用到，大家在参考本文章时，需要注意替换。

![镜像导入为磁盘](img/p0/ros_img_import.png)

 **再次重申，命令中的 `233` 要替换成您自己的 RouterOS 虚拟机编号。** 

```bash
# 将 qcow2 镜像导入虚拟机中
qm importdisk 233 routeros.qcow2 local-lvm

# 输出结果为以下类似内容表示成功
Successfully imported disk as 'unused0:local-lvm:vm-233-disk-0'  

```

### 3.4.调整 RouterOS 虚拟机磁盘设置

在磁盘导入成功后，会发现虚拟机的硬件列表中多出了一块未使用的磁盘设备，鼠标 **双击** 该设备进行一些配置调整。

![启用磁盘](img/p0/ros_hd_use.png)

在弹出的对话框中，勾选 `IO thread` 选项，点击“添加”按钮。

![调整磁盘参数](img/p0/ros_hd_iothread.png)

此时，磁盘大小为 128M ，为了方便后续使用，需要对该磁盘空间进行扩容。  

此处扩容后，在 RouterOS 虚拟机 **初次启动** 时，会根据磁盘空间自动扩容安装，所以无需担心。

![磁盘扩容-1](img/p0/ros_hd_enlarge.png)

选中该磁盘，然后点击 `Disk Action` 的 `Resize` ：

![磁盘扩容-2](img/p0/ros_hd_resize.png)

根据需要，扩容一定量的磁盘空间；我作为演示，仅增加 1G 的磁盘空间，并点击 “调整磁盘大小” ：

![磁盘扩容-3](img/p0/ros_hd_add1G.png)

调整完成后，磁盘容量已被扩容。

![磁盘扩容-4](img/p0/ros_hd_finish.png)


## 4.调整虚拟机配置参数

初创的 RouterOS 的配置参数如下：

![ROS虚拟机原始参数](img/p0/ros_vm_origin.png)

需要修改的部分有如下几个：  
1.  开机自启动（建议在 RouterOS 完全设置好之后再修改）
2.  启动/关机顺序（建议在 RouterOS 完全设置好之后再修改）
3.  引导顺序
4.  使用平板指针

### 4.1.设置开机自启动

开机自启动设置为 “是” 。  

启动顺序推荐如下：

![ROS开机自启动](img/p0/ros_vm_autostart.png)

启动/关机顺序为 “1” ，表示该虚拟机第一个启动，最后一个关机。  

启动延时为 “5” ，表示该虚拟机在 PVE 启动完成后，延迟5秒自行启动。  

### 4.2.修改引导顺序

在 `scsi0` 设备处，勾选前面的 “已启用” 复选框，并使用行首的排序功能，将该设备拖拽到第一个。  

然后点击 `OK` 。  

![ROS引导项](img/p0/ros_vm_boot.png)

### 4.3.修改平板指针设置

关闭“使用平板指针”的选项，可以一定程度上降低虚拟机的 CPU 使用率。

![ROS虚拟机关闭平板指针](img/p0/ros_vm_tablet.png)

修改完成后，总体情况如下，等待 RouterOS 完全配置好，运行无异常之后，即可开启该虚拟机的 **“开机自启动”** 设置。  

![ROS虚拟机参数调整完成](img/p0/ros_vm_finish.png)


## 5.虚拟机开机

此时开始检验 RouterOS 虚拟机是否可以正常启动。  

切换到虚拟机的 “控制台” 选项卡，让虚拟机开机。  

此处需要注意的是，目前 RouterOS 并未设置，因此不会对网络造成什么影响，但是如果后续 RouterOS 配置了内部网络接口的桥接，且此时 PVE 有其他的路由系统（例如 Openwrt）也在相同的网络接口上有桥接，就会引起网络环路导致网络无法访问。  

![ROS登录](img/p0/ros_login.png)

开机后，显示如图内容，即表示 RouterOS 已经安装成功。

![ROS安装完成](img/p0/ros_vm_ok.png)

RouterOS 的默认账户为 **“admin”** ，密码 **为空** 。  

至此，RouterOS 虚拟机安装步骤完成。