软路由入门
点击展开更新日志
2024
11-16
- 创建了这篇文
- 补充了 PVE
11-19
- 更新 OP 镜像自编译部分
- opkg 软件源
11-19
- 更新 iKuai 部署
- 更新封面
- 补充截图
11-27
- 更新 Adguard Home 配置
- 新增 LXC Ubuntu 安装
- 新增 lucky 部署
11-28
- 新增“影视库”章节
2025
02-07
- 更新 PVE 系统更新命令
02-14
- 更新PVE备份和恢复
- 废弃 Ubuntu 安装章节
- 更新 Win10 安装章节
02-14
- 新增 LEDE 自编译 OpenWrt
- 新增 passwall 配置
0412
更新底层更换为 Windows Server 部分,主要是驱动安装。
nexttime
会有些什么呢 ˋ( ° ▽、° )
¶源起
折腾这种事,一旦开始了就很难再停下来。随着接触的设备越多,手上的设备越多,总会逐渐了解到更多相关、更多认知之外的新事物,然后便是产生兴趣,再加上有点闲钱,有点时间,不自觉,就已经开始踏入到另一个圈子——软路由。
去年是买了一个小米的 AX3000T,用着倒也没有什么问题,虽然一直想着刷成 OpenWRT 之类,但是忌惮成砖之后救不回来,属于是有心无胆。今年双十一之前在 B 站恰好刷到了软路由,难免心痒,看了眼自己的荷包,咬咬牙,这个月就收敛一下,买了!
关于本文的组织结构及排版,均为实际部署过程中修正过的建议安装顺序(实际牵扯太多已经不可调整,如果重新部署建议按照这个顺序)。至少目前已基本实现我的需求,如果你也和我差不多,可以参考一下,毕竟想要达到什么程度,还得自己上手慢慢打磨。
¶硬件
康奈信 7505
- CPU:Intel 奔腾 7505
- 2C4T 最大睿频 3.5GHz
- 最大支持 64G D4 内存
- 核显 Intel 11 代 UHD 最大 1.25GHz
- 网卡:I226V x6
- 接口:USB3.0x2 USB2.0x2 COMx1 TYPE-Cx1
- 存储:M22280x1 SATA2.5x1
- 显示:HDMI2.0 DP
¶整体架构
软硬件设备
- ONT: 光猫
- PVE: 软路由
- iKuai: 主路由,流量控制(蹭的室友的网,有时候上传太大会有影响),DHCP。
- ImmortalWrt: 旁路由,承担广告过滤等扩展功能
- DSM: 黑群(只是因为没用过)
- AX3000T: 小米路由,主要做无线 AP,探索世界。ImmortalWrt
¶底层选择——PVE
刚买来的时候开机是已经装好了 ikuai,不过我最开始的打算,就不单单只想装个 ikuai[^1],所以到手就开始准备重装系统。可以选择直接单装软路由系统,也可以选择先装一个虚拟平台,在这个基础上再部署其它应用,这里选择后者。
纠结了几十分钟吧,翻了下网上的帖子,最终还是选择了 PVE ,无他,开源。
声明:
截止 2024-11-16,官网最新版本为 8.2,以下所有操作均在此版本上进行,其它版本可参考。不保证所有操作和命令一切顺利,不保证在其它版本上的兼容性。
¶PVE 安装
- 先到 PVE 官网下载 iso 镜像,直接下载最新版本即可;
- 将镜像刻录到启动 U 盘,如果不想频繁格式化 U 盘(每次刻录都得格式化一次),建议使用 Ventory;
- 将 U 盘插入主机,重启进入 BIOS(点按 del),如果不是就找找其它教程/谷歌;
- 选择 PVE 镜像启动,两次默认直接回车,进入 GUI 安装界面
- 管理 IP:任意 192.168.x.x 局域网 IP 皆可,不建议用 192.168.x.1 的地址,这个是计划留给 OpenWrt 的。
- 网关:192.168.x.1
- 主机名、邮箱、密码自定义
- 磁盘:注意不要选择到启动盘
- 安装完成后会自动重启,此时拔下 U 盘,否则重启就还是会进入 Ventory。重启加载完成后会看到登录提示,上面有一个类似
https://192.168.x.x:8006
的管理地址; - 找一根网线,连接主机和电脑(此时主机上应该只有这一个网卡接到电脑,暂时先不要接入网线),修改电脑 IPv4 为手动模式,设置 IP 为【192.168.x.x】,和刚才设置的 PVE 管理地址同一网段,子网掩码【255.255.255.0】,网关【192.168.x.1】,DNS【8.8.8.8】,浏览器打开设置的 PVE 管理地址的8006端口
https://192.168.x.x:8006
,即可进入 PVE 管理页面; - 先选择语言为中文,然后输入用户名【root】,密码【安装时设置的】,登录。至此,PVE 安装完成。
¶PVE 优化
其实这个时候就可以直接使用了,但是显然刚才登录时的弹窗貌似让人有点不爽;软件更新源也是国外源,速度有影响;概览界面看到的信息也比较少等等(但实际上好像也并不是不可忍受的诶(❁´◡`❁)
添加网卡
选择【pve】节点-【网络】-【创建】-【Linux Bridgr】,勾选【自动启动】,在桥接端口填入上面 ``enp2s0类似网卡名称,需要用的话都要加上,然后会有
vmbr0` 这类多个设备可供虚拟机/CT 使用。
注意实际网卡名称!我这里网卡名称是 enpxs0
,如果你的不是这个,根据实际情况修改。暂时用不到的网卡(比如 enp7s0
)可以先不用添加。
合并 lvm
参考 alay.cc
PVE 在默认安装完成时会把存储划分成 local
和 local-lvm
两块,本意是将 lvm 镜像和虚拟机分开存放,但实际使用中往往一个不够用,一个用不完。所以一般是将 local-lvm
的空间全部分配给 local
,自己做管理。
如果在此之前已经创建了虚拟机,需要先移动到 local
:编辑 【local】,勾选所有内容,在虚拟机配置栏,选择磁盘,移动到其它磁盘上备份。
先执行命令删除卷
1 | lvremove /dev/pve/data |
然后在 PVE 【数据中心】-【存储】上选择 local-lvm
删除。
删除订阅弹窗
非商业版会在每次登录时弹出提醒,执行删除:
1 | sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service |
按 Shift + F5
清理浏览器缓存重新登录。
配置软件源
默认是企业订阅版,如果不做修改,在使用 pveceph init 进行 ceph 初始化安装的时候会将整个环境破坏。主要还是因为下载速度的原因。
建议用专门的 SSH 工具(XShell、MobaXterm 等)连接,也可以使用 PVE 页面上的控制台。
-
删除企业源
1
2
3rm -rf /etc/apt/sources.list.d/pve-enterprise.list
# 不放心的可以mv备份
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak -
更新 Proxmox 软件源
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 任选其一即可
# 南大NJU源
echo "deb https://mirrors.nju.edu.cn/proxmox/debian bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
apt update && apt dist-upgrade #更新软件,可不执行
# 中科大源
wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
apt update && apt dist-upgrade #更新软件,可不执行
# 清华源
echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list -
更新 Debian 系统源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 阿里源
sed -i.bak "s#ftp.debian.org/debian#mirrors.aliyun.com/debian#g" /etc/apt/sources.list #阿里Debian源
sed -i "s#security.debian.org#mirrors.aliyun.com/debian-security#g" /etc/apt/sources.list #阿里Debian源
apt update && apt-get install -y apt-transport-https ca-certificates --fix-missing
# 华为源
sed -i.bak "s#http://ftp.debian.org#https://repo.huaweicloud.com#g" /etc/apt/sources.list #华为Debian源
sed -i "s#http://security.debian.org#https://repo.huaweicloud.com/debian-security#g" /etc/apt/sources.list #华为Debian源
apt update && apt-get install -y apt-transport-https ca-certificates --fix-missing
# 中科大源
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
# 一键替换脚本
bash <(curl -sSL https://linuxmirrors.cn/main.sh) -
更新 LXC 仓库源
1
2
3
4
5
6
7
8
9# 南大NJU源
sed -i.bak "s#http://download.proxmox.com/images#https://mirrors.nju.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm
wget -O /var/lib/pve-manager/apl-info/mirrors.nju.edu.cn https://mirrors.nju.edu.cn/proxmox/images/aplinfo-pve-7.dat
systemctl restart pvedaemon
# 中科大源
sed -i.bak "s#http://download.proxmox.com/images#https://mirrors.ustc.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm
wget -O /var/lib/pve-manager/apl-info/mirrors.ustc.edu.cn https://mirrors.ustc.edu.cn/proxmox/images/aplinfo-pve-7.dat
systemctl restart pvedaemon -
更新 CEPH 源
1
2
3
4echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list #中科大源
cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm.back
sed -i.bak "s#http://download.proxmox.com/debian#https://mirrors.ustc.edu.cn/proxmox/debian#g" /usr/share/perl5/PVE/CLI/pveceph.pm #中科大源 -
更新软件包升级系统
1
2
3
4
5
6# 更新源列表
apt update
# 升级软件包
apt upgrade
# 升级系统
apt dist-upgrade
补充 PVE 显示信息
默认情况就没有截图了,可以看你自己刚装好的情况,补充之后的情况是这样:
主要是增加了温度显示。
提供两个可选:
我这里采用了第一个,Github 里面很详细了:
1 | # 更新 Proxmox VE 软件包 |
如果要还原,则执行以下四条命令:
1 | sed -i '/PVE::pvecfg::version_text();/,/my $dinfo = df/!b;//!d;s/my $dinfo = df/\n\t&/' /usr/share/perl5/PVE/API2/Nodes.pm |
iommu 直通
因为不熟悉这块,不确定是否会产生新问题,暂时没弄。
上面增加 PVE 显示信息的脚本就附带开启了硬件直通。
¶PVE 更新
因为本质上还是 Ubuntu,因此直接在命令行更新即可,包括小版本更新,至于大版本没试过~
1 | apt update |
¶PVE 备份与恢复
¶备份
起因是 手贱 更新系统之后重新执行了一遍上面的硬件直通脚本,然后就挂了。。进入救援模式也没有看出个所以然,然后重装了PVE,容器自然是没有了,后面重装之后痛定思痛,我要备份!
备份的核心就是将外部共享目录挂载到 PVE 上,将备份目录修改到这个共享目录。我的情况是PVE装在软路由上,备份是打算放到 Windows 上,因此以此为例说明。
-
在 Windows 备份盘上创建备份(共享)目录,比如
D:\PVE\backup
; -
设置目录共享和权限;
- 管理员:无需设置权限。(只是自己用的话,没必要单独创建一个用户用来挂载)
- 新创建一个用户:或许需要设置管理员权限才能正常挂载读写,因为我创建了一个普通用户挂载正常,无权限访问(可能和root有关)。
- Everyone:需要启用 Guest 用户。
-
PVE 挂载共享目录:
选择【数据中心】-【存储】-添加【SMB/CIFS】- ID:自定义在 PVE 中显示的名称,比如
pve_bak
- 服务器:共享目录的Windows机器,IP/域名,比如
192.168.19.10
- 用户名/密码:我直接用的个人管理员账户
- 内容:选择【VZDump备份文件】就够了,仅作备份
- Share:如果上面地址和帐密正确可以看到共享目录列表,没有就说明用户名/密码/目录权限/用户权限有问题。选择保存位置
- 启用:勾选
- ID:自定义在 PVE 中显示的名称,比如
-
配置备份
在【数据中心】-【备份】,新增一个备份作业。- 节点:虚拟机/容器位置(一般一个节点没选的)
- 存储:选择上面添加的外部存储,如
pve_bak
- 计划:每周日1:00(你问可以修改吗,不知道哦~)
- 选择模式:所有(按需吧)
- 压缩:ZSTD(都告诉你了,又快又好)
- 模式:停止
- 停止(stop):要停机,能够最好保持数据一致性。
- 挂起(suspend):挂起+snapshot,官方建议直接 snapshot
- 快照(snapshot):停机时间最短,代价是备份数据可能不一致
- 启用:勾选
配置完成后,可以【现在运行】一次,到 Windows 看看备份是否正常。
¶恢复
前面操作和备份一致,需要先将备份目录挂载到 PVE 上,然后就可以在数据中心下面的节点(PVE)上看到挂载目录(pve_bak
),选择【备份】,可以看到之前的备份,选择需要的版本【还原】即可。
已测试过删除已有虚拟机后还原开机,结果杠杠的!
¶底层选择——Windows Server
¶安装
下载地址:MSDN-itellyou
¶驱动安装
¶网卡驱动
参考链接:Windows Server 2022安装Intel I225-V/I226-V驱动 - 夸克之书
-
获取网卡硬件ID
在【设备管理器】-右键【以太网控制器】-【属性】-【详细信息】,属性选择【硬件ID】,复制:
1
2# I226V
PCI\VEN_8086&DEV_125C&SUBSYS_00008086&REV_04 -
修改驱动
将下载的驱动解压,打开PRO2500\Winx64\WS2022\e2f.inf
(2.5G网卡-Windows Server 2022)编辑:
搜索网卡硬件ID(只需要前面一部分):PCI\VEN_8086&DEV_125C
,找到所在行,复制整行到[Intel.NTamd64.10.0...17763]
节下面:
保存后将驱动目录复制到 Windows Server 2022的服务器上。
-
禁用驱动签名和开启测试模式
修改了inf之后,过不了签名验证,需要禁用签名验证才能安装,管理员CMD执行:
1 | bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS # 禁用驱动程序签名强制验证 |
- BCD(Boot Configuration Data):修改Windows启动配置数据
- 开启测试签名后桌面右下角会显示“测试模式”
修改后重启机器。
-
安装驱动
重启后,打开【设备管理器】,右键未知的以太网控制器,选择【更新驱动程序和软件】-【浏览我的电脑以查找驱动程序】,定位到驱动目录,弹出无法验证驱动警告时选择【始终安装此驱动程序软件】,此时驱动就可以安装上了。
依次安装其它网卡驱动。 -
关闭测试模式
驱动安装完成后管理员CMD执行:1
2bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS
bcdedit -set TESTSIGNING OFF重启系统。
¶显卡驱动
打开【设备管理器】-【显示适配器】,此时会看到显示为“Microsoft基本显示适配器”(这是因为没有驱动识别不到显卡,系统默认驱动),没有核显。
7505 CPU 带11代核显,经过实测,有两种方式可以安装上驱动。
-
Windows 更新
安装网卡驱动连上网之后,可以从Windows更新 Intel Display驱动。某一次通过这种方式装上了,后面几次都失败了,需要手动装。 -
驱动安装程序
可选下载 英特尔® 驱动程序和支持助理 进行驱动更新;
建议直接在这里下载驱动安装程序手动安装: 英特尔® Arc™ 和锐炬® Xe 显卡 - Windows*
需要注意的是注意是否支持 CPU 结构,涵盖了11代U之后及独显,如果是11代之前,返回到上一级选择对应条目不清楚CPU代号是什么的,直接搜索进 Intel 官方查看即可。
安装完成之后就可以在设备管理器看到核显了:
¶芯片组驱动
如果在【其它设备】下看到SMBus控制器(System Management Bus,系统管理总线,负责主板组件数据通信)、PCI控制器上有感叹号,这是因为缺少芯片组驱动。
- 关于上面两个驱动,下载 芯片组 INF 实用程序 驱动,安装即可;
- 关于【PCI简单通讯控制器】,下载Intel® Management Engine Drivers for Windows® 10 and Windows® 11 驱动执行
Installers/Main_DCH/SetupME.exe
安装。
安装完成之后,应该就只有一个【未知设备】还没有驱动,这个就确实找不到了,基本也不影响使用,就不处理了。
¶基本配置
¶远程桌面
¶Ikuai
🙄 自言自语:
“其实最开始只打算装 OP 的,但是因为后面有了流控的需求(ps:室友拉了宽带,友情给我们用,但说了不要搞 BT 啥的占用上传。我有备份到百度云的需要,所以要限制上传速度),考虑了两种方案:① OP 上 QOS+流量监控——能监控,但不能根据 IP/MAC 做限制,大家一起难受(其实就只有我啦~);② iKuai 在流控方面做的不错,再装一个 iKuai。尝试了方式 1 之后选择了 iKuai 的方案”
¶准备
- 到 iKuai 官网下载页下载 ISO 镜像,选择机器架构(如 64 位);
- 打开 PVE Web 管理页面,上传镜像文件:位置在【local】-【ISO 镜像】,上传即可
- 至少添加了一个 vmbr0 桥接网卡
¶部署
采用虚拟机的方式安装。
-
创建虚拟机:
- 【常规】-输入名称【iKuai】
- 【操作系统】-选择 iKuai 镜像
- 【磁盘】-建议 2G 以上
- 【CPU】-类别选择【host】(最后一个)
- 【内存】-至少 2G 才能安装
- 【网络】-选择【vmbr0】桥接设备
-
添加直通网卡
-
因为在 PVE 优化 部分已经做了直通,所以这里可以直接添加直通网卡
注意一点,PCI 网卡前面的编号(?)数字是和物理网卡对应的,不要把管理网卡也加进去了,管理网卡(vmbr0)我们创建虚拟机的时候已经做了桥接。
需要用到的网卡都可以加进来,既然选择用 iKuai 做主路由,所以直通给 iKuai,不需要给 OP。
-
-
启动镜像进行安装
- 选择刚才创建的 iKuai 虚拟机-【选项】-【引导顺序】,将 ISO 镜像【ide2】勾选,并拖动的最上面,勾选【net0】
- 进入【控制台】,启动,之后根据提示选择安装即可(好像是输入 0 回车,输入 y 安装就完成了)
-
配置 lan 地址
- 安装完成重启之后就会进入 iKuai 控制台,这里需要先设置管理地址
- 根据提示,输入【2】设置 LAN/WAN 地址,然后输入想要的管理地址,比如
192.168.19.2
(任何192.168.x.x
都行,用 19 是因为单纯喜欢这个数字,主机号永 2 是因为 1 已经给了 OP,不想再改了。一般说都是和光猫错开192.168.2.1
这种。) - 回车确认之后就可以回到电脑上,用网线连接在一起,手动修改电脑 IPv4 地址和上面同一网段(如
192.168.19.100
),掩码255.255.255.0
,网关就是上面 iKuai 的地址,比如我的就是192.168.19.2
。 - 浏览器打开刚才设置的地址,进入 iKuai 后台,用户名和密码都是
admin
(下载页面下滑一丢丢就看到了),登录改密即可。
-
WAN 配置
-
左侧菜单【系统概况】,点击中间【wan1】进入广域网配置界面:
网卡选择你准备接光猫的口(比如 eth1,eth0 是管理口),【接入方式】如果不打算路由拨号就选择【DHCP】,顺利的话就可以获取到 ip 了,保存即可。
-
回到【系统概览】,选择【lan1】:如果加了多个网卡,这里应该还有 lan2,lan3…,我们用不上,除非你需要给每个网卡都指定不同网段,我理解应该是方便 iKuai 下面还有一层交换机/路由之类,划分网段。
这里网卡选择 【eth0】,也就是管理口。下面展开【高级设置】,将其它网口都勾选上。
-
-
DHCP 配置
选择【lan1】接口,设置网关为 iKuai 地址。这里并没有设置为 OP 的地址互指,如果 OP 配置了代理, iKuai 下的设备也就从代理出去了。如果你能配置路由表绕过自然也是没有问题的。
-
至此, iKuai 下面的设备应该就可以正常上网了,包括 PVE。
-
(可选)固定 IP
在【网络设置】-【DHCP 终端列表】中可以看到直接/间接连接到 iKuai 的设备,选择【加入静态分配】,设置好 IP。
¶OpenWRT
🎗️ 20241127
已经从单 OP 主路由切换为 iKuai 主路由 + OP 旁路由 的组合,如果你的实际情况以此存在冲突,请多看看教程和他人的帖子,不要盲目局限单一教程。
软路由是我的第一个需求,包括 PVE 的网络,后面也会统一由 OP 进行管理。
后日谈:OP 曾经确实是第一个需求,但结合实际情况,实际的管理是交给了 iKuai 来做。该章节的所有内容是以 OP 作为主路由的前提组织,所以如果以确定使用 iKuai(主路由) + OP(旁路由) 的方式,请在安装完成后跳转至 ImmortalWrt 旁路由配置
¶准备
在正式进行安装之前,需要先做点准备:
img2kvm
工具软件,将 OP 的 img
或 img.gz
后缀镜像转换为 PVE 磁盘镜像
下载地址:
基本上搜一下就有下载方式,基本命令格式: img2kvm <img_name> <vm_id> <vmdisk_name> [storage]
img_name
是 IMG 文件名称。一般为“xxx.img”或“xxx.img.gz”的格式。img2kvm 可以直接识别并转换“img.gz”压缩格式的固件文件,对于“xxx.img.gz”来说,只需要输入“xxx.img”作为名称即可,不必再另外加“.gz”。vm_id
是创建好的虚拟机的 ID。一般为一组非零开头的数字,如 100。vmdisk_name
是虚拟机要使用的磁盘名称。建议采用 vm-<vm_id>-disk-<disk_id>的命名方式,如 vm-100-disk-1。storage
是指导入使用的存储池的 ID,默认为“local-lvm”,这是安装 PVE 时自动创建的。此项为可选项,若不指定则使用默认值。【记住,要考】
SSH 客户端
MobaXterm 或 WindTermXShell等,或者 Windows 终端也不错。
不推荐 xshll 是因为试用到期后需要联网验证,在没有互联网的情况下完全无法使用。
OpenWrt 镜像
具体单开一节。
¶OpebWrt 镜像-成品
懒人版
- 可以去 OpenWrt 官网根据型号下载
- 或者在 haierccc-恩山 里面看看【推荐用开源版本】。
- 再者就是找其它作者编译的版本,比如
我懒,直接用的 bleach1991-恩山 编译版本
¶OpenWrt 镜像-自编译
ImmortalWrt
如果不想和别人用一样的镜像,大可以试试自己编译一版。听上去是什么了不得的大工程,实际上各个大佬已经把编译工作做的相当完善,真正需要动手的地方并不多,有手就行。我昨天还在下别人的包,今天下午就已经编译了三版出来,你说难吗,很简单嘛。
前提:
- 一台内核数不小于 2 的电脑:试过单核的编译失败了
- 可用磁盘空间不少于 50G:编译过程中会产生很多文件和缓存
- 爬墙工具
- 时间:编译时间一般 1-2h,不过如果舍得下料,也挺快的。我用 VM 4C4G8T Ubuntu24 应该不到一小时。
- 眼睛和手:脑子可以先摘掉,暂时用不到
参考资料:
- immortalwrt-Github 仓库
- immortalwrt 软件包中英对照-恩山 schnappi
- 一看就会的编译教程-小陈折腾日记
- openwrt-packages-kenzok8
- 实用技能
- docker 编译 openwrt-Codee — lead 佬源码编译有一些注意事项,查看这里 ˋ( ° ▽、° ) !
首先感谢以上大佬的帖子!辛苦…(* ̄0 ̄)ノ…(* ̄0 ̄)ノ
其实大体步骤就差不多,只是有些细节个别帖子会说的比较详细,所以再加个人上实践结果,做了一个整合。
目前比较流行的源码有官方源码、lede、lienol、immortalwrt 几位大佬几套,选用哪套开始都可以,我这里就以 immortalwrt 为例进行说明,其它仅作参考,如有出入请以实际情况为准。
-
所有操作都是以普通用户执行,不要用 root,不要用 root,不要用 root!
-
首先是到 GitHub 仓库,查看项目说明,其实也写明了核心步骤,只是有点简略而已。
-
准备编译环境:建议使用 Debian 11 或 Ubuntu 22 系统,选择新一点的,太旧可能会存在组件版本太低的情况(我用的 Ubuntu 24.04.1 LTS)
-
通过 VMWare 虚拟机安装 Ubuntu:
- 网络模式选择【桥接】,方便出国下载
- 类型选择 Ubuntu 64 位
- 核数不少于 2,线程可以多一点,硬盘不少于 50G
-
安装编译依赖
1
2
3
4
5
6
7
8
9
10
11
12
13sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache clang cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext gcc-multilib \
g++-multilib git gnutls-dev gperf haveged help2man intltool lib32gcc-s1 libc6-dev-i386 libelf-dev \
libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses-dev libpython3-dev \
libreadline-dev libssl-dev libtool libyaml-dev libz-dev lld llvm lrzsz mkisofs msmtp nano \
ninja-build p7zip p7zip-full patch pkgconf python3 python3-pip python3-ply python3-docutils \
python3-pyelftools qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo uglifyjs \
upx-ucl unzip vim wget xmlto xxd zlib1g-dev zstd
# 或者直接执行下面的脚本
sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)'
-
-
下载源代码
-
宿主机上打开小猫咪,允许【局域网代理】,然后在 Ubuntu 中配置到宿主机的代理,http 和 https 都要配置
-
克隆源码
1
2
3
4
5
6# 指定要使用的分支,比如 master,v23.05.4
git clone -b <branch> --single-branch --filter=blob:none https://github.com/immortalwrt/immortalwrt
# 如果克隆之后想要更换/指定其它版本分支
git tag # 查看稳定版,回车拉到最下面,q 结束
git checkout v23.05.4 # 切换分支
-
-
进入项目目录:
1
cd immortalwrt
-
(可选)补充插件源
1
2
3sed -i '1i src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '2i src-git small https://github.com/kenzok8/small' feeds.conf.default
git pull -
(可选)修改默认管理地址
其实OP 配置第一条就是修改管理地址,可以安装完成后再修改。只是我不想每次安装都修改所以改了。
1
2
3# 进入项目目录
cd immortalwrt
vim package/base-files/files/bin/config_generate搜索
192.168
, 更新 IP 保存即可。 -
更新插件源码:更新定义在 feeds.conf 和 feeds.conf.default 中插件的最新源码
1
./scripts/feeds update -a
-
拷贝源码:
1
./scripts/feeds install -a
-
定制 OpenWrt:打开 OP 可视化配置面板
1
make menuconfig
在此面板使用方向键移动,回车确认,空格选中【
<>
未选中,<M>
编译为 ipk 包但不集成到固件,<*>
编译进固件,双击空格选中这个】,ESC 返回上一级【按两次】- Target System -> x86 — 目录架构
- Subtarget -> x86_64 — 具体架构型号
- Target Profile -> Generic x86_64
- Target Images -> tar.gz,qcow2,ext4,squashfs — 镜像格式,可以跳到VM 安装 和 CT 安装 看一下要求的镜像
- Utilities (可选,如果需要可以后续再打包)
- -> Filesystem -> attr 、btrfs-progs(Build with zstd support)、chattr、dosfstools、e2fsprogs、f2fs-tools、f2fsck、lsattr、mkf2fs、xfs-fsck、xfs-mkfs
- -> Shells -> bash
- WIFI 设置:参考以上参考资料-实用技能。因为我的设备没有无线模块,故未设置。
- LuCI:插件和主题配置
- Modules -> Translations -> Chinese simplified — 默认已勾选
- Applications
- Themes -> Argon
固件说明:
- docker:luci-app-dockerman,x86 平台还需要手动勾选依赖 【Utilities】-【dockerd】
如果需要重新配置,只需要删除配置即可:
1
2rm -rf ./tmp && rm -rf .config
make menuconfig -
下载 dl 库,编译固件
1
2
3
4
5
6# 下载 dl 库,V=s 显示任务详细情况(可以省略),-j 指定线程数,nproc获取系统线程数-1,防卡死
make -j$(nproc) download V=s
# 编译
# 这里直接指定线程数为4
make -j4 V=s编译时间取决线程数,以我上面 VM 的配置,应该不到 1h,具体没注意。
如果编译失败,可以执行:
1
2make clean # 删除编译目录/bin和/build_dir目录中的文件
make dirclean # 除了删除编译目录之外还删除编译工具目录,删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件,一般在更换CPU架构的情况下才操作。 -
下载编译压缩包
编译完成后的输出路径:~/immortalwrt/bin/targets/
下面,里面会有多个格式的镜像文件,复制到宿主机。x86_64 的就可以直接使用了。补充:开启 SSH
如果 VM 不能直接复制出来(可能需要 VMtools),可以用 SSH,这里不赘述。 -
【二次编译】
后续更新源码、添加插件之后都需要重新编译:1
2
3
4git pull
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig可以将这几步放在一个脚本里-
check-update,sh
,每次执行bash check-update.sh
会方便一点。 -
【ipk 编译】
如果选择插件时,选中<M>
作为 ipk 包编译,会生成 ipk 包,使用 find 命令查找,一般在bin/packages/x86_64
下面。然后上传到路由器执行安装:
1
opkg install luci-app-alist.ipk
也可以在 Web 界面上传安装。
LEDE
最新一次更新已更换为此自编译版本。用过 ImmortalWrt 自编译版本和官方编译版本,自编译版本用着还不错,只不过重装系统没有备份,然后用的官方编译版本。但是这个版本安装 Clash 和 Passwall 配置总有点问题,无奈只能再编译一版(本来嫌弃编译太慢所以用的现成的😅)。之所以不使用其他三方编译版本,一是觉得很多功能用不上,二是哇哇哇哇。
- 环境准备
- VMware 安装 Ubuntu 24.02,4C8G50G;
- 局域网代理,注意虚拟机的代理地址要设置为 VMnet 网段的网关地址;
- 设置虚拟机不要休眠,我本地如果用SSH一段时间后,虚拟机桌面会黑屏打不开。
- 安装编译依赖
1
2
3
4
5
6
7
8
9sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache clang cmake cpio curl device-tree-compiler flex gawk gcc-multilib g++-multilib gettext \
genisoimage git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev \
libreadline-dev libssl-dev libtool llvm lrzsz msmtp ninja-build p7zip p7zip-full patch pkgconf \
python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion \
swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev - 下载源代码,更新 feeds 并配置
1
2
3
4
5git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig - 下载 dl 库,编译固件编译完成后的输出位置:
1
2make download -j8
make V=s -j1bin/targets
。如果中途手动/网络原因终端了,删除 build 目录重新执行编译。 - 二次编译
1
2
3
4
5
6
7cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make download -j8
make V=s -j$(nproc) - 重新配置
1
2
3rm -rf .config
make menuconfig
make V=s -j$(nproc)
¶OpenWrt 镜像–云编译
参考资料:
- 云编译 OpenWrt-xinlingduyu — 有视频教程很详细
使用 GitHub Action 提供的服务实现自动编译,不需要处理依赖(真的吗,我不信),不过时间会比较久。建议本地自己跑一遍,基本定型没有大的变更后可以托管到 GitHub Action 云编译。
上面视频教程已经喂到嘴里了,我就没必要再写一遍了。
关于 config 文件的内容,其实就是本地执行 make menuconfig
命令,在可视化界面做的配置后保存的 .config
文件,把这里的内容拷贝过来就可以了。
这里引用一下视频的评论:“不把 config 配置文件分享怎么用,都本地编译了还来看这个”。前半句不做评价,确实都本地跑了没必要看这个,一直留着编译环境完全用不上云编译
¶OpenWrt 安装
可以选择【虚拟机】或【CT】安装:
- 虚拟机(VM):在硬件层面虚拟出一套完整的 CPU、内存、文件系统等资源,相互完全隔离,支持任何操作系统。但是占用资源更多。
- CT:共享物理机内核和驱动,进程隔离,文件系统独立。优势是占用物理资源较少,利用率高。
这里仅提供两种安装方式,具体取舍看个人。你问我?CT 咯(○ ` 3′○)
¶VM 方式安装
正式安装前应该已经准备好的文件:
- OpenWrt 镜像,后缀为
img.gz
或qcow2
- img2kvm
- SSH 客户端
-
登录到 PVE 后台,右上角选择【创建虚拟机】:
- 常规:【VM ID】可以指定,比如 100(后面我就以此进行说明);【名称】比如 OpenWrt
- 操作系统:选择【不使用任何介质】
- 系统:默认
- 磁盘:左侧删除【scsi0】[^2],磁盘大小 1G
- 内存:512/1024M 都可以
- 网络:【桥接】选择【vmbr0】,其它默认即可
-
打开 MobaXterm,SSH 登录到 PVE 后台(不会吧不会吧,这个还需要教程吧),密码就是 Web 登录的密码
-
创建启动镜像磁盘:
可以看到 MobaXterm 左侧就是远程 PVE 上的目录,将 OpenWrt 镜像和img2kvm
工具拖到这里上传,下面可以看到进度(很快的啦~)。检查一下:1
2
3
4
5
6root@evergardenviolet:~# ls -l
total 123612
drwxr-xr-x 3 root root 4096 Nov 17 00:12 github
-rwxr-xr-x 1 root root 18608 Nov 15 23:59 img2kvm
-rw-r--r-- 1 root root 18481152 Nov 17 01:39 immortalwrt-23.05.4-x86-64-generic-squashfs-combined-efi.img.gz # 就是这个
-rw-r--r-- 1 root root 108068864 Nov 18 14:04 immortalwrt-x86-64-generic-squashfs-combined-efi.qcow2执行命令创建启动镜像磁盘(以下二选一,结果都一样):
-
镜像格式为
img.gz
1
2
3
4
5
6
7
8
9
10
11
12
以我自己为例,执行的命令为:
```bash
chmod +x img2kvm
# 上传上去的镜像为: mmortalwrt-23.05.4-x86-64-generic-squashfs-combined-efi.img 可以直接用img2kvm导入,但不要加 .gz 后缀
./img2kvm mmortalwrt-23.05.4-x86-64-generic-squashfs-combined-efi.img 100 vm-100-disk-0 local
# 注意点:
# 1. 100 是刚才创建的虚拟机ID,以你实际创建为准
# 2. vm-100-disk-0 是给上面的虚拟机创建的第 1 块镜像磁盘(从0开始),如果没有删除 `scsio` ,那就是 vm-100-disk-1
# 3. 最后的 local 是因为删除了 local-lvm 卷,需要指定安装位置;如果没有删除可以省略。 -
镜像格式为
qcow2
1
2
3
4
5
6
7# 上传上去的镜像为:immortalwrt-x86-64-generic-squashfs-combined-efi.qcow2
qm importdisk 100 immortalwrt-23.05.4-x86-64-generic-squashfs-combined-efi.qcow2 local --format=qcom2
# 注意点:
# 1. 100 是虚拟机ID
# 2. local 也是指定保存位置,默认 local-lvm,因为我已经删了,所以指定为local
# 3. --format=qcom2 指定格式,不要写成了 qcow,别问为什么要提醒你,人家才没有写错呢(*/ω\*)
如果一切顺利执行完成后会显示原谅色的 【Successfully】,那就可以进行下一步了,否则就根据报错处理问题!
-
-
此时回到 PVE web 后台,选择【100】-【硬件】,可以看到最下方有一块未使用的磁盘,双击挂载;然后在【选项】-【启动顺序】,将刚才挂载的磁盘拖到最前面,并勾选,然后进入【控制台】,点击中间大大的【
原神启动】 -
很快啊,加载完成之后敲一下回车就可以看到
ImmortalWrt
的 logo,至此已安装完成。 -
接下来的配置请跳转到 补充中 继续进行。
¶CT 方式安装
参考资料:
LXC 容器安装 openwrt 做主路由-edmondgavin
正式安装前应该已经准备好的文件:
- OpenWrt 镜像,格式为
xxx-rootfs.tar.gz
- SSH 客户端
-
打开 MobaXterm,SSH 登录到 PVE 后台,将
tar.gz
后缀的镜像上传上去 -
通过命令创建容器:
1
pct create 102 local:vztmpl/immortalwrt-x86-64-generic-rootfs.tar.gz --rootfs local:2 --ostype unmanaged --hostname openwrt --arch amd64 --cores 1 --memory 1024 --swap 0 -net0 bridge=vmbr0,name=eth0
命令解析:
- local(102 后面这个):镜像位置,可以将
local:vztmpl/immortalwrt-xx-rootfs.tar.gz
换成/var/lib/vz/template/cache/immortalwrt-xx-rootfs.tar.gz
- local:2:local 是保存位置,可以用 local-lvm(如果没删的话),
2
是磁盘大小为 2G - 其它的字面意思,内存、swap 大小等
- net0:OP 的网卡
创建完成后,先不要启动,还有一些配置要添加。
- local(102 后面这个):镜像位置,可以将
-
进入 PVE 后台,刚才创建的容器–【选项】-【功能】,开启【嵌套】和【FUSE】,【NFS】和【SMB】建议开启。选择【网络】-【添加】,名称 eth0,桥接
vmbr0
,IPV4 设置和 PVE 相同网段,比如192.168.7.1/24
,网关不需要设置。 -
SSH 登录 PVE,编辑容器的配置文件
1
2
3
4# 先让我们装一个 vim
apt-get install vim
vim /etc/pve/lxc/<容器ID>.conf # vim /etc/pve/lxc/100.conf参照以下我的配置进行补充即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46# 创建容器后的配置
arch: amd64
cores: 1
features: fuse=1,mount=nfs;cifs,nesting=1
hostname: ImmortalWrt
memory: 512
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:6A:4A:06,ip=192.168.19.1/24,type=veth
onboot: 1
ostype: unmanaged
rootfs: local:100/vm-100-disk-0.raw,size=1G
swap: 0
# PVE 自带的 OpenWrt 实例配置
lxc.include: /usr/share/lxc/config/openwrt.common.conf
# 网卡直通
lxc.net.1.type: phys
lxc.net.1.link: enp3s0
lxc.net.1.name: eth1
lxc.net.1.flags: up
lxc.net.2.type: phys
lxc.net.2.link: enp4s0
lxc.net.2.name: eth2
lxc.net.2.flags: up
lxc.net.3.type: phys
lxc.net.3.link: enp5s0
lxc.net.3.name: eth3
lxc.net.3.flags: up
lxc.net.4.type: phys
lxc.net.4.link: enp6s0
lxc.net.4.name: eth4
lxc.net.4.flags: up
lxc.apparmor.profile: unconfined
lxc.apparmor.allow_nesting: 1
lxc.cgroup.devices.allow: a
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.entry: /dev/ppp dev/ppp none bind,create=file
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
lxc.mount.entry: tmp tmp tmpfs rw,nodev,relatime,mode=1777 0 0
lxc.mount.auto: cgroup:rw
lxc.mount.auto: proc:rw
lxc.mount.auto: sys:rw
lxc.autodev: 1提醒,因为我们将
enp2s0
桥接到 OP 作为管理口,所以就不做直通。以上配置,无须配置 hook 钩子,不需要注释 dnsmasq 配置文件 jail 内容(其它帖子中如果不注释可能会无法获取 DHCP IPv4)。[^3]
-
此时就可以开始 OpenWrt 的设置了。
¶OpenWrt 配置(主路由)
📢: 如果计划将 OP 作为旁路由,请跳转至下一节继续。
完成 OP 的安装之后,首先需要修改配置以进入管理后台。
-
打开虚拟机/CT 的控制台,回车进入命令行,编辑配置文件:
1
vim /etc/config/network
找到
lan
所在块,修改ipaddr
的值为你想要的局域网网段,比如我就修改为192.168.7.1
, 因为192.168.1.1
一般是光猫的管理地址,最好换一个。1
2
3
4
5
6
7
8
9config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.7.1'
option netmask '255.255.255.0'
option ip6assign '60'
list dns '192.168.7.1'
list dns '119.29.29.29'
list dns '8.8.8.8' -
用网线连接软路由和电脑,手动修改电脑 IP 为同网段不为
192.168.7.1
,比如192.168.7.2
,然后就可以从浏览器访问后台了:http://192.168.7.1
。密码一般是password
,如果不是,就以下载位置作者说明为准。 -
添加网卡:
- 如果是虚拟机部署:需要在 PVE 后台-虚拟机-【网络】,逐个添加需要使用的
vmbrx
网卡设备 - 如果是 CT 容器部署:需要在配置中配置好直通即可
- 如果是虚拟机部署:需要在 PVE 后台-虚拟机-【网络】,逐个添加需要使用的
-
修改局域网配置(lan)
进入【网络】-【接口】,看到名称为 接口 的标签,选择lan
编辑- DNS:添加一个国内和国外的 DNS,可以 看这里各选一个
- 其它保持默认
选择上方 接口 的标签,配置
br-lan
设备,将需要用到的网桥端口都勾选中,保存并应用!
-
修改广域网配置(wan)
一般插了网线可以自动识别,如果没有就编辑wan
配置,选择协议 【DHCP 客户端】,设备为接入光猫的网口 -
IPv6 配置
和上面wan
类似,编辑wan6
的配置,修改协议为 【DHCP 客户端】,网口和wan
一样。一般会自动生成,如果没有就自己创建一份。 -
此时应该就可以正常上网了,配置了的网口也就可以接入其它设备使用了。无线?我没有无线啊!(后面会说)
放一个三方 opkg 软件源:OpenWrt.op
¶OpenWrt 配置调整(旁路由)
参考链接:
-修复 iKuai 使用 LEDE 当旁路由导致的终端 MAC 地址重复的问题-柠了个檬 k
此部分基本配置和上面一样,只是【LAN】部分的配置有所区别:
- 修改局域网设置(lan)
- 【常规设置】-修改 IPv4 网关地址为 iKuai 地址
- 【DHCP】服务器:【忽略此接口】,去掉【动态 DHCP】,禁用 IPv6 的【RA 服务】、【DHCPv6 服务】、【NDP 代理】
- 网卡:虚拟机方式创建则只添加
vmbr0
即可;CT 方式创建则注释掉配置中的直通部分。此时管理页面 wan 和 wan6 应该会提示“网络设备不存在”的错误,可以直接删除 wan 口。 - 在【系统】-【软件包】,先【更新列表】,再搜索
snmpd
安装,就叫这个,不是luci-app-snmpd
或mini-snmpd
。
装这个包是因为使用 OP 做旁路由会导致 iKuai mac 地址重复。此时回到 iKuai,【高级应用】→【跨三层应用】→【添加】,在【SNMP 服务器 IP】后输入 OpenWrt 路由管理 IP,其他保证默认不变,点击【保存】,此时终端设备的 mac 就可以正常获取了。如果还有问题,可能是固件的问题,建议更换固件。
¶passwall 配置
目的是实现上网需求,此包已在上面自编译部分进行添加。
- 参考资料
- 节点订阅
- 规则管理-分流规则
- 删除默认所有规则,按照顺序添加以下规则
- 【Reject】规则:添加域名
geosite:category-ads-all
- 去广告 - 【Direct】规则:
1
2
3
4
5
6
7
8# 添加域名
xn--ngstr-lra8j.com
geosite:private
geosite:cn
# 添加IP
geoip:private
geoip:cn - 【Proxy】规则:添加域名
geosite:geolocation-!cn
- 高级设置
- 【UDP不转发端口】:所有
- 【TCP转发端口】:仅网页,仅允许80,443 端口代理
- 【TCP代理方式】:TPROXY,也可以默认 REDIRECT,勾选 IPv6 透明代理后会自动变为 TPROXY。
- 【IPv6透明代理】:节点支持IPv6就勾选,反之不勾选。
- 节点列表-Xray分流
- 【Reject】:黑洞(丢弃)
- 【Direct】:直连(绕过)
- 【Proxy】:默认(代理)
- 【默认】:选择一个可用节点
- 【域名解析策略】:Asla(跳过 IP 匹配,只匹配域名)
- 基本设置
- 【DNS】:【远程DNS协议】选择 DOH,勾选 FakeDNS。
- (可选)检查 DNS 泄露
- https://www.browserscan.net/zh/dns-leak
- whoer.net/zh/dns-leak-test
访问以上两个地址检查解析地址是否存在国内IP,如果存在则说明分流不规范,DNS 泄露。
¶AdGuard Home 配置
参考链接:
首先需要说明,去广告主要还是用的浏览器插件,对于 ADGH 主要是做 DNS 加速及防劫持,去广告也没有太多期待,毕竟就这样。
-
安装 AdGuard Home
- 如果固件里面已经编译了,那么就可以直接使用了;如果没有捏,可以从【系统】-【软件包】进行安装(搜不到就先更新一下啦)
-
ImmortalWrt 端设置
- 先更新核心版本;
- 【6060 重定向】建议选择【使用 53 端口替换 Dnsmasq】,相当于接替现有 DNS,也可以选择作为上游服务器,我在 ImmortalWrt 上选择重定向 53 端口不生效;
- 其它保持默认即可,勾选【启用】,保存并应用。
-
AdGuard Home 配置
-
打开
http://<ImmortalWrt IP>:3000
管理页面,默认账密admin/admin
,如果不是就 bing 一下多找找; -
【设置】-【常规设置】:日志保存时间根据 OP 大小根据自己需要选择,保存。
-
【设置】-【DNS 设置】:
-
上游 DNS 服务器:使用加密 DNS 可以防劫持,比如:
1
2
3
4# 阿里云
https://dns.alidns.com/dns-query
# 360
https://doh.360.cn/dns-query更多的可以直接点击上面的【已知 DNS 提供商列表](https://link.adtidy.org/forward.html?action=dns_kb_providers&from=ui&app=home) 选择
-
勾选【并向请求】
-
Bootstrap DNS 服务器是用来解析上面 DNS 地址的 DNS,可以下一个 DNS 优选测一下最快的,比如:
1
2119.29.29.29
223.5.5.5 -
保存应用
-
DNS 服务配置,勾选【启用 EDNS 客户端子网】、【启用 DNSSEC】-校验 DNS 签名、【禁用 IPv6 地址解析】-不影响使用的前提下加快解析。保存。
-
-
-
【可选】【过滤器】-【DNS 重写】
在此可以维护自己本地的一套 DNS 记录,配合 lucky 或者 npm 很舒服。
¶Ubuntu(Deprecated)
关于 PVE 安装 Windows、Linux、黑苹果的教程很多,如果只想装上去玩玩可以去 B 站找找教程。因为我的设备只有 128G,所以只能省着点用 😢。加上有 docker 需求,所以目前就只部署了 Ubuntu,当然选择其它 Linux 发行版也是没有问题的。
2025年2月15日更新,在经历过PVE崩过一次之后,觉着再套一层 Ubuntu 没啥必要性,毕竟都是用 Docker,因此此次不再安装 Linux,直接在宿主机安装 Docker。
¶安装
参考链接:
- PVE 系列-初始化 LXC 容器并安装 Docker-Gavin’s Blog
- 安装运行 docker 服务的 lxc 容器-瞎折腾的地产狗
- ChatGPT — 排错啥的真好用啊
- PVE 的 LXC 容器中直通核显-Dr.KS’s Blog
本次使用 LXC 方式部署。
-
下载模板:
登录到 PVE 后台-【local】-【CT 模板】-【模板】,选择需要的模板下载,比如 ubuntu-24.04。如果下载进度卡在 “Saving to …”,是因为连不上服务器,需要先替换镜像源。
-
创建容器
右上角选择【创建 CT】- 常规:输入 root 用户密码,注意取消勾选【无特权的容器】(默认已勾选!) — 不然最后是核显直通有问题+无法 SMB 挂载!😹
- 模板:选择刚才下载的 ubuntu-2.04
- 磁盘:根据需要给就行,也可以单独加一块磁盘。后续 docker 应用可能都会放上来,所以给了 50G。
- CPU 和内存:按需分配即可,比如 1C1G
- 网络配置:默认网卡【eth0】,桥接【vmbr0】,设置 IPv4
192.168.19.50/24
(最终容器的 IP),网关192.168.19.1
,IPv6 选择 DHCP 即可。
-
启动容器
创建完成后,先来到【选项】-【控制台模式】,修改为shell
,否则启动后黑屏。【验证过确实会,已老实 🤐】启动容器,开启远程登录:
1
2
3
4
5
6#允许远程登录
sed -i '/PermitRootLogin/ a PermitRootLogin yes' /etc/ssh/sshd_config
#重启ssh服务
systemctl restart sshd -
初始化设置
-
时区:
1
dpkg-reconfigure tzdata
-
语言
1
dpkg-reconfigure locales
选择
zh_CN.UTF-8
-
软件源更换
1
2
3
4apt update
apt install curl
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
-
-
【可选】核显配置
如果容器不需要使用核显,可以跳过这部分。因为我计划部署 Jellyfin 做硬解,所以需要配置一下。在 PVE 宿主机上执行:
1
2
3
4
5# 查询核显信息
ls -l /dev/dri
# 安装核显驱动
apt install intel-media-va-driver这里的 226,0 和 226,128 是主次设备号,编辑配置文件/etc/pve/lxc/容器 id.conf
1
2
3
4
5
6
7
8
9
10
11
12
13#新增下列内容
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
# lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
# 下面这条根据需要添加,下面解释
# lxc.apparmor.profile: unconfinedlxc.apparmor.profile
: unconfined:该配置指定了 AppArmor(应用程序安全性配置框架)的配置文件名称,这里设置为 “unconfined”,用于允许容器内的进程具有更高的系统权限lxc.cgroup.devices.allow: a
: 允许容器内的进程访问所有的 cgroup 设备。lxc.cap.drop
: 此配置项为空,容器内的进程将继承主机系统的默认能力设置。lxc.cgroup2.devices.allow: c 226:0 rwm
和lxc.cgroup2.devices.allow: c 226:128 rwm
: 允许容器内的进程对设备号为 226:0 和 226:128 的字符设备节点拥有读、写和映射(rwm)的权限。用于允许容器内的进程访问特定的设备,如图形加速设备。lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
和lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
:将主机系统上的两个设备节点 /dev/dri/card0 和 /dev/dri/renderD128 挂载到容器内的相同位置,用于允许容器内的应用程序访问图形硬件加速功能,以便执行图形相关的任务lxc.apparmor.profile: unconfined 用于关闭 LXC 容器的 apparmor 保护,开启状态无法安装 Docker。可能会报错:
1
Error response from daemon: Could not check if docker-default AppArmor profile was loaded: open /sys/kernel/security/apparmor/profiles: permission denied
处理 1: 添加上面 apparmor 的配置,重启容器。
1
2pct stop <容器ID>
pct start <容器ID>处理 2: 在容器界面-【选项】-【功能】-开启【嵌套】(nesting=1),重启容器
两种方式择其一即可,如果都做了,还是会报错:
explicitly configured lxc.apparmor.profile overrides the following settings: features:nesting
,因为 features:nesting 已经隐式处理了与 AppArmor 相关的安全限制。🎗️: 还没装上测试,介意的话就先别搞,果咩。
-
安装 Docker
此处就参考 Docker 官方安装操作即可:⚠ 强调一点:请根据自己的发行版选择对应的安装教程,不要直接复制下面的命令,不然版本对不上会报错。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 配置 Docker GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加 apt 仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装 Docker 软件包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 设置开机自启
systemctk enable docker -
安装 docker-compose
1
2
3
4
5
6
7
8# 下载
curl -SL https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 赋予权限
chmod +x /usr/local/bin/docker-compose
# 测试
docker-compose
¶Portainer
可视化管理 docker。
- 创建数据目录
1
mkdir /data/Containers/portainer
- 创建容器
1
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /data/Containers/portainer:/data portainer/portainer-ce:2.24.1
¶lucky 大吉
介绍(来自官网):
- 简单易用:自带 WebUI 可视化后台 — 确实操作很简单,比 npm 好用
- 支持多种系统:
- 功能强大:总之就是很强
¶安装
采用 Docker 镜像的方式安装。
1 | docker run -d --name lucky --restart=always --net=host -v /data/luckyconf:/goodluck gdy666/lucky |
配置太简单了,就不解释了。只是注意如果要支持 IPv6,需要使用 host 网络模式。
¶简单配置
反向代理
我目前只用到了反代,所以暂时只说一下这个。
其实也没啥说的,下一步下一步就行,不懂的保持默认,太简单了。。。监听端口也可以用 443
。
HTTP 跳转 HTTPS
前提是上面已经创建好了一条 https 的规则,然后重新创建一条【Web 服务规则】,监听 80
端口,选择【定制模式】,服务类型【重定向】,前端地址填泛域名【*.mydomain.com】,后端地址填【https://{host}】 即可。
如果访问错误,记得看日志,没有日志就检查域名、端口、防火墙啥的,基本就这几个点,挨个排查一遍。
🎗︎:我之前在 NAS 上装了 luckt,但是没有日志,应该是防火墙的问题,后面有了 PVE 就拎出来了,原因也懒得查了。
¶影视库
在上面 Ubuntu docker 的基础上安装 Jellyfin/Emby。
¶Jellyfin(Deprecated)
推荐使用 nyanmisaka 大佬封装版本,更适合中国宝宝体制。
-
创建一个特权容器
-
配置核显直通
1
2
3
4
5
6
7lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file -
通过 portainer 安装 Jellyfin
1
2
3
4
5
6
7
8
9
10
11
12
13
14services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
user: 0:0
network_mode: "host"
volumes:
- /data/Containers/jellyfin/config:/config
- /data/Containers/jellyfin/cache:/cache
- type: bind
source: /media
target: /media
extra_hosts:
- "host.docker.internal:host-gateway"
¶Emby
1 | version: "2.3" |
除官方版,也可以使用 amilys 大佬的版本(低调低调~)
¶增强插件
¶Emby Crx
官方地址:emby-crx
媒体库大图封面轮播。
安装方式:
- 浏览器插件:需用户端自行下载解压安装
- 服务端:替换文件,具体说明
一键安装
1 | docker exec EmbyServer /bin/sh -c 'cd /system/dashboard-ui && wget -O - https://tinyurl.com/2p97xcpd | sh' |
手动安装
手动安装方式参考:沧水的博客
-
找到 Emby webui 安装目录:
使用官方 Ubuntu 安装的在:/opt/emby-server/system/dashboard-ui
docker 安装的位置在:/system/dashboard-ui/
找不到就用 find 搜一下
dashboard-ui
目录。 -
上传文件:下载上面作者官方源码,提取以下文件:
1
2
3
4
5common-utils.js
jquery-3.6.0.min.js
md5.min.js
style.css
main.js上传到上面
dashboard-ui
目录。 -
插入 js
编辑 webui 目录下index.html
文件,在<head></head>
之间插入:1
2
3
4
5
6
7
8
9
10
11<link
rel="stylesheet"
id="theme-css"
href="style.css"
type="text/css"
media="all"
/>
<script src="common-utils.js"></script>
<script src="jquery-3.6.0.min.js"></script>
<script src="md5.min.js"></script>
<script src="main.js"></script> -
刷新网页即可生效。
¶emby-danmaku
官方地址:dd-danmaku
弹幕。
安装方式:
和上面类似,修改 webui 目录下 index.html
,在