Intel NUC8

PVE(Proxmox VE)

Proxmox VE(PVE)是一个开源的虚拟化平台,基于 Debian Linux,支持 KVM 和 LXC 容器。它提供了一个易于使用的 web 界面来管理虚拟机和容器,非常适合家庭和小型企业使用。

参照文章:https://www.qichiyu.com/

下载和安装

1.BOIS设置

  1. 先再BOIS中的高级设置页面 —> Security 中开启 VT-d 等虚拟化选项

    • Intel Virtualization Technology (VT-x): 这是最基础的CPU虚拟化支持。
    • Intel VT-d (Virtualization Technology for Directed I/O): IOMMU的硬件支持
  2. 启用UEFI,高级设置中的 Boot 下设置,并关闭Legacy

由于我的NUC8是使用SD卡槽硬改过的,为了使用原生的硬件,所以要启动原本的无线网卡和蓝牙,同时禁用SD卡

2.制作U盘安装镜像

  1. 下载PVE镜像:Proxmox VE , 推荐下载 torrent 文件,然后上传到百度网盘解析下载,或者直接使用 Motrix 等工具下载
  2. 制作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 源。国内网络更换国内源

  • 中科大源:https://mirrors.ustc.edu.cn/help/proxmox.html
  • 清华源:debian源, PVE源
  1. debian 源: 修改基础系统(Debian)的源文件

备份原始源文件:

bash
cp /etc/apt/sources.list /etc/apt/sources.list.bak

修改源文件:nano /etc/apt/sources.list ,替换为下面的内容:

bash
 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

  1. PVE专属源:修改 Proxmox 的源文件

添加非订阅 PVE 源(默认为官方订阅源,免费个人用户需要官方提供的非订阅源才可正常更新 PVE):

bash
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"}


屏蔽企业订阅源:

bash
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak  

移除订阅提示:

bash
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 文件,永久禁用订阅状态检测,并重启服务生效


  1. Ceph 仓库源

PVE 8 之后默认安装 Ceph 仓库源文件 /etc/apt/sources.list.d/ceph.list,先备份:

bash
cp /etc/apt/sources.list.d/ceph.list /etc/apt/sources.list.d/ceph.list.bak

使用如下命令更换源:

bash
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

最后‌更新软件包列表:

bash
apt update && apt upgrade -y 

PVE常用命令

在出现网络故障等问题时,如果无法使用Web界面,则需要通过命令行来管理PVE和虚拟机。

以下所有命令都在PVE主机的Shell中执行。您可以通过Web界面的Shell,或者在无法访问Web界面时,通过物理连接键盘和显示器登录PVE主机后执行。

虚拟机管理 (qm命令)

qmQEMU/KVM Machine 的缩写,是PVE管理虚拟机的核心命令。

  • 列出所有虚拟机状态

    bash
    qm list

    作用:显示所有虚拟机的VMID、名称、状态(running/stopped)等。

  • 启动/关闭/重启虚拟机

    bash
    qm start [VMID]     # 启动虚拟机
    qm stop [VMID]      # 安全关闭虚拟机(发送ACPI关机信号,最常用)
    qm shutdown [VMID]  # 功能同 qm stop
    qm reboot [VMID]    # 安全重启虚拟机
    qm reset [VMID]     # “硬重启”,相当于按物理重启键,用于死机时
    qm destroy [VMID]   # “强制断电”,最后的手段,可能损坏文件系统

    作用:控制虚拟机的电源状态。 示例:当软路由无响应时,可以尝试重启

    bash
    qm reboot 100

PVE主机网络管理

当网络崩溃时,通常是PVE主机自身的网络配置需要修正。

  • 编辑网络配置文件

    bash
    nano /etc/network/interfaces

    这是PVE网络配置的核心文件。当需要将PVE的管理方式从Wi-Fi改回有线,或者修改IP地址时,直接编辑此文件。 nano: 使用Ctrl+O保存,Ctrl+X退出。

  • 应用网络配置

    bash
    systemctl restart networking
    # 或者更推荐的
    ifreload -a

    作用:使 /etc/network/interfaces 的修改生效。但请注意,在网络配置改动较大时,最稳妥、最可靠的生效方式是直接 reboot 重启整个PVE主机。

  • 查看网络接口和IP地址

    bash
    ip a

    作用:显示所有网络接口的当前状态和IP地址,用于判断配置是否按预期生效。

虚拟机备份与恢复

在进行危险操作前,命令行备份非常有用。

  • 手动备份虚拟机

    bash
    vzdump [VMID] --mode snapshot --storage local --compress zstd

    作用:创建一个虚拟机的完整备份。这是防止“玩崩”的终极保险。

    • --mode snapshot: 使用快照模式,几乎不中断VM运行。
    • --storage local: 指定备份到名为 local 的存储空间(通常在 /var/lib/vz/dump/)。
    • --compress zstd: 使用ZSTD算法进行快速压缩。 示例:为您的软路由创建一个名为“配置前”的备份
    bash
    vzdump 100 --mode snapshot --storage local --compress zstd
  • 从备份中恢复虚拟机

    bash
    qmrestore [备份文件路径] [目标VMID]

    作用:当虚拟机被彻底玩坏时,用此命令从一个健康的备份中恢复。 示例:将VM 100恢复到之前的某个备份状态

    bash
    qmrestore /var/lib/vz/dump/vzdump-qemu-100-....vma.zst 100

    (恢复前,建议先用 qm stop 100 关闭虚拟机)

PVE防火墙管理

有时连接不通是防火墙导致的,我们可以用命令行快速控制它。

bash
pve-firewall stop      # 临时停止防火墙服务
pve-firewall start     # 启动防火墙服务
pve-firewall status    # 查看防火墙当前状态

使用Wifi连接网络

由于硬改的NUC8是使用 SD 卡的位置,可以轻松切换网卡和蓝牙,在BIOS启用原生的无线网卡和蓝牙后,可通过连接wifi接入网络

  1. 安装 wpa_supplicant 和 wireless-tools

    bash
    apt install wpasupplicant wireless-tools
  2. 扫描可用的Wi-Fi网络

  • 激活无线网卡 (接口名是 wlp0s20f3 , 可通过 ip a 查看)
    bash
    ip link set wlp0s20f3 up
  • 扫描可用网络:
    bash
    iwlist wlp0s20f3 scan | grep ESSID
    这个命令会列出所有扫描到的Wi-Fi网络的名称(ESSID)
  1. 生成Wi-Fi配置文件

    wpa_supplicant 需要一个配置文件,里面包含Wi-Fi名称(SSID)和密码

    bash
    wpa_passphrase "MyHomeWiFi" "MySuperSecretPassword" > /etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf

    将命令中的 MyHomeWiFi 和 MySuperSecretPassword 替换成自己的真实信息。执行命令后会生成一个包含 加密 后密码(PSK)的配置文件

    bash
    cat /etc/wpa_supplicant/wpa_supplicant-wlp0s20f3.conf
  2. 修改网络配置文件,将Wi-Fi作为联网的连接

    bash
    vim /etc/network/interfaces

    参考配置:

    bash
    auto 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

测试网络连接和域名解析:

bash
ping 192.168.216.54
ping -c 4 www.baidu.com

硬件单元挂起

PVE系统网络出现了问题,导致断网,日志如下(太多了,而且是重复的,只截取了一部分):

bash
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 禁用卸载功能

bash
# 安装 ethtool 工具
apt update && apt install ethtool

# 查看所有网络接口
ip a

找到网络接口名称后可执行下面命令临时禁用卸载功能:

bash
ethtool -K eno1 tso off gso off

永久生效(Proxmox/Debian 环境)有多种方法可以实现永久化,以下以修改网络配置为例:

bash
# 编辑网络配置文件
vim /etc/network/interfaces

# 在对应的网络接口配置末尾添加 post-up 指令行
iface eno1 inet manual
    post-up /sbin/ethtool -K eno1 tso off gso off

禁用IPv6

对于家庭网络和大多数PVE应用场景,IPv6并不是必需的。禁用它可以极大地简化网络配置,避免很多问题。在系统层面彻底禁用IPv6:

  1. 编辑 sysctl 配置文件:

    bash
    vim /etc/sysctl.conf
  2. 在文件末尾添加以下三行:

    text
    # Disable IPv6
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
  3. 保存并退出,让配置立即生效:

    bash
    sysctl -p
  4. 重启系统以确保完全生效: 虽然 sysctl -p 会应用设置,但网络服务和内核的一些部分可能需要重启才能完全释放IPv6的绑定。重启是最彻底的方式。

    bash
    reboot

系统重启后:

  1. 检查 ip a:

    bash
    ip a

    所有接口(lo, eno1, vmbr0, wlp0s20f3)下面的 inet6 地址行都消失了

  2. 尝试 ping:

    bash
    ping www.baidu.com

ImmortalWrt软路由

ImmortalWrt (社区版) 是基于OpenWrt的分支,默认集成了大量常用驱动和大量实用插件

目标: 基于NUC8,使用ImmortalWrt构建软路由

  • WAN: 手机USB共享网络 (按端口直通,可插拔)

  • LAN: NUC物理网口eno1 (有线)

  • 网络: 管理一个独立的192.168.10.0/24子网


下载并解压镜像

  1. 访问 ImmortalWrt 官网下载: firmware-selectorDownload page

  2. 输入设备名找到对应的固件,这里NUC8使用的是 Generic x86/64

  3. 下载 immortalwrt-23.05.4-x86-64-generic-squashfs-combined.img 文件。常见后缀解释:

    • efi 版本支持UEFI启动
    • combined 版本表示它是一个完整的磁盘镜像,可以直接使用。
    • squashfs 是一种只读文件系统,所有改动都保存在一个可写分区,方便恢复出厂设置。

    注意:NUC实测24版本暂时无法使用网口作为LAN,没有特殊需求安装23及以下版本

  4. 上传到PVE并解压 (使用windterm或xftp等工具)

bash
gunzip -c immortalwrt-23-xxx.img.gz > immortalwrt-23.img

创建并配置虚拟机

核心思路:先创建并配置好ImmortalWrt虚拟机,让它具备提供网络服务的能力。在此期间,PVE主机的网络保持不变,依然可以通过现有主路由上网,确保我们的操作环境始终在线。

1. 创建虚拟机框架

  1. 登录 PVE Web 管理界面,点击右上角 “创建虚拟机”
  2. 常规 (General) 标签页设置:
    • 节点 (Node): pve (默认)
    • 虚拟机ID (VM ID): 100 (或其它未被使用的ID)
    • 名称 (Name): ImmortalWrt
  3. 操作系统 (OS) 标签页:
    • 选择 “不要使用任何介质 (Do not use any media)”
    • 类型 (Type): Linux
    • 版本 (Version): 选择最新的 6.x ... 内核版本
  4. 系统 (System) 标签页:
    • Machine: 选择q35
    • BIOS: 默认
  5. 硬盘 (Disks) 标签页: 直接删除,不需要这里的硬盘
  6. CPU 标签页:
    • 核心 (Cores): 2
  7. 内存 (Memory) 标签页:
    • 内存 (Memory (MiB)): 2048 (1GB对于软路由来说已经非常充裕)
  8. 网络 (Network) 标签页:
    • 桥接 (Bridge): vmbr0 默认
    • 模型 (Model): VirtIO (半虚拟化) 默认
    • 去掉防火墙的勾选

    VirtIO是专为虚拟化设计的驱动,相比模拟真实网卡(如Intel E1000),它的性能要高得多,CPU占用也更低。

  9. 确认 (Confirm) 标签页: 检查所有配置无误后,点击 “完成”

创建后可以在PVE中再添加一各纯虚拟网桥,用来作为所有虚拟机之间的通信方式:

vim /etc/network/interfaces ,添加以下内容:

bash
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. 导入磁盘并扩容

  1. 导入 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可以使用的虚拟机磁盘格式,并关联到指定的虚拟机。

  2. 在 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)”
  3. 设置引导顺序

    • 进入 “选项 (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-2Host Bus 1, Port 2),选中它。
  • 点击 “添加 (Add)”

到此我们已经将手机所在的USB端口直接“连接”到了ImmortalWrt虚拟机。对于ImmortalWrt来说,它就好像真的物理上插着这些设备一样。


临时使用网线

在将网口作为最终的LAN之前,先临时将它作为WAN口,目的是让ImmortalWrt虚拟机能上网,以便下载并安装手机USB共享网络所需的驱动。

  1. 硬件配置与连接

    • 用一根网线,将NUC的物理网口连接到您主路由器的LAN口上。
    • 没有宽带环境可以考虑开热点,使用路由器的中继模式,然后插上网线即可
  2. ImmortalWrt内部配置

    • 启动ImmortalWrt虚拟机,通过PVE Console进入命令行。
    • ip link show 确认网卡名称(通常是 eth0)。
    • 编辑网络配置文件 vi /etc/config/network,将其内容完全替换为以下“临时上网”配置:
      text
      config 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 确认虚拟机已能上网。
  3. 安装驱动

执行以下命令,安装所有需要的USB共享网络驱动:

bash
opkg update
opkg install kmod-usb-net-rndis kmod-usb-net-cdc-ether kmod-usb-net usbutils

USB共享网络

安装完所需驱动后,就可以将USB共享网络作为WAN口使用了,同时将有线网卡作为LAN口使用

  1. 硬件配置与连接变更

    • 确保已经将USB直通到虚拟机: 关闭ImmortalWrt虚拟机。在PVE的虚拟机硬件页面,点击添加 -> USB设备,将您手机要连接的那个物理USB端口直通给虚拟机。
    • 拔掉之前连接在NUC物理网口和主路由器之间的网线。
    • 手机通过USB线连接到NUC上那个被直通的端口,并开启“USB网络共享”
  2. ImmortalWrt最终配置

    • ip link show 确认接口名称,此时您应该能看到 eth0usb0
    • 编辑网络配置文件 vi /etc/config/network,将其内容完全替换为以下“最终目标”配置:
      text
      config 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共享网络常用到的命令:

    bash
    ip a
    ls usb   # 需要安装 usbutils
    
    # 相关日志查看
    dmesg
    logread -f
  3. 最终验证

    • 用一根网线将笔记本电脑连接到NUC的物理网口上。
    • 笔记本应该能成功获取到192.168.10.x的IP地址,并能通过手机共享的网络访问互联网。
    • 在笔记本浏览器访问 http://192.168.10.1 即可登录ImmortalWrt的管理后台。

自启和备份

将ImmortalWrt设置为PVE开机自启:直接在PVE的Web管理界面中就可以完成

  1. 登录PVE的Web管理界面
  2. 在左侧的服务器视图中,找到并点击您的ImmortalWrt虚拟机(例如 100 (ImmortalWrt))。
  3. 在右侧的主窗口中,选择 选项(Options) 标签页。
  4. 在选项列表中,找到 开机自启动 (Start at boot) 这一行,它默认是“否 (No)”。
  5. 双击这一行,**勾选“开机自启动”**复选框。
  6. (可选)还可以设置“启动/关机顺序”和“启动延迟”。对于作为主路由的虚拟机,通常建议将其启动顺序设置为 1,这样PVE一开机就会最先启动它,确保网络尽快恢复。

现在,当NUC主机(PVE)每次开机或重启后,PVE都会自动启动这台ImmortalWrt虚拟机,无需手动启动。


如何备份虚拟机,防止后续配置出错?

PVE提供了非常强大的内置备份功能,可以将整个虚拟机(包括它的所有配置和虚拟硬盘)打包成一个文件,方便您随时恢复到某个健康的状态。

方案A:手动备份(推荐在重大修改前执行)

当准备对ImmortalWrt的网络配置等进行重大修改之前,强烈建议先做一个手动备份。

  1. 登录PVE的Web管理界面。在左侧视图中,点击您的ImmortalWrt虚拟机
  2. 在右侧主窗口中,选择 备份 标签页。点击页面上方的 立即备份 按钮。
  3. 在弹出的“创建备份”窗口中,您需要配置几个关键选项:
    • 存储 (Storage):选择您希望将备份文件存放在哪里。通常选择 local,它会存放在PVE主机本地的 /var/lib/vz/dump/ 目录下。
    • 模式 (Mode)对于作为路由器的虚拟机,推荐使用默认的 快照 (Snapshot) 模式。
      • 快照 (Snapshot):备份速度非常快,几乎不中断虚拟机的运行。它会先给虚拟机拍一个快照,然后备份这个快照。这是最常用的模式。
      • 暂停 (Suspend):备份前会先将虚拟机暂停,备份完成后再恢复。会造成短暂的业务中断。
      • 停止 (Stop):备份前会先将虚拟机完全关闭,备份完成后再重新启动。中断时间最长。
    • 压缩 (Compression):同样默认即可,ZSTD (fast) 是一个速度和压缩率都非常均衡的好选择。
  4. 点击 备份 按钮,备份任务就会在后台开始执行。您可以在下方的任务日志窗口中看到进度。

方案B:计划任务自动备份

还可以设置一个计划,让PVE在每天、每周或每月的固定时间自动为您备份虚拟机。

  1. 在PVE的Web管理界面,导航到**数据中心** -> 备份
  2. 点击添加按钮来创建一个新的备份任务。
  3. 在弹出的窗口中进行配置:
    • 节点 (Node):选择 pve(您的PVE主机)。
    • 存储 (Storage):选择备份文件存放的位置。
    • 星期几 (Day of week):选择您希望在哪几天执行备份。
    • 启动时间 (Start Time):选择一个系统比较空闲的时间点,例如凌晨 02:00
    • 选择虚拟机 (Selection mode):您可以选择备份所有虚拟机,或者手动选择要备份的虚拟机(在这里选择您的ImmortalWrt)。
    • 模式、压缩等选项:和手动备份一样进行选择。
  4. 点击创建,这个自动备份计划就设置好了。

如何恢复备份?

  1. 在PVE中,选中这台虚拟机的备份标签页。
  2. 您会看到一个备份文件列表。选中您想要恢复的那个时间点的备份文件
  3. 点击上方的 恢复 按钮。在弹出的窗口中,确认信息无误后,点击恢复。PVE会自动用备份文件覆盖当前的虚拟机状态。
  4. 恢复完成后,重新启动虚拟机即可

科学上网设置

OpenClash

详细的安装过程参考:https://www.youtube.com/watch?v=7wiu1YA8Pbc , 简要步骤:

  • 直接从ImmortalWrt的软件包管理器中搜索 luci-app-openclash 并安装(先更新列表)
  • 安装内核:
    1. 科学上网环境下直接安装
    2. 从可以科学上网的的电脑下载并上传
    3. 使用网页管理处提供的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

  1. 创建虚拟机

    • General: node默认pve, vm id 不重复即可,一般默认即可, name自定义
    • OS:在local 中 选择自己上传的镜像即可
    • System:Machine 选择 q35, BIOS选择OVMF(UEFI) -> 存储 local-lvm 即可
    • Disks, CPU, Memory:设置自己所需大小即可,其他默认。CPU的type可选 host
    • Nerwork:选择自己所需网桥即可
    • 确认后,可在 Options 中将镜像所在存储设备选为第一个启动项,然后开机
  2. 安装过程及设置 (设置时通过上下键选择, Enter键确认)

    • 刚进入时直接回车,直到进入安装选项,选择 Ubuntu Server (minimized) -> Done
    • 网络设置:默认dhcp即可。网络代理默认跳过即可,更新源也可以跳过
    • 选择系统要安装的位置(硬盘),然后配置分区:
      • 先将默认的分区(包括中间的 AVAILABLE DEVICES 下的选项 )删除(除了/boot/efi
      • 然后在 free space 处进行分区即可,/ 总大小减5g , /boot 剩余4~5g全部分这儿
    • 设置服务器名,账户名和密码
    • 选中 Install OpenSSH Server , 确认后将自动安装,知道底部出现 Reboot Now
    • PVE管理界面直接 STOP,删除原本镜像所在的 CD/DVD 设备,再次启动即可

    由于安装过程中已经安装了SSH,所以到这里可以直接使用远程工具连接即可

如果后续发现无法解析DNS,可参考下面的配置:

bash
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


替换软件源

以阿里云镜像源为例(也可替换为清华、中科大等国内源):

先备份原配置文件

bash
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

替换为阿里云镜像源的内容:

bash
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'

或者使用清华源:

bash
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'

中科大源:

bash
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'

验证是否成功(应看到从新镜像源下载信息,和安装更新)

bash
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即可。


恢复默认源:

bash
sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources
sudo apt update

最后可以安装一些常用的软件:

bash
sudo apt install net-tools iputils-ping -y

sudo apt install vim git -y 

启用 root 账户

注意:在 Ubuntu 中启用 root 账户并允许远程登录需要谨慎操作,因为这会带来安全风险。

  1. 启用 root 账户并设置密码
bash
# 设置 root 密码(会提示输入两次新密码)
sudo passwd root

# 切换到 root 用户测试
su - root
  1. 配置 SSH 允许 root 登录
bash
# 备份 SSH 配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑 SSH 配置文件
sudo vim /etc/ssh/sshd_config

找到以下行并进行修改:

ini
# 将 PermitRootLogin 改为 yes
PermitRootLogin yes

# 如果存在 PasswordAuthentication,确保设置为 yes
PasswordAuthentication yes

保存文件后重启 SSH 服务:

bash
sudo systemctl restart ssh
  1. 测试 root 远程登录
bash
# 在另一台机器上测试连接
ssh root@your_server_ip

安全增强建议(强烈推荐)

允许 root 远程登录会显著增加系统被入侵的风险。在大多数情况下,使用普通用户配合 sudo 是更安全的选择。如果必须使用 root 登录,请务必结合密钥认证、防火墙和 fail2ban 等多重保护措施。

1. 使用密钥认证替代密码登录

bash
# 生成密钥对(在客户端执行)
ssh-keygen -t rsa

# 将公钥复制到服务器的 root 账户
ssh-copy-id root@your_server_ip

# 修改 SSH 配置禁用密码登录
sudo vi /etc/ssh/sshd_config

修改内容:

ini
PermitRootLogin prohibit-password  # 允许密钥登录但禁用密码
PasswordAuthentication no          # 禁用密码验证

重启 SSH:

bash
sudo systemctl restart ssh

2. 限制 root 登录的 IP 地址

bash
sudo vi /etc/ssh/sshd_config

添加:

ini
AllowUsers root@your_trusted_ip

重启 SSH:

bash
sudo systemctl restart ssh

3. 使用非标准端口

bash
sudo vi /etc/ssh/sshd_config

修改:

ini
Port 2222  # 或其他非标准端口

重启 SSH:

bash
sudo systemctl restart ssh

如果需要恢复原始安全设置:

bash
# 恢复 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. 安装依赖包

bash
sudo apt update
sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common \
    gnupg \
    lsb-release

2. 添加 Docker 的 GPG 密钥

bash
# 创建必要的目录
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 软件源

添加阿里云镜像源:

bash
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 警告,执行以下步骤:

bash
# 创建 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. 更新软件包列表

bash
sudo apt update

6. 安装 Docker CE

bash
sudo apt install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

7. 启动并启用 Docker 服务

bash
sudo systemctl start docker && sudo systemctl enable docker

8. 验证安装

bash
sudo docker run hello-world

如果看到 “Hello from Docker!” 消息,说明安装成功

9. 添加用户到 docker 组(避免每次使用 sudo)

bash
sudo usermod -aG docker $USER
newgrp docker  # 刷新组权限,或重新登录

常见问题解决方案

1. 遇到 GPG 密钥警告

bash
sudo apt-key list  # 查看现有密钥
sudo apt-key del <key-id>  # 删除冲突密钥
sudo apt update  # 重试更新

2. 软件源不匹配问题

确认系统版本代号:

bash
lsb_release -cs  # 应返回 "noble"

在软件源 URL 中使用正确的代号

3. 安装特定版本 Docker

列出可用版本:

bash
apt-cache madison docker-ce

安装指定版本:

bash
sudo apt install docker-ce=<version> docker-ce-cli=<version> containerd.io

完全卸载 Docker

bash
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 运行状态

bash
# 检查 Docker 版本
docker --version

# 查看 Docker 系统信息
docker info

# 查看运行中的容器
docker ps

# 测试运行容器
docker run -it --rm ubuntu:24.04 bash