PVE(Proxmox VE)
Proxmox VE(PVE)是一个开源的虚拟化平台,基于 Debian Linux,支持 KVM 和 LXC 容器。它提供了一个易于使用的 web 界面来管理虚拟机和容器,非常适合家庭和小型企业使用。
参照文章:https://www.qichiyu.com/
下载和安装
1.BOIS设置
-
先再BOIS中的高级设置页面 —> Security 中开启 VT-d 等虚拟化选项
- Intel Virtualization Technology (VT-x): 这是最基础的CPU虚拟化支持。
- Intel VT-d (Virtualization Technology for Directed I/O): IOMMU的硬件支持
-
启用UEFI,高级设置中的 Boot 下设置,并关闭Legacy
由于我的NUC8是使用SD卡槽硬改过的,为了使用原生的硬件,所以要启动原本的无线网卡和蓝牙,同时禁用SD卡
2.制作U盘安装镜像
- 下载PVE镜像:Proxmox VE , 推荐下载 torrent 文件,然后上传到百度网盘解析下载,或者直接使用 Motrix 等工具下载
- 制作U盘安装镜像工具:balenaEtcher or Rufus
3.安装Proxmox VE
先连接好主机的网线,键盘/鼠标和显示器,插入上面制作好的U盘后,进入BiOS设置,将 U 盘的启动优先级设置为最高,然后保存并退出,这就进入了PVE的安装界面,选择安装即可。
- 安装过程中会提示进行一些设置,其中关键之一就是密码,这个密码是 root 账户的
- 其二是网络设置,要将IP,网关,和DNS设置为与所连接路由匹配的信息
最后安装完成后,按照提示可通过局域网其他机器,通过浏览器访问PVE,如:https://192.168.16.55:8006/
,也可以通过终端工具连接
(用户名: root
, 密码就是之前设置的,如:00000000
)
软件源设置
主要包括:debian 源、PVE 源、企业源、ceph 源。国内网络更换国内源
- debian 源: 修改基础系统(Debian)的源文件
备份原始源文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
修改源文件:nano /etc/apt/sources.list
,替换为下面的内容:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
- PVE专属源:修改 Proxmox 的源文件
添加非订阅 PVE 源(默认为官方订阅源,免费个人用户需要官方提供的非订阅源才可正常更新 PVE):
echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
Debian 12用"bookworm"
,11用"bullseye":ml-citation{ref="1,3" data="citationList"}
屏蔽企业订阅源:
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
移除订阅提示:
sed -i.backup -z "s/res === null || res === undefined || \!res || res\n\t\t\t.data.status.toLowerCase() \!== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service
通过修改 Proxmox Web 界面的 JavaScript 文件,永久禁用订阅状态检测,并重启服务生效
- Ceph 仓库源
PVE 8 之后默认安装 Ceph 仓库源文件 /etc/apt/sources.list.d/ceph.list
,先备份:
cp /etc/apt/sources.list.d/ceph.list /etc/apt/sources.list.d/ceph.list.bak
使用如下命令更换源:
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
最后更新软件包列表:
apt update && apt upgrade -y
PVE常用命令
在出现网络故障等问题时,如果无法使用Web界面,则需要通过命令行来管理PVE和虚拟机。
以下所有命令都在PVE主机的Shell中执行。您可以通过Web界面的Shell
,或者在无法访问Web界面时,通过物理连接键盘和显示器登录PVE主机后执行。
虚拟机管理 (qm
命令)
qm
是 QEMU/KVM Machine
的缩写,是PVE管理虚拟机的核心命令。
-
列出所有虚拟机状态
bashqm list
作用:显示所有虚拟机的VMID、名称、状态(running/stopped)等。
-
启动/关闭/重启虚拟机
bashqm start [VMID] # 启动虚拟机 qm stop [VMID] # 安全关闭虚拟机(发送ACPI关机信号,最常用) qm shutdown [VMID] # 功能同 qm stop qm reboot [VMID] # 安全重启虚拟机 qm reset [VMID] # “硬重启”,相当于按物理重启键,用于死机时 qm destroy [VMID] # “强制断电”,最后的手段,可能损坏文件系统
作用:控制虚拟机的电源状态。 示例:当软路由无响应时,可以尝试重启:
bashqm reboot 100
PVE主机网络管理
当网络崩溃时,通常是PVE主机自身的网络配置需要修正。
-
编辑网络配置文件
bashnano /etc/network/interfaces
这是PVE网络配置的核心文件。当需要将PVE的管理方式从Wi-Fi改回有线,或者修改IP地址时,直接编辑此文件。
nano
: 使用Ctrl+O
保存,Ctrl+X
退出。 -
应用网络配置
bashsystemctl restart networking # 或者更推荐的 ifreload -a
作用:使
/etc/network/interfaces
的修改生效。但请注意,在网络配置改动较大时,最稳妥、最可靠的生效方式是直接reboot
重启整个PVE主机。 -
查看网络接口和IP地址
baship a
作用:显示所有网络接口的当前状态和IP地址,用于判断配置是否按预期生效。
虚拟机备份与恢复
在进行危险操作前,命令行备份非常有用。
-
手动备份虚拟机
bashvzdump [VMID] --mode snapshot --storage local --compress zstd
作用:创建一个虚拟机的完整备份。这是防止“玩崩”的终极保险。
--mode snapshot
: 使用快照模式,几乎不中断VM运行。--storage local
: 指定备份到名为local
的存储空间(通常在/var/lib/vz/dump/
)。--compress zstd
: 使用ZSTD算法进行快速压缩。 示例:为您的软路由创建一个名为“配置前”的备份
bashvzdump 100 --mode snapshot --storage local --compress zstd
-
从备份中恢复虚拟机
bashqmrestore [备份文件路径] [目标VMID]
作用:当虚拟机被彻底玩坏时,用此命令从一个健康的备份中恢复。 示例:将VM 100恢复到之前的某个备份状态
bashqmrestore /var/lib/vz/dump/vzdump-qemu-100-....vma.zst 100
(恢复前,建议先用
qm stop 100
关闭虚拟机)
PVE防火墙管理
有时连接不通是防火墙导致的,我们可以用命令行快速控制它。
pve-firewall stop # 临时停止防火墙服务
pve-firewall start # 启动防火墙服务
pve-firewall status # 查看防火墙当前状态
使用Wifi连接网络
由于硬改的NUC8是使用 SD 卡的位置,可以轻松切换网卡和蓝牙,在BIOS启用原生的无线网卡和蓝牙后,可通过连接wifi接入网络
-
安装 wpa_supplicant 和 wireless-tools
bashapt install wpasupplicant wireless-tools
-
扫描可用的Wi-Fi网络
- 激活无线网卡 (接口名是
wlp0s20f3
, 可通过ip a
查看)baship link set wlp0s20f3 up
- 扫描可用网络:
bash
iwlist wlp0s20f3 scan | grep ESSID
-
生成Wi-Fi配置文件
wpa_supplicant 需要一个配置文件,里面包含Wi-Fi名称(SSID)和密码
bashwpa_passphrase "MyHomeWiFi" "MySuperSecretPassword" > /etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf
将命令中的 MyHomeWiFi 和 MySuperSecretPassword 替换成自己的真实信息。执行命令后会生成一个包含 加密 后密码(PSK)的配置文件
bashcat /etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf
-
修改网络配置文件,将Wi-Fi作为联网的连接
bashvim /etc/network/interfaces
参考配置:
bashauto lo iface lo inet loopback iface eno1 inet manual auto wlp0s20f3 iface wlp0s20f3 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf auto vmbr0 iface vmbr0 inet manual bridge-ports eno1 bridge-stp off bridge-fd 0
应用配置:
bash# 关闭有线接口 ifdown vmbr0 # 启动无线接口 ifup wlp0s20f3
测试网络连接和域名解析:
ping 192.168.216.54
ping -c 4 www.baidu.com
硬件单元挂起
PVE系统网络出现了问题,导致断网,日志如下(太多了,而且是重复的,只截取了一部分):
Jul 06 02:35:37 pve kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang:
TDH <8e>
TDT <a5>
next_to_use <a5>
next_to_clean <8d>
buffer_info[next_to_clean]:
time_stamp <1055c3180>
next_to_watch <8e>
......
问题的核心在于网卡本身的设计。这是一个由来已久的问题,相关的 Bug 报告和社区讨论可以追溯到十多年前
主要规避方案:使用 ethtool 禁用卸载功能
# 安装 ethtool 工具
apt update && apt install ethtool
# 查看所有网络接口
ip a
找到网络接口名称后可执行下面命令临时禁用卸载功能:
ethtool -K eno1 tso off gso off
永久生效(Proxmox/Debian 环境)有多种方法可以实现永久化,以下以修改网络配置为例:
# 编辑网络配置文件
vim /etc/network/interfaces
# 在对应的网络接口配置末尾添加 post-up 指令行
iface eno1 inet manual
post-up /sbin/ethtool -K eno1 tso off gso off
禁用IPv6
对于家庭网络和大多数PVE应用场景,IPv6并不是必需的。禁用它可以极大地简化网络配置,避免很多问题。在系统层面彻底禁用IPv6:
-
编辑 sysctl 配置文件:
bashvim /etc/sysctl.conf
-
在文件末尾添加以下三行:
text# Disable IPv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
-
保存并退出,让配置立即生效:
bashsysctl -p
-
重启系统以确保完全生效: 虽然
sysctl -p
会应用设置,但网络服务和内核的一些部分可能需要重启才能完全释放IPv6的绑定。重启是最彻底的方式。bashreboot
系统重启后:
-
检查
ip a
:baship a
所有接口(
lo
,eno1
,vmbr0
,wlp0s20f3
)下面的inet6
地址行都消失了。 -
尝试
ping
:bashping www.baidu.com
ImmortalWrt软路由
ImmortalWrt (社区版) 是基于OpenWrt的分支,默认集成了大量常用驱动和大量实用插件
目标: 基于NUC8,使用ImmortalWrt构建软路由
WAN: 手机USB共享网络 (按端口直通,可插拔)
LAN: NUC物理网口eno1 (有线)
网络: 管理一个独立的192.168.10.0/24子网
下载并解压镜像
-
访问 ImmortalWrt 官网下载: firmware-selector 或 Download page
-
输入设备名找到对应的固件,这里NUC8使用的是
Generic x86/64
-
下载
immortalwrt-23.05.4-x86-64-generic-squashfs-combined.img
文件。常见后缀解释:efi
版本支持UEFI启动combined
版本表示它是一个完整的磁盘镜像,可以直接使用。squashfs
是一种只读文件系统,所有改动都保存在一个可写分区,方便恢复出厂设置。
注意:NUC实测24版本暂时无法使用网口作为LAN,没有特殊需求安装23及以下版本
-
上传到PVE并解压 (使用windterm或xftp等工具)
gunzip -c immortalwrt-23-xxx.img.gz > immortalwrt-23.img
创建并配置虚拟机
核心思路:先创建并配置好ImmortalWrt虚拟机,让它具备提供网络服务的能力。在此期间,PVE主机的网络保持不变,依然可以通过现有主路由上网,确保我们的操作环境始终在线。
1. 创建虚拟机框架
- 登录 PVE Web 管理界面,点击右上角 “创建虚拟机”
- 常规 (General) 标签页设置:
- 节点 (Node):
pve
(默认) - 虚拟机ID (VM ID):
100
(或其它未被使用的ID) - 名称 (Name):
ImmortalWrt
- 节点 (Node):
- 操作系统 (OS) 标签页:
- 选择 “不要使用任何介质 (Do not use any media)”
- 类型 (Type):
Linux
- 版本 (Version): 选择最新的
6.x ...
内核版本
- 系统 (System) 标签页:
- Machine: 选择
q35
- BIOS: 默认
- Machine: 选择
- 硬盘 (Disks) 标签页: 直接删除,不需要这里的硬盘
- CPU 标签页:
- 核心 (Cores):
2
- 核心 (Cores):
- 内存 (Memory) 标签页:
- 内存 (Memory (MiB)):
2048
(1GB对于软路由来说已经非常充裕)
- 内存 (Memory (MiB)):
- 网络 (Network) 标签页:
- 桥接 (Bridge):
vmbr0
默认 - 模型 (Model):
VirtIO (半虚拟化)
默认 - 去掉防火墙的勾选
VirtIO
是专为虚拟化设计的驱动,相比模拟真实网卡(如Intel E1000),它的性能要高得多,CPU占用也更低。 - 桥接 (Bridge):
- 确认 (Confirm) 标签页: 检查所有配置无误后,点击 “完成”。
创建后可以在PVE中再添加一各纯虚拟网桥,用来作为所有虚拟机之间的通信方式:
vim /etc/network/interfaces
,添加以下内容:
auto vmbr1
iface vmbr1 inet static
address 192.168.10.10/24
gateway 192.168.10.1 # 软路由的LAN网络
bridge-ports none
bridge-stp off
bridge-fd 0
然后在PVE的web管理界面添加这个刚创建好的网桥,作为软路由的LAN之一
2. 导入磁盘并扩容
-
导入 ImmortalWrt 磁盘镜像:回到 PVE Shell (终端),执行以下命令 (请根据实际情况替换虚拟机ID、镜像文件名和存储ID):
bash# 格式: qm importdisk <VM_ID> <源文件名> <目标存储ID> qm importdisk 100 /root/immortalwrt-23.img local-lvm
qm importdisk
是PVE提供的标准命令,用于将外部磁盘镜像(如我们下载的ImmortalWrt镜像)转换为PVE可以使用的虚拟机磁盘格式,并关联到指定的虚拟机。 -
在 Web 界面中挂载新磁盘
- 在左侧导航栏中,找到并点击你刚刚创建的
100 (ImmortalWrt)
虚拟机。 - 进入 “硬件 (Hardware)” 页面。
- 你会看到一个 “未使用的磁盘0 (Unused Disk 0)”。双击它。
- 在弹出的窗口中,总线 (Bus) 类型选择
VirtIO Block
,然后点击 “添加 (Add)”。 - 扩容虚拟磁盘
- 选中我们刚刚挂载的ImmortalWrt磁盘 (例如
virtio0
)。 - 点击上方的 “磁盘操作 (Disk Action)” 按钮,在下拉菜单中选择 “调整大小 (Resize disk)”。
- 在弹出的窗口中,增量 (Increment) 字段输入你想要增加的容量。例如,输入
2
,单位选择GB
,就表示在现有基础上增加2GB。对于软路由来说,总容量有2-4GB就非常充裕了。 - 点击 “调整磁盘大小 (Resize disk)”。
- 选中我们刚刚挂载的ImmortalWrt磁盘 (例如
- 在左侧导航栏中,找到并点击你刚刚创建的
-
设置引导顺序
- 进入 “选项 (Options)” 标签页,双击 “引导顺序 (Boot Order)”。
- 在弹出的窗口中,勾选刚刚添加的新磁盘 (例如
virtio0
),并用鼠标将它拖到第一位。 - 取消勾选其他的引导项 (如
scsi0
,net0
)。
硬件修改(如果有问题或操作失误时可能会用到): 以 分离并删除旧硬盘 为例 :
- 回到 “硬件 (Hardware)” 页面。
- 选中要删除的硬盘 (例如
scsi0
)。 - 点击 “分离 (Detach)” 按钮。
- 再次选中这个已经分离的磁盘,点击 “删除 (Remove)” 按钮。
添加硬件直通
直通USB端口 (按端口)
- 首先,将你的手机用USB线连接到你选定的NUC物理USB口,并开启USB共享。
- 点击 “添加 (Add)” -> “USB设备 (USB Device)”。
- 选择 “使用USB端口 (Use USB Port)”。
- 在 端口 (Port) 下拉菜单中,你应该能看到一个代表你物理端口的选项 (例如
1-2
或Host Bus 1, Port 2
),选中它。 - 点击 “添加 (Add)”。
到此我们已经将手机所在的USB端口直接“连接”到了ImmortalWrt虚拟机。对于ImmortalWrt来说,它就好像真的物理上插着这些设备一样。
临时使用网线
在将网口作为最终的LAN之前,先临时将它作为WAN口,目的是让ImmortalWrt虚拟机能上网,以便下载并安装手机USB共享网络所需的驱动。
-
硬件配置与连接
- 用一根网线,将NUC的物理网口连接到您主路由器的LAN口上。
- 没有宽带环境可以考虑开热点,使用路由器的中继模式,然后插上网线即可
-
ImmortalWrt内部配置
- 启动ImmortalWrt虚拟机,通过PVE Console进入命令行。
- 用
ip link show
确认网卡名称(通常是eth0
)。 - 编辑网络配置文件
vi /etc/config/network
,将其内容完全替换为以下“临时上网”配置:textconfig interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'wan' option device 'eth0' # 使用物理网卡作为WAN口 option proto 'dhcp' # 从您的主路由器自动获取IP
- 保存文件后,运行
service network restart
。通过运行ping bilibili.com
确认虚拟机已能上网。
-
安装驱动
执行以下命令,安装所有需要的USB共享网络驱动:
opkg update
opkg install kmod-usb-net-rndis kmod-usb-net-cdc-ether kmod-usb-net usbutils
USB共享网络
安装完所需驱动后,就可以将USB共享网络作为WAN口使用了,同时将有线网卡作为LAN口使用
-
硬件配置与连接变更
- 确保已经将USB直通到虚拟机:
关闭ImmortalWrt虚拟机。在PVE的虚拟机
硬件
页面,点击添加
->USB设备
,将您手机要连接的那个物理USB端口直通给虚拟机。 - 拔掉之前连接在NUC物理网口和主路由器之间的网线。
- 将手机通过USB线连接到NUC上那个被直通的端口,并开启“USB网络共享”。
- 确保已经将USB直通到虚拟机:
关闭ImmortalWrt虚拟机。在PVE的虚拟机
-
ImmortalWrt最终配置
- 用
ip link show
确认接口名称,此时您应该能看到eth0
和usb0
。 - 编辑网络配置文件
vi /etc/config/network
,将其内容完全替换为以下“最终目标”配置:textconfig interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd14:7ef3:1ae9::/48' option packet_steering '1' config device option name 'br-lan' option type 'bridge' list ports 'eth0' list ports 'eth1' option ipv6 '0' config interface 'lan' option device 'br-lan' option proto 'static' option ipaddr '192.168.10.1' option netmask '255.255.255.0' config interface 'wan' option device 'usb0' option proto 'dhcp' option ipv6 '0'
- 保存文件后,运行
service network restart
。
测试USB共享网络常用到的命令:
baship a ls usb # 需要安装 usbutils # 相关日志查看 dmesg logread -f
- 用
-
最终验证
- 用一根网线将笔记本电脑连接到NUC的物理网口上。
- 笔记本应该能成功获取到
192.168.10.x
的IP地址,并能通过手机共享的网络访问互联网。 - 在笔记本浏览器访问
http://192.168.10.1
即可登录ImmortalWrt的管理后台。
自启和备份
将ImmortalWrt设置为PVE开机自启:直接在PVE的Web管理界面中就可以完成
- 登录PVE的Web管理界面。
- 在左侧的服务器视图中,找到并点击您的ImmortalWrt虚拟机(例如
100 (ImmortalWrt)
)。 - 在右侧的主窗口中,选择
选项(Options)
标签页。 - 在选项列表中,找到
开机自启动 (Start at boot)
这一行,它默认是“否 (No)”。 - 双击这一行,**勾选“开机自启动”**复选框。
- (可选)还可以设置“启动/关机顺序”和“启动延迟”。对于作为主路由的虚拟机,通常建议将其启动顺序设置为
1
,这样PVE一开机就会最先启动它,确保网络尽快恢复。
现在,当NUC主机(PVE)每次开机或重启后,PVE都会自动启动这台ImmortalWrt虚拟机,无需手动启动。
如何备份虚拟机,防止后续配置出错?
PVE提供了非常强大的内置备份功能,可以将整个虚拟机(包括它的所有配置和虚拟硬盘)打包成一个文件,方便您随时恢复到某个健康的状态。
方案A:手动备份(推荐在重大修改前执行)
当准备对ImmortalWrt的网络配置等进行重大修改之前,强烈建议先做一个手动备份。
- 登录PVE的Web管理界面。在左侧视图中,点击您的ImmortalWrt虚拟机。
- 在右侧主窗口中,选择
备份
标签页。点击页面上方的立即备份
按钮。 - 在弹出的“创建备份”窗口中,您需要配置几个关键选项:
- 存储 (Storage):选择您希望将备份文件存放在哪里。通常选择
local
,它会存放在PVE主机本地的/var/lib/vz/dump/
目录下。 - 模式 (Mode):对于作为路由器的虚拟机,推荐使用默认的
快照 (Snapshot)
模式。- 快照 (Snapshot):备份速度非常快,几乎不中断虚拟机的运行。它会先给虚拟机拍一个快照,然后备份这个快照。这是最常用的模式。
- 暂停 (Suspend):备份前会先将虚拟机暂停,备份完成后再恢复。会造成短暂的业务中断。
- 停止 (Stop):备份前会先将虚拟机完全关闭,备份完成后再重新启动。中断时间最长。
- 压缩 (Compression):同样默认即可,
ZSTD (fast)
是一个速度和压缩率都非常均衡的好选择。
- 存储 (Storage):选择您希望将备份文件存放在哪里。通常选择
- 点击
备份
按钮,备份任务就会在后台开始执行。您可以在下方的任务日志窗口中看到进度。
方案B:计划任务自动备份
还可以设置一个计划,让PVE在每天、每周或每月的固定时间自动为您备份虚拟机。
- 在PVE的Web管理界面,导航到**
数据中心
** ->备份
。 - 点击
添加
按钮来创建一个新的备份任务。 - 在弹出的窗口中进行配置:
- 节点 (Node):选择
pve
(您的PVE主机)。 - 存储 (Storage):选择备份文件存放的位置。
- 星期几 (Day of week):选择您希望在哪几天执行备份。
- 启动时间 (Start Time):选择一个系统比较空闲的时间点,例如凌晨
02:00
。 - 选择虚拟机 (Selection mode):您可以选择备份所有虚拟机,或者手动选择要备份的虚拟机(在这里选择您的ImmortalWrt)。
- 模式、压缩等选项:和手动备份一样进行选择。
- 节点 (Node):选择
- 点击
创建
,这个自动备份计划就设置好了。
如何恢复备份?
- 在PVE中,选中这台虚拟机的
备份
标签页。 - 您会看到一个备份文件列表。选中您想要恢复的那个时间点的备份文件。
- 点击上方的
恢复
按钮。在弹出的窗口中,确认信息无误后,点击恢复
。PVE会自动用备份文件覆盖当前的虚拟机状态。 - 恢复完成后,重新启动虚拟机即可
科学上网设置
OpenClash
详细的安装过程参考:https://www.youtube.com/watch?v=7wiu1YA8Pbc , 简要步骤:
- 直接从ImmortalWrt的软件包管理器中搜索
luci-app-openclash
并安装(先更新列表) - 安装内核:
- 科学上网环境下直接安装
- 从可以科学上网的的电脑下载并上传
- 使用网页管理处提供的CDN入口尝试下载,偶尔也能用
- 添加订阅,进行基础配置后即可使用
订阅链接转换
自建转换:https://sublink.202898.xyz/
定制yaml配置文件(自动更新订阅, 规则分流) ……
Nikki (原 Mihomo / MihomoTProxy)
Github: https://github.com/nikkinikki-org/OpenWrt-nikki
由于前面已经实现了通过Openclash科学上网,Nikki的安装其实很简单:
- 添加下载源 — Install From Feed (Recommended)
bash
wget -O - https://github.com/nikkinikki-org/OpenWrt-nikki/raw/refs/heads/main/feed.sh | ash
- 然后通过ImmortalWrt的Web界面安装,或者
opkg
:opkg install luci-i18n-nikki-zh-cn
使用时只需上传自己的 yaml 配置文件,简单设置首页即可
openwrt固件扩容
前提:这是基于PVE安装的,而且已经在安装时在PVE管理界面扩容过了,所以只需要在openwrt中进行分区即可
由于前面安装的是 immortalwrt-23.05.4-x86-64-generic-squashfs-combined
,扩容相对简单:
- 安装
luci-i18n-diskman-zh-cn
(注意要保证相关依赖一起安装完成) - 系统 -> 挂载点 —> 全局设置中取消自动挂载相关选项,然后保存并应用
- 系统 —> 磁盘管理 -> 点击磁盘的编辑 -> 将剩余的空间都作为一个分区即可 -> 格式化(ext4)
- 系统 -> 挂载点 -> 挂载点(添加) -> 选择刚才创建的分区挂载到
/mnt/sda3
(名字可以自定义),保存并应用 - 终端执行命令:
cp -r /overlay/* /mnt/sda3
, 检查拷贝成功即可 - 系统 -> 挂载点 -> 删除该挂载点 -> 重新创建,挂载到 外部
/overlay
-> 保存并应用 - 重启
reboot
后可发现扩容成功
安装 Ubuntu Server
下载Ubuntu镜像(如:ubuntu-24.10-live-server-amd64.iso
):华为云下载 。优先使用种子下载
下载完成后,在PVE的管理界面选择镜像上传即可
如果是安装到实体机,需要制作/烧录安装U盘, 可使用 balenaEtcher, 下载完工具后插入U盘,然后选择镜像文件,点击Flash!
即可。
安装Ubuntu
-
创建虚拟机
- General: node默认pve, vm id 不重复即可,一般默认即可, name自定义
- OS:在local 中 选择自己上传的镜像即可
- System:Machine 选择 q35, BIOS选择OVMF(UEFI) -> 存储 local-lvm 即可
- Disks, CPU, Memory:设置自己所需大小即可,其他默认。CPU的type可选 host
- Nerwork:选择自己所需网桥即可
- 确认后,可在 Options 中将镜像所在存储设备选为第一个启动项,然后开机
-
安装过程及设置 (设置时通过上下键选择, Enter键确认)
- 刚进入时直接回车,直到进入安装选项,选择
Ubuntu Server (minimized)
-> Done - 网络设置:默认dhcp即可。网络代理默认跳过即可,更新源也可以跳过
- 选择系统要安装的位置(硬盘),然后配置分区:
- 先将默认的分区(包括中间的 AVAILABLE DEVICES 下的选项 )删除(除了
/boot/efi
) - 然后在 free space 处进行分区即可,
/
总大小减5g ,/boot
剩余4~5g全部分这儿
- 先将默认的分区(包括中间的 AVAILABLE DEVICES 下的选项 )删除(除了
- 设置服务器名,账户名和密码
- 选中
Install OpenSSH Server
, 确认后将自动安装,知道底部出现Reboot Now
- PVE管理界面直接 STOP,删除原本镜像所在的 CD/DVD 设备,再次启动即可
由于安装过程中已经安装了SSH,所以到这里可以直接使用远程工具连接即可
- 刚进入时直接回车,直到进入安装选项,选择
如果后续发现无法解析DNS,可参考下面的配置:
sudo sh -c 'cat > /etc/netplan/50-cloud-init.yaml << EOF
network:
version: 2
ethernets:
enp6s18:
addresses:
- "192.168.10.123/24"
routes:
- to: "default"
via: "192.168.10.1"
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
EOF'
刷新网络(应用网络配置):sudo netplan apply
替换软件源
以阿里云镜像源为例(也可替换为清华、中科大等国内源):
先备份原配置文件
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
替换为阿里云镜像源的内容:
sudo sh -c 'cat > /etc/apt/sources.list.d/ubuntu.sources << EOF
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu
Suites: noble noble-security noble-updates noble-backports noble-proposed
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF'
或者使用清华源:
sudo sh -c 'cat > /etc/apt/sources.list.d/ubuntu.sources << EOF
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-security noble-updates noble-backports noble-proposed
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF'
中科大源:
sudo sh -c 'cat > /etc/apt/sources.list.d/ubuntu.sources << EOF
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu
Suites: noble noble-security noble-updates noble-backports noble-proposed
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF'
验证是否成功(应看到从新镜像源下载信息,和安装更新)
sudo apt update && sudo apt upgrade -y
国内常见镜像源(替换URL)
镜像站 | URL前缀 |
---|---|
阿里云 | https://mirrors.aliyun.com/ubuntu/ |
清华 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ |
中科大 | https://mirrors.ustc.edu.cn/ubuntu/ |
华为云 | https://repo.huaweicloud.com/ubuntu/ |
只需将上述命令中的
https://mirrors.aliyun.com/ubuntu/
替换为其他URL即可。
恢复默认源:
sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources
sudo apt update
最后可以安装一些常用的软件:
sudo apt install net-tools iputils-ping -y
sudo apt install vim git -y
启用 root 账户
注意:在 Ubuntu 中启用 root 账户并允许远程登录需要谨慎操作,因为这会带来安全风险。
- 启用 root 账户并设置密码
# 设置 root 密码(会提示输入两次新密码)
sudo passwd root
# 切换到 root 用户测试
su - root
- 配置 SSH 允许 root 登录
# 备份 SSH 配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑 SSH 配置文件
sudo vim /etc/ssh/sshd_config
找到以下行并进行修改:
# 将 PermitRootLogin 改为 yes
PermitRootLogin yes
# 如果存在 PasswordAuthentication,确保设置为 yes
PasswordAuthentication yes
保存文件后重启 SSH 服务:
sudo systemctl restart ssh
- 测试 root 远程登录
# 在另一台机器上测试连接
ssh root@your_server_ip
安全增强建议(强烈推荐)
允许 root 远程登录会显著增加系统被入侵的风险。在大多数情况下,使用普通用户配合 sudo 是更安全的选择。如果必须使用 root 登录,请务必结合密钥认证、防火墙和 fail2ban 等多重保护措施。
1. 使用密钥认证替代密码登录
# 生成密钥对(在客户端执行)
ssh-keygen -t rsa
# 将公钥复制到服务器的 root 账户
ssh-copy-id root@your_server_ip
# 修改 SSH 配置禁用密码登录
sudo vi /etc/ssh/sshd_config
修改内容:
PermitRootLogin prohibit-password # 允许密钥登录但禁用密码
PasswordAuthentication no # 禁用密码验证
重启 SSH:
sudo systemctl restart ssh
2. 限制 root 登录的 IP 地址
sudo vi /etc/ssh/sshd_config
添加:
AllowUsers root@your_trusted_ip
重启 SSH:
sudo systemctl restart ssh
3. 使用非标准端口
sudo vi /etc/ssh/sshd_config
修改:
Port 2222 # 或其他非标准端口
重启 SSH:
sudo systemctl restart ssh
如果需要恢复原始安全设置:
# 恢复 SSH 配置
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo systemctl restart ssh
# 锁定 root 账户
sudo passwd -l root
安装 Docker
在 Ubuntu 24 中安装 Docker 的详细步骤:
1. 安装依赖包
sudo apt update
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
gnupg \
lsb-release
2. 添加 Docker 的 GPG 密钥
# 创建必要的目录
sudo install -m 0755 -d /etc/apt/keyrings
# 下载并添加阿里云镜像的 GPG 密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
3. 添加 Docker 的 APT 软件源
添加阿里云镜像源:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 解决可能的 GPG 警告
如果遇到 GPG 警告,执行以下步骤:
# 创建 trusted.gpg.d 目录(如果不存在)
sudo mkdir -p /etc/apt/trusted.gpg.d
# 复制现有的 GPG 密钥
sudo cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/
# 重新添加软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
5. 更新软件包列表
sudo apt update
6. 安装 Docker CE
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
7. 启动并启用 Docker 服务
sudo systemctl start docker && sudo systemctl enable docker
8. 验证安装
sudo docker run hello-world
如果看到 “Hello from Docker!” 消息,说明安装成功
9. 添加用户到 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
newgrp docker # 刷新组权限,或重新登录
常见问题解决方案
1. 遇到 GPG 密钥警告
sudo apt-key list # 查看现有密钥
sudo apt-key del <key-id> # 删除冲突密钥
sudo apt update # 重试更新
2. 软件源不匹配问题
确认系统版本代号:
lsb_release -cs # 应返回 "noble"
在软件源 URL 中使用正确的代号
3. 安装特定版本 Docker
列出可用版本:
apt-cache madison docker-ce
安装指定版本:
sudo apt install docker-ce=<version> docker-ce-cli=<version> containerd.io
完全卸载 Docker
sudo apt purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
验证 Docker 运行状态
# 检查 Docker 版本
docker --version
# 查看 Docker 系统信息
docker info
# 查看运行中的容器
docker ps
# 测试运行容器
docker run -it --rm ubuntu:24.04 bash