软路由实践
前言
2024/06/29
经过将近一年的使用体验,发现 All In One 模式的软路由,存在很多不足。
- 使用的猫棒,发热量非常大,手放上去感觉会起水泡。这肯定会给稳定性带来影响。
- 在折腾 软路由/NAS 的过程中,经常需要断网、重启等操作,这无疑会影响其他使用网络的人。
- 软路由/NAS 基本就是代表着不稳定,所以网络体验给人带来的感觉就是不好。
这些不足,网上都有人描述。不过自己折 腾了一遍,才深有体会。所以后续还是使用光猫 + 2.5G路由器的组合,顶多在 NAS 上根据实际需求,使用 iStroreOS 搭建旁路由。
2023/11/11
经常折腾PC,所以对软路由了解甚久,这次就来折腾一下吧。
经过大约一周的折腾,最后敲定为 爱快(主路由)+ iStoreOS(旁路由)的双路由模式。主要是因为iStoreOS一直拨号不成功,实在没办法才这样,个人意愿还是能少部署一个则少一个。
硬件:
系统:
- Proxmox Virtual Environment,虚拟化平台,后续想着还可以在上面折腾Mac OS。
- iKuaiOS,试了很久,只有它拨号成功了,且其路由能力很强大,设置DHCP规则很灵活。
- iStoreOS,基于OpenWRT深度定制的软路由系统。
软件:
- OpenClash, 安装在iStoreOS下,负责科学上网。
IP分配:
设备 | IP | 作用 | 详释 |
---|---|---|---|
猫棒/光猫 | 192.168.1.1 | 桥接 | 光电信号转换 |
爱快 | 192.168.2.1 | 主路由 | PPPoe拨号,内网管理 |
iStoreOS | 192.168.2.2 | 盘路由 | 安装各种插件 |
PVE | 192.168.2.3 | 底层平台 | 管理虚拟底层平台 |
MediaServer | 192.168.2.4 | NAS服务器 | 用于存储文件,Jllyfin |
Ubuntu22.04 / Linux Mint 21.3 | 192.168.2.5 | LXC / VM | Linux虚拟机 |
Windows11(虚拟机) | 192.168.2.6 | 直通核显,HDMI输出 | 挂迅雷? |
Proxmox Virtual Environment
下载最新固件,使用Rufus烧录至U盘。上电R86S后立即按 F7 进入 BIOS 设置,选中U盘作为引导启动项,后续的按照提示操作即可。
在系统安装引导界面,可以设置磁盘分配空间,我们可以预留一部分空间给Windows使用,如果有多系统需求的话。
如果此时需要 iKuaiOS 拨号才能上网,可先配置 iKuaiOS 拨号成功后再继续后续PVE配置。
安装完系统之后,需要修改DNS,默认的DNS只有 127.0.0.1
。
nameserver 192.168.1.1
nameserver 8.8.8.8
nameserver 127.0.0.1
替换国内镜像源:
# 基础系统(Debian)
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
# Proxmox
source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# ceph 仓库
if [ -f /etc/apt/sources.list.d/ceph.list ]; then CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'`; source /etc/os-release; echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME $VERSION_CODENAME no-subscription" > /etc/apt/sources.list.d/ceph.list; fi
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak # 不使用enterprise仓库
# CT Templates
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
systemctl restart pvedaemon
apt update && apt upgrade
pveam update
如果在安装完系统后,想要重新修改IP,可以打开/etc/network/interfaces
文件,更改 vmbr0 的 address 即可。修改完成后需要重启。
auto lo
iface lo inet loopback
iface enp1s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.1.100/24
gateway 192.168.1.1
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
iface enp2s0 inet manual
# ......
硬件直通
在kernel中启用I/O Memory Management Unit(直通PCI设置之前必须要启用IOMMU):
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
加载相应的内核模块:
vfio
vfio_iommu_type1
vfio_pci
确认核显的供应商(Vendor)和设备(Device) ID:
lspci -nn
......
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [UHD Graphics] [8086:46d0]
......
在PVE上屏蔽系统中的开源显卡驱动避免开启显卡被系统加载,以及关掉核显使用(后面Windows直通显卡需要用到,屏蔽后,PVE将无法使用HDMI输出,即也无法正常通过显示器查看控制台):
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
options vfio-pci ids=8086:46d0
options kvm ignore_msrs=Y
更新grub及initramfs,然后重启:
update-grub
update-initramfs -u -k all
reboot
重启完成后,验证 IOMMU 是否已启用,运行:
dmesg | grep -e DMAR -e IOMMU
......
[ 0.062560] DMAR: IOMMU enabled
......
应该能在输出中看到上述一行。
验证 IOMMU 中断重映射已启用,运行:
dmesg | grep 'remapping'
[ 0.153403] DMAR-IR: Enabled IRQ remapping in x2apic mode
应该能在输出中看到上述一行。
存储策略和分区调整
默认情况下,pve安装时会在硬盘上自动创建如下两个区域:
- 区域local:类别为Directory,支持文件目录结构,我们可以看到具体 的文件夹和文件。
- 区域local-lvm:类别为LVM-Thin,不支持文件目录结构,即我们看不到文件路径。
网络上大多都是建议把 local-lvm 删除合并至 local。这里我也产生了这样的需求,R86s目前只有一个nvme硬盘,后续还需要其作为NAS存储共享文件。
lvremove /dev/pve/data
lvextend -rl +100%FREE /dev/pve/root
然后在 数据中心→存储→删除 local-lvm
。双击编辑 local
,内容里添加 磁盘映像
和容器
。这样做了,我们就可以进入目录/var/lib/vz
查看所有的内容了。
root@pve:/var/lib/vz# tree /var/lib/vz
/var/lib/vz
├── dump
├── images
├── private
├── snippets
└── template
├── cache
└── iso
8 directories, 0 files
使用df -h查看,根目录已经扩大了。
root@pve:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 3.2G 1.6M 3.2G 1% /run
/dev/mapper/pve-root ext4 908G 3.3G 867G 1% /
tmpfs tmpfs 16G 43M 16G 1% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs efivarfs 192K 86K 102K 46% /sys/firmware/efi/efivars
/dev/nvme0n1p2 vfat 1022M 12M 1011M 2% /boot/efi
/dev/fuse fuse 128M 16K 128M 1% /etc/pve
tmpfs tmpfs 3.2G 0 3.2G 0% /run/user/0
另外,PVE是不支持安装至eMMC的,在其Forum上找到这么一段话:
Proxmox VE is not made for install on USB/eMMC/CFCard or equal.
Proxmox VE have to be installed on a SSD/HDD. The OS will write some GB logs per day.
A USB/eMMC/CFCard or equal will not last long with this many writing.
但是我们可以将R86s的128GB eMMC在装上PVE之后,挂载至系统中,作为存储使用。例如挂载至其默认的ISO存储位置:/var/lib/vz/template/iso/
。
查看emmc的设备符:
root@pve:~# fdisk -l
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HP SSD EX900 1TB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 85BDD2FE-0974-4DAE-AA8D-DA5E7EF96B7A
Device Start End Sectors Size Type
/dev/nvme0n1p1 34 2047 2014 1007K BIOS boot
/dev/nvme0n1p2 2048 2099199 2097152 1G EFI System
/dev/nvme0n1p3 2099200 1953525134 1951425935 930.5G Linux LVM
Disk /dev/mmcblk0: 116.5 GiB, 125090922496 bytes, 244318208 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
......