## 0.前期准备 一台工作正常的 PVE 服务器, PVE 安装与配置方法参考我的系列文章 [Proxmox VE 折腾手记](https://gitee.com/callmer/pve_toss_notes) 。 一台已经联网的 `前置路由器` 或 `光猫` ,用于 RouterOS 系统激活。 访问 RouterOS 的官网 [Mikrotik](https://mikrotik.com/download/chr) 下载最新的 Winbox 软件、RouterOS 镜像以及镜像文件对应的校验信息。 ### Winbox: 根据所使用的操作系统类型,下载合适的 Winbox 客户端软件。 ![下载Winbox](img/p00/dl_winbox.jpg) ### RouterOS 镜像: PVE 中运行 RouterOS 需要 `.img` 格式的镜像,因此选择 `RAW disk` 。 ![下载RouterOS](img/p00/dl_ros.jpg) ## 1.创建 RouterOS 虚拟机 ### 1.1.常规 登录到 PVE 后台后,进入新建虚拟机流程,并打开底部 `高级` 选项。 `节点` 选择当前设备,`VM ID` 和 `名称` 可自定义。 `启动/关机顺序` 和 `启动延时` 可按需调整。 ![虚拟机-常规](img/p00/ros_pve_init.jpg) ### 1.2.操作系统 操作系统 `类别` 选择 `Linux` 、内核 `版本` 选择 `7.x - 2.6 Kernel` 即可,且无需使用引导介质。 ![虚拟机-操作系统](img/p00/ros_pve_guestos.jpg) ### 1.3.系统 `显卡` 选择 `默认` ,`机型` 选择 `q35` ,对 `PCIE` 直通设备有更好的支持。 新版的 RouterOS 对 `Qemu Agent` 支持良好,因此建议勾选 `Qemu 代理` 选项。 如果后续使用过程中 RouterOS **不稳定** ,请保持 `机型` 选择 `默认 (i440fx)` 。 ![虚拟机-系统](img/p00/ros_pve_os.jpg) ### 1.4.磁盘 后续将导入 RouterOS 镜像文件并生成磁盘,因此移除所有自动添加的磁盘。 ![虚拟机-磁盘](img/p00/ros_pve_hd.jpg) ### 1.5.CPU 请根据物理设备 CPU 资源使用情况来分配 RouterOS CPU 资源。 CPU `类型` 选择 `host` ,`核心` 根据物理 CPU 核心数进行酌情设置。 如果设备有多路 CPU 推荐启用 **NUMA** 。 如果设备 CPU **超分(Over-Commit)** 比较严重,可适当将 `CPU 权重` 参数翻倍,让 RouterOS 获得更多的 CPU 时间。 ![虚拟机-CPU](img/p00/ros_pve_cpu.jpg) ### 1.6.内存 内存一般 `2048MiB` 足够使用,MikroTik 官方给出的 CHR 最低要求是 `256MiB` ,但建议至少分配 `1024MiB` 。 ![虚拟机-内存](img/p00/ros_pve_mem.jpg) ### 1.7.网络 需要注意,当前页面只能设置单个网络设备,而网络设备的添加顺序将和 RouterOS 内部显示的网卡顺序一致。 因此,先仅添加 `WAN` 对应的网口( 此处为 `vmbr0` ),`型号` 选择 `VirtIO (半虚拟化)` ,并取消勾选 `防火墙` 选项。 对于使用硬件直通的小伙伴,可根据实际情况来修改此处网络设备选项。 推荐在 **Multiqueue** 处根据前面设置的 CPU 数量进行网卡多队列设置,设置比例为 1:1 。 即有 n 个 CPU 核心,此处多队列也设置为 n 。 ![虚拟机-网络](img/p00/ros_pve_eths.jpg) 根据官方文档中对 `Multiqueue` 的描述: ![虚拟机-网络-网卡多队列](img/p00/ros_pve_eths_multiqueue.png) 因此,对于使用 `VirtIO` 网卡的虚拟机,特别是作为路由器使用且需处理大量带宽时,可以在一定程度上提高其网络吞吐性能。 但 RouterOS v6 版本对 `Multiqueue` 可能未良好支持,因此建议 RouterOS v7 及以上版本开启该选项。 ### 1.8.确认 接下来查看设置总览,确认无误后,即可点击 `完成` 。 ![虚拟机-确认](img/p00/ros_pve_confirm.jpg) ## 2.调整网络设备 此时,查看虚拟机详情页,可以看到刚创建好的虚拟机。 ![虚拟机参数](img/p00/ros_hw_review.jpg) 去掉 CD/DVD 驱动器后,开始添加网络设备。 ![虚拟机添加网卡](img/p00/ros_add_eths.jpg) 重复添加网络设备,去掉防火墙,并增加网卡多队列参数后,示例如下: ![虚拟机添加网卡完成](img/p00/ros_add_eths_done.jpg) ## 3.添加 VirtIO RNG 为确保系统拥有充足的可用熵,需为 RouterOS 虚拟机添加 `VirtIO RNG` 熵源。 点击顶部 `新增` 菜单,选择 `VirtIO RNG` 。 ![添加RNG](img/p00/pve_add_rng.jpg) `熵源` 选择 `/dev/urandom` ,其余参数保持默认即可。 ![RNG参数](img/p00/pve_add_rng_details.jpg) ## 4.创建 RouterOS 系统盘 ### 4.1.获取镜像文件 使用终端工具登录到 PVE 服务器,在 `/tmp` 目录中创建一个目录用于下载 RouterOS 镜像文件。 ```bash ## 创建并进入目录 $ mkdir -p /tmp/RouterOS && cd /tmp/RouterOS ## 下载 RouterOS 镜像校验文件 $ curl -LR -O https://download.mikrotik.com/routeros/7.21.5/chr-7.21.5.img.zip.sha256 ## 下载 RouterOS 镜像文件 $ curl -LR -O https://download.mikrotik.com/routeros/7.21.5/chr-7.21.5.img.zip ``` 镜像文件下载完成后,使用官方提供的校验文件验证镜像完整性。 ```bash ## 检查文件是否存在 $ ls -lah ## 执行镜像文件校验 $ sha256sum --check chr-7.21.5.img.zip.sha256 #### 镜像校验成功示例输出 chr-7.21.5.img.zip: OK ``` 由于镜像文件为 `zip` 压缩格式,无法直接使用,因此需要对其解压缩,执行以下命令,解压出 `.img` 格式镜像。 ```bash ## 将镜像文件解压缩 $ python3 -m zipfile -e chr-7.21.5.img.zip "$(pwd)" ``` ### 4.2.导入镜像文件 在创建 RouterOS 虚拟机时,曾指定了 `VM ID`,使用该 `VM ID` 将 RouterOS 镜像导入 PVE 系统,演示中为 **`101`** 。 ```bash ## 将 img 镜像导入虚拟机中 $ qm importdisk 101 chr-7.21.5.img local-lvm #### img 镜像导入示例输出 unused0: successfully imported disk 'local-lvm:vm-101-disk-0' ``` ### 4.3.调整虚拟机磁盘设置 磁盘导入成功后,虚拟机硬件列表中将显示一块未使用的磁盘设备,可鼠标 **双击** 该设备进行配置调整。 ![启用磁盘](img/p00/ros_hd_use.jpg) 当宿主机使用 SSD 作为物理存储设备,并且虚拟磁盘采用 Thin Provisioning (精简置备)模式时,可考虑开启以下选项: - `丢弃` ( `Discard` ) 选项,有助于存储空间回收。 - `SSD 仿真` ( `SSD Emulation` ) 选项,让虚拟机将虚拟磁盘视为 SSD 存储设备。 在弹出的对话框中,确认 `IO thread` 选项为 **勾选** 状态,并点击 `新增` 。 ![调整磁盘参数](img/p00/ros_hd_iothread.jpg) 导入的镜像仅具备 `128MiB` 磁盘空间,为方便后续使用,可通过 `qm` 命令直接将该磁盘调整至目标容量。 ```bash ## 将镜像容量设置为 2G $ qm disk resize 101 scsi0 2G #### 镜像扩容示例输出 Size of logical volume pve/vm-101-disk-0 changed from 128.00 MiB (32 extents) to 2.00 GiB (512 extents). Logical volume pve/vm-101-disk-0 successfully resized. ``` 或 **单击** 选中该磁盘,然后使用 `磁盘操作` 菜单中的 `调整大小` 选项对磁盘镜像进行扩容。 ![磁盘扩容-2](img/p00/ros_hd_resize.jpg) 本文作为演示,在弹出的对话框中,给该磁盘仅增加 `1.875GiB` 磁盘空间。 ![磁盘扩容-3](img/p00/ros_hd_add1G.jpg) 镜像磁盘扩容后,在虚拟机 **初次启动** 时,RouterOS 会根据磁盘空间自动扩容内部文件系统。 ![磁盘扩容-4](img/p00/ros_hd_finish.jpg) ## 5.创建 RouterOS 日志盘 RouterOS 的日志一般记录在内存中,当系统重启后,历史日志将会丢失。 而使用附加硬盘来记录 RouterOS 的日志,可在系统意外重启时看到历史日志,方便追溯问题。 点击顶部 `新增` ,选择 `硬盘` : ![PVE添加硬盘](img/p00/pve_add_hd.jpg) `总线/设备` 选择 `SCSI` ,设备编号 PVE 会自动设置,演示中为 `1` 。 `磁盘大小` 根据 PVE 服务器资源剩余情况酌情设置,演示为 `1GiB` 。 ![PVE添加硬盘参数](img/p00/pve_add_hd_details.jpg) 日志盘添加完成后,如图所示。 ![PVE添加硬盘完成](img/p00/pve_add_hd_done.jpg) ## 6.调整虚拟机配置参数 初创的 RouterOS 的配置参数如下,需要进一步调整的参数包括: - 开机自启动(建议在 RouterOS 完全设置好之后再修改) - 启动/关机顺序(建议在 RouterOS 完全设置好之后再修改) - 引导顺序 - 使用平板指针 ![ROS虚拟机原始参数](img/p00/ros_vm_origin.jpg) ### 6.1.设置开机自启动 开机自启动设置为 “是” ,启动顺序推荐如下: - `启动/关机顺序` 为 `1` ,表示该虚拟机第一个启动,最后一个关机 - `启动延时` 为 `15` ,表示该虚拟机启动后,延迟 `15` 秒再启动下一个虚拟机 ![ROS开机自启动](img/p00/ros_vm_autostart.jpg) ### 6.2.修改引导顺序 在 `net0` 设备处,**取消勾选** “已启用” 复选框。 在 `scsi0` 设备处勾选 “已启用” 复选框,并通过排序功能将其拖拽至首位,点击 `确定` 即可。 ![ROS引导项](img/p00/ros_vm_boot.jpg) ### 6.3.修改平板指针设置 关闭 `使用平板指针` 选项,可以一定程度上降低虚拟机的 CPU 使用率。 ![ROS虚拟机关闭平板指针](img/p00/ros_vm_tablet.jpg) 修改完成后,总体情况如下,等待 RouterOS 完全配置好,运行无异常之后,即可开启该虚拟机的 `开机自启动` 选项。 ![ROS虚拟机参数调整完成](img/p00/ros_vm_finish.jpg) ### 6.4.设置虚拟机备注信息 进入左侧虚拟机 `概要` 页面,修改虚拟机的备注信息。 ```bash ### 服务器信息 - 系统: RouterOS - 用途: 主路由系统 - 自启: 是 - 用户: admin ( 只读 ) - 用户: fox ( 管理 ) - IPv4: 172.16.1.1/24 - IPv6: DHCPv6 Client ``` ![ROS虚拟机备注](img/p00/ros_vm_notes.jpg) ## 7.虚拟机开机 接下来检验 RouterOS 虚拟机是否能正常启动,切换至虚拟机的 `控制台` 选项卡即可开机。 当前 RouterOS 尚未进行任何配置,不会对现有网络环境造成影响,但需留意后续配置细节:若 RouterOS 设置了内部网络接口桥接,而 PVE 环境中已有其他路由系统(例如 OPNsense 防火墙)在相同网络接口上启用桥接功能,可能会引发网络环路,导致网络无法正常访问。 待虚拟机启动后,若控制台显示如图所示内容,即表明 RouterOS 已安装成功。 ![ROS登录](img/p00/ros_login.jpg) RouterOS 的默认账户为 `admin` ,无需密码即可登录。 ![ROS安装完成](img/p00/ros_vm_ok.jpg) 至此,RouterOS 虚拟机安装步骤完成。