家用 All in One 服务器环境搭建 (三) - Openwrt 系统与网卡直通

date
Oct 18, 2022
slug
all-in-one-home-server-setup-install-openwrt
status
Published
tags
System
Network
summary
在 PVE 中安装 Openwrt 作为主路由拨号上网, 同时运行 OpenClash 科学上网, 以及 Wireguard 作为 VPN 网关. 为了提升性能和降低 CPU 负载, 还配置了网卡直通
type
Post

观点输出

一直有个疑惑, 为什么网上很多软路由相关的视频文章都在教大家怎么装双系统 (ROS 或者 iKuai 做主路由, Openwrt 做旁路由). 了解了一下相关技术, 看了一些讨论. 这是很多双软路由玩家的一般做法:
系统架构方面, 很多人使用 ESXi 或者 PVE 搭建虚拟化平台, 并在上面跑 iKuai 或者 ROS 作为主路由, Opewrt 作为旁路由, 或者用 iKuai 的虚拟化功能, 在 iKuai 里虚拟化一个 Openwrt 出来.
功能方面, 一般用 iKuai 或者 ROS 拨号上网, 多拨, 流控, DNS 加速, Openwrt 则装各种插件实现科学上网, 解锁网易云音乐, 京东签到等.
但是我个人并不认同很多人声称的双软路由系统的种种优点:
  • iKuai 和 ROS 是商业系统, 所以稳定; Openwrt 是开源系统, 所以不稳定?
    • 认为商业系统比开源系统稳定本身就是无稽之谈…Windows 一定比 Linux 更稳定吗?
      事实上, Openwrt 基于 Linux 内核, 有庞大的社区进行开发维护, 系统本身的稳定性并不存在问题.
      很多人的 Openwrt 不稳定一般有这些原因:
    • 固件本身的问题. 很多固件编译阶段就非常潦草, 各种软件版本冲突, 不兼容也不管, 这些都是稳定运行的隐患. 因此要追求稳定建议自己编译固件的时候自己看好软件版本, 减少冲突, 或者选择官方固件后期自己装插件. 晚上流传的很多固件质量并不高.
    • 使用理念的问题. 要让网络运行问题, 最好的做法是将各种服务按照重要性等级等做好划分和隔离, 软路由只不过是一个可玩性强一点的系统, 本质上仍然是个路由器, 因此就不要折磨软路由在上面装一大堆各种各样的插件了. 很多诸如京东签到这类的事情完全可以放在虚拟机里或者用 Docker 运行. 软路由上运行一大堆无关软件也就增大了可能出故障的概率.
  • 把拨号上网的主要功能和科学上网的功能分开更稳定?
    • 说实话这种思路还是很正确的. 正常上网是必须保证的, 在此之上才谈科学上网等功能. 个人认为将功能分离到两个软路由系统带来的稳定性收益小于因此付出的代价.
    • 折腾科学上网等功能导致网络不稳定也就那么几天, 搞完了不久稳定了, 忍忍就过去了(
    • 双软路由系统增加了系统复杂度和配置复杂度, 一定程度上增大了故障机率
    • 双软路由系统带来性能损失
    • 所以如果在正常上网之外有其他需求, 完全可以考虑都放在 Openwrt 一个系统上.
个人的选择是, Openwrt 做主路由, 通过 OpenClash 完成科学上网, DNS 分流等功能也通过 OpenClash 实现, 另外运行 Wireguard 作为 VPN 网关; 一些应用如 DDNS, Nginx, Jellyfin, Calibre-web 等全部通过 Docker 部署在 LXC 容器中. 这样软路由只负责上网相关的功能, 保证其他服务出问题时不影响软路由. 目前这套配置稳定运行中.
不知不觉有了上面一大堆观点输出…以上都是我个人结合自己的使用经验的一些看法和思考, 有不同意见欢迎讨论. 下面还是进入正题, 说说在 PVE 上如何安装 Openwrt 并配置网卡直通.

获取固件

直接下载

网上有很多编译好的固件可供下载, 搭建可以根据自己的需求自行选择. 不推荐选择插件太多的固件, 过于臃肿, 且很多功能根本用不到.
这里放一个官方编译的固件下载地址:
国内可以在阿里云镜像站下载:
小白在镜像站上可能找不到在哪下载, 或者不知道下载哪一个文件. 上面的网页打开后进入 openwrt/releases 会看到很多以版本号命名的目录, 点进去就是对应版本发布的编译好的镜像. 选择你像要的版本, 进入后会看到 packagestargets 两个目录, 前者是 Openwrt 系统的各种软件包, 后者是系统本身. 进入 targets 目录之后有很多以架构命名的目录, 选择自己的硬件架构即可. 最后会看到采用不同配置编译出来的系统, 例如 openwrt-22.03.0-x86-64-generic-squashfs-combined-efi.img.gz 表示系统是 openwrt, 版本是 22.03.0, 架构是 x86-64-generic, 文件系统是 squashfs, 引导方式是 UEFI, 镜像格式是 img, 使用 gzip 压缩成了 gz 格式.
下载之后解压就得到了 img 格式的系统镜像文件.

自行编译

如果对固件有一些特别的要求, 比如架构, 预安装的插件种类等, 那么可以考虑自己编译固件.
比较推荐 Lean 维护的 Lede 仓库:
里面包含系统本身以及很多插件, 常用的插件基本都可以从这里找到, 网上很多预编译固件也是从这里编译而来.
不过之前如果没有接触过相关领域的话, 编译固件还是很有可能会遇到一些困难的. 好在网上有一些不错的教程:
你还可以配置 GitHub Actions 自动编译固件:

安装系统

网上很多预编译的固件没有提供 iso 镜像, 提供的是 img 格式, 安装方式与其他系统略有不同, 需要将 img 镜像作为虚拟磁盘挂载到虚拟机, 并配置从该虚拟磁盘启动. 如果配置错误, 则可能出现 No Bootable Device 之类的报错.
  • 在管理界面创建虚拟机. 几个注意点:
    • 操作系统 选择 不使用任何介质
    • 磁盘 不需要配置磁盘
    • 内存方面, 512 MB 就已经足够
  • 在 Web 管理界面上传镜像. PVE 节点 - local - ISO 镜像 点击上传即可. 上传的镜像会存储在 /var/lib/vz/template/iso/ 目录. 如果找不到也可以使用 find 命令查询, 例如:
    • find / openwrt.img
  • 上传之后导入虚拟磁盘:
    • qm importdisk 100 /var/lib/vz/template/iso/openwrt.img local-lvm
  • 导入完成后在虚拟机 硬件 界面可以看到新添加的硬盘
  • 在虚拟机 选项 - 启动顺序 设置虚拟机优先从刚才添加的硬盘启动即可
配置完成后可以等后面配置好网卡直通后再启动系统.

网卡直通

虚拟网卡相当于在硬件网卡与虚拟机系统之间多了一层逻辑层, 一定程度上降低了性能和效率, 因此可以选择直通网卡来提升性能并降低 CPU 使用率.
在 Openwrt 虚拟机页面中选择 硬件 - 添加 - PCI 设备 找到要直通的网卡, 添加所有需要直通的网卡之后就可以启动系统.
再次提醒, 不要将所有网卡全部直通, 给 PVE 系统留出一个管理口.
当然, 直通网卡对性能提升有限, 尤其对于 N5095 这样性能足够强的 CPU, 直通网卡并不能提升网络极限性能, 只不过稍稍降低了高负载情况下的 CPU 负载. 各人可以视自己的情况选择是否直通.
为了保证运行稳定性, 直通网卡后可以在 PVE 虚拟机设置中找到 内存 - 高级设置 并关闭 内存 Ballooning .

修改 LAN 地址

不同系统默认 LAN 地址不同, 可以通过两种方式调整:
  • 手动设置电脑 IP 地址到与 Openwrt 处于同一广播域, 登录 Openwrt 系统后在 网口 - 接口 - LAN 设置
  • 在 PVE 管理界面中通过 Shell 功能连接到 Openwrt 命令行, 通过命令行修改. 修改 /etc/config/network 文件即可
 

© Richard Wang 2021 - 2023