前言
之前一直是裸机安装 OpenWrt
,但是最近遇到了一些奇怪的问题,路由总是莫名其妙的死掉,一点迹象也没有,log 中也无有效内容,再加上 OpenWrt
物理连接不需要密码就能进入 root shell
,还是过于不安全了,决定将 OpenWrt
迁移至 PVE。
CT vs VM
起初听取了师兄的建议,采用了更方便迁移的方式:PVE 的 Container,这个东西的优势在于,有 rootfs
就能跑,不需要安装什么的,把当前的整个 /
目录复制下来打个包(tar.gz
),上传到 PVE 的 template
,然后通过这个 template
建立 lxc
,即 PVE 的容器,就可以运行了。
问题 1:
一开始就是 dnsmasq
无法启动,尝试启动总是报错,原因是 procd
的参数有问题,注释掉 /etc/init.d/dnsmasq
中的 procd_add_jail
部分可以解决,dhcpd
成功启动。
问题2:
创建的 lxc
没有选择特权,而 lxc
作为一个半虚拟化的工具,其很多硬件是与 host
共享的,这其实就是我决定从 lxc
换回 vm
的主要原因。 OpenWrt
这种软路由系统不可避免的要创建一些网络接口,比如 tun
、tap
等,而半虚拟化需要 host
中有这些网络设备,并且要单独为 lxc
开启权限,这极大地增加了虚拟化平台和系统之间的耦合度,并且带来了很多不必要的麻烦。
最终我还是使用了 VM
作为软路由的载体。
Install OpenWrt VM on PVE
1. 上传镜像
略,这一步不会的还是别折腾软路由了。
2. 新建虚拟机
记住 VM ID
,一会儿还得用,操作系统选不使用任何介质,只有这两个需要注意的选项,其他默认或自行扩容,还有网卡,很好配。这两个选项主要是因为 OpenWrt x86
的镜像,真的就是镜像,不是安装,物理机安装只需要 dd
写入就行的,不包含一般 iso
文件拥有的安装用的 boot image
,选择了这个文件会让 PVE 没法引导,也因此是采用直接导入硬盘的方式,而不用新建一块硬盘。
3. 导入磁盘镜像
进 PVE host
的终端,执行
1 |
qm disk import $VM_ID /var/lib/vz/template/iso/$IMAGE_NAME local-lvm |
将镜像作为硬盘导入 VM
,等 successfully imported
了可以去 VM
的硬件那儿给硬盘扩容,毕竟导入进去多大就只有多大,如果要装一些插件的话显然是不够用的。
4. ____,启动!
给 VM
连上网,就可以开始配了,或者直接从之前的备份恢复。
要扩容硬盘,直接用官网给的方式
先扩容分区
1 2 3 4 5 6 7 8 9 10 11 12 |
# Install packages opkg update opkg install parted # Identify disk name and partition number echo -e "ok\nfix" | parted -l ---pretend-input-tty # Expand root partition parted -s /dev/sda resizepart 2 100% # Apply changes reboot |
再扩容文件系统
1 2 3 4 5 6 7 8 9 10 11 12 |
# Install packages opkg update opkg install losetup resize2fs # Map loop device to root partition losetup /dev/loop1 /dev/sda2 # Expand root filesystem resize2fs -f /dev/loop1 # Apply changes reboot |
总结
不难,折腾,尽量搞一个稳定的环境,毕竟影响整个子网的上网,PVE 方便迁移,以后换设备了也好搞,需要用到新的设备的,不管虚拟还是实体,还是用 VM
吧,比较省心。