J4125 All In One主机搭建pve,安装iKuai、OpenWRT、Adguard LXC、Debian12 LXC、Home Assistant OS。

本期开始是软路由安装与配置系列,一共计划三期,主要记录工控机安装虚拟化系统并搭建软路由、服务器、NAS、Docker等系统及其配置和使用过程。本文不作为教程,仅仅是up主初试All in One主机搭建的记录,仅供参考。

参考:

【软路由】J4125安装PVE7.3+iKuai+OpenWrt+NAS+Win10+Debian+CentOS_pve添加第二块硬盘_xuehu96的博客-CSDN博客

司波图文字:通用PVE AIO安装教程: 通用PVE集成软路由,KODI,基于LXC的Docker服务教程 (gitee.com)

AIO从入门到如土 篇一:一文为你揭开一台all in one家庭服务器的神秘面纱_服务器_什么值得买 (smzdm.com)

一、宿主机

选用倍控J4125 4*2.5G网口小主机,安装16GB内存、2T SATA固态硬盘和螃蟹8156b 2.5GUSB网卡(做管理口用,虽然这机器USB只能跑2.0速度)。

4网口工控机

网口接线

参考:家用软路由、NAS、All in one网络拓扑方案 - 知乎 (zhihu.com)

AIO网络接线图

网口定义

宿主机外部名称宿主机设备名宿主机pcie地址软路由内设备名
ETH0enp1s001:00.0eth1
ETH1enp2s002:00.0eth2
ETH2eno103:00.0eth1
ETH3enp4s004:00.0

硬盘分配

500G mSATA做宿主机系统盘和虚拟机储存空间,2T SATA固态直接挂载给LXC容器做下载空间。

flowchart LR
subgraph sdb ["/dev/sdb 2TB"]
    O["挂载 <br  /> - Debian12 LXC /mnt/ext  <br  /> - qbittorrent LXC /mnt/ext"]
end

subgraph sda ["/dev/sda 500GB"]
    subgraph 11[local 100G]
        A["100G  <br  /> PVE/ESXi"]
    end
    subgraph 22[local-lvm 375G]
        direction TB
        B[10G  <br  /> iKuai]
        C[2.5G  <br  /> OpenWRT]
        F[32G  <br  /> HAOS]
        G(10G  <br  /> qbittorrent LXC)
        H(10G  <br  /> Nginx LXC)
        I(20G  <br  /> AdGuard LXC)
        D("100G  <br  /> Debian12 LXC")
    end
end

内存分配

LXC不会占用全部内存,KVM虚拟机会分配全部内存。

graph LR
subgraph DRAM ["16GiB内存"]
    A[iKuai 2G]
    B[OpenWRT 4G]
    D[HAOS 4G]
    C[[Debian LXC 10G]]
    E[[qbittorrent LXC 4G]]
    F[[Nginx LXC 2G]]
    G[[AdGuard LXC 1G]]
end

esxi or pve?

  • esxi不能显示CPU温度?
  • 容易核显直通
  • esxi需封装i226、8156b驱动
  • esxi直通核显需要预留内存
  • esxi性能损失更小?但无法利用p-state,功耗更大?

网卡驱动:关于RTL8156 USB 2.5G网卡的安装说明 - 哔哩哔哩 (bilibili.com)

PVE7.3 与 ESXi7.0U3c 性能对比:https://kb.blockbridge.com/technote/proxmox-vs-vmware-nvmetcp/

PVE 8.0.3、ESXi 8.0U1、Unraid 6.12.4、Hyper-V和黑群晖 7.1.1虚拟性能的比较:https://youtu.be/hdDNNgnMPII?si=UzrYLOJv4TTvSxFt

结论:PVE在Geekbench跑分中落后ESXi 2到3个百分点,其余指标均低于ESXi百分之1以内。

二、PVE 8.0

2.1 开启IOMMU组

vim /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT 中,添加intel_iommu=oniommu=pt

2.2 虚拟机架构

graph TD
AIO[(AIO)] --> PVE(PVE) ==> A([100 debian12 LXC])
PVE --> B[101 OpenWRT]
PVE --> C[102 iKuai]
PVE --> D[103 HAOS]
PVE ==> E([104 qbittorrent])
PVE ==> F([105 Nginx])
PVE ==> G([106 AdGuard])

2.3 PVE宿主机配置

pve8.0 Debian12 换清华源

vim /etc/apt/sources.list
# 8.0清华源
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

# security updates
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
vim /etc/apt/sources.list.d/pve-enterprise.list
# 8.0官方企业付费订购源
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

修复:

#修复更新时源报401错
echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list

#下载官方授权加密秘钥证书
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

pve-tools

GitHub项目:ivanhao/pvetools: proxmox ve tools script

apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git
cd pvetools
./pvetools.sh

用于显示CPU温度、调整CPU频率、快速PCI-E直通等。

2.4 PVE LXC容器

1)网络

  • 100 Debian12 LXC 网卡eno1直通,且使用静态ip:
nano /etc/pve/lxc/100.conf
lxc.net.1.type: phys
lxc.net.1.link: eno1
lxc.net.1.name: eth1
lxc.net.1.ipv4.address: 192.168.31.101/24
lxc.net.1.ipv4.gateway: 192.168.31.1
lxc.net.1.flags: up
  • 容器内静态IP
vim /etc/network/interfaces
auto eth0
iface eth0 inet static
        address 192.168.2.10/24
        gateway 192.168.2.1
        # dns-* options are implemented by the resolvconf package, if installed
           dns-nameservers xxx
           dns-search your.search.domain.here

iface eth0 inet6 dhcp
firewall=1,gw=192.168.2.1, ,ip=192.168.2.10/24,ip6=dhcp

在PVE管理界面,容器的DNS设置中改为你想要的设置。

vim /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

iface eth0 inet6 auto

软路由处设置Debian12 LXC静态DHCP并网关指向旁路由,查看网关是否切换成功:

# ip route show
default via 192.168.2.2 dev eth0 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.100

2)核显“直通”

核显“直通”做硬解(LXC容器与pve共同使用核显)

#lxc.apparmor.allow_nesting = 1
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 dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
lxc.apparmor.profile: unconfined

pve 查看核显:

# ls -l /dev/dri           
total 0
drwxr-xr-x 2 root root         80 Nov 23 21:39 by-path
crw-rw---- 1 root video  226,   0 Nov 23 21:39 card0
crw-rw---- 1 root render 226, 128 Nov 23 21:39 renderD128

3)挂载硬盘

请采用by-idby-uuid方式挂载分区

# by-id
pct set 100 -mp0 /dev/disk/by-id/ata-GSL-2TB_0013204001102-part1,mp=/mnt/ext
# by-uuid
pct set 104 -mp0 /dev/disk/by-uuid/f42bcf36-3fee-400f-a8cb-bfaf2697872,mp=/mnt/ext

直接直通:

brw-rw---- 1 root disk 8, 16 Nov 27 20:18 /dev/sdb
brw-rw---- 1 root disk 8, 17 Nov 27 20:18 /dev/sdb1
#lxc.cgroup.devices.allow: b 8:16 rwm
lxc.cgroup.devices.allow: b 8:17 rwm
lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/ID/mount-hook.sh
lxc.mount.entry: /dev/sda1 /dev/sda1 bind,create=dir,optional 0 0
vim /var/lib/lxc/ID/mount-hook.sh
#!/bin/sh
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda b 8 0
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda1 b 8 1

2.5 PVE KVM虚拟机

虚拟机 CPU选Host 最小性能损耗;选项开启 QEMU GuestAgent ,虚拟机内安装qemu-guest-agent.

  • RDM直通:
qm set 101 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102
  • 核显直通:

GRUB增加:

intel_iommu=on initcall_blacklist=sysfb_init

更新grub update-grub

编辑黑名单:/etc/modprobe.d/pve-blacklist.conf

blacklist i915
blacklist snd_hda_intel
options vfio_iommu_type1 allow_unsafe_interrupts=1

更新initramfs

update-initramfs -u -k all

重启pve

update-pciids

101.conf

args: -set device.hostpci1.x-igd-gms=1
hostpci1: 0000:00:02.0,legacy-igd=1,romfile=vbios.bin

vbios

判断是否需要romfile

cd /sys/bus/pci/devices/0000:00:02.0/
echo 1 > rom
cat rom

三、ESXi 8.0U2

ESXi8.0U2 vCenter

  • 封装i226-V、8156b驱动
  • UHD600核显直通支持
  • J4125
  • vCenter

vcenter 封装驱动https://blog.csdn.net/myxsL/article/details/130989373

镜像来源:23年10月4日更新-ESXI 8.0 U2 ESXI 7.0 8.0系列,封包I225V/螃蟹USB驱动镜像-软路由,x86系统,openwrt(x86),Router OS 等-恩山无线论坛 (right.com.cn)

核显直通

开机释放核显权限:

esxcli system settings kernel set -s vga -v FALSE

修改虚拟机配置文件

vi /vmfs/volumes/datastore1/debian12_esxi_xfce/debian12_esxi_xfce.vmx

添加:

pciPassthru.use64bitMMIO="TRUE"
pciPassthru.64bitMMIOSizeGB=64

(然而对于我的镜像和核显,这并没用,可能驱动不支持,或为reset bug,所以放弃ESXi转而投入PVE怀抱)

四、主路由 iKuai

设置WAN口与LAN口,设置WAN口PPPoE拨号账号密码,设置LAN口ip。

设置开启IPv6与DHCPv6

设置DHCP,DNS使用公共DNS,普通用户使用网关指向iKuai(192.168.2.1);固定需要走代理的设备设置固定DHCP,并将网关指向代理服务器,本例中即旁路由OpenWRT192.168.2.2

设置DNS服务器,可以与DHCP中设置相同,开启DNS加速。

五、旁路由 OpenWRT

iStoreOS PVE官方安装教程:X86 PVE 安装 | 易有云产品中心 (linkease.com)

pve下载工具

wget https://fw0.koolcenter.com/binary/other-tools/img2kvm

pve下载镜像:

wget https://fw0.koolcenter.com/iStoreOS/x86_64/istoreos-22.03.5-2023112413-x86-64-squashfs-combined.img.gz

虚拟机内安装Qemu-Guest-Agent

opkg update
opkg install qemu-ga

iStore扩展插件包: https://github.com/AUK9527/Are-u-ok/tree/main/x86

六、Home Assistant OS

一键创建HAOS虚拟机脚本:Proxmox/vm/haos-vm.sh at main · tteck/Proxmox (github.com)

默认配置 2核4G 32GB硬盘

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/vm/haos-vm.sh)"

安装插件与集成

  • 安装ssh插件

使用第三方应用(如MobaXterm)生成ssh密钥对(为了debian12以上考虑,最好生成非RSA的),并填写SSH addon配置

username: hassio
password: ""
authorized_keys:
  - >-
    ssh-ed25519
    AAAAC3NzaC1lZDI1NTE5AAAAIO93BvbKjc//tyJ0HXTisr80F50cODQfJQcJscyTRz9V
    ed25519-key-20231126
sftp: false
compatibility_mode: false
allow_agent_forwarding: false
allow_remote_port_forwarding: false
allow_tcp_forwarding: false
  • 安装HACS
wget -O - https://get.hacs.xyz | bash -

通过HACS下载第三方集成需要网络代理,最好先配置好旁路由。

遇到PVE中显示内存占用高,但HomeAssistant中却显示内存占用很低,重启虚拟机即可。(与PVE的内存分配机制有关:HAOS/Proxmox ram jump usage after backup · Issue #847 · sabeechen/hassio-google-drive-backup (github.com)

Nginx反代信任

configuration.yaml文件中添加以下配置,参考:HTTP - Home Assistant (home-assistant.io)

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.100.27 #反代服务器
    - 172.30.33.0/24 #本机反代ip段

七、TrueNAS(未安装)

  • RDM直通:
qm set 104 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102
qm set 105 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102

TrueNAS Core基于FreeBSD,TrueNAS Scale基于Debian Linux。用TrueNAS为的是ZFS,但本机只有一块SATA硬盘,就直接挂在给Debian Server,不再考虑使用专用NAS系统。

八、Debian12 LXC

对于KVM虚拟机,需要关闭自动休眠。

关闭自动休眠 :

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

检查是否成功关闭 :

systemctl status sleep.target

返回信息出现sleep.target inactive(dead)即关闭成功

ssh密钥登陆

配置关闭密码访问,并生成ssh密钥对,以后客户端使用私钥登录。

编辑sshd_config

vim /etc/ssh/sshd_config
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication no
# 活跃时间
ClientAliveInterval 900
ClientAliveCountMax 3

重启sshd

systemctl restart sshd

debian 12 openssh 9以上默认不提供RSA支持,请申请更安全的非RSA密钥。

另一方面关于 SHA-1 哈希算法,此前该算法被发现构造前缀碰撞攻击成本已降至低于 5 万美元(实际为 4.5 万美元),因此开发团队决定禁用 ssh-rsa 公钥签名算法。

有一些更好的算法可以替代,包括 RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512、ssh-ed25519 签名算法与 RFC5656 ECDSA 算法。目前这些算法在 OpenSSH 中都已经支持。

完整的更新说明查看:http://www.openssh.com/txt/release-8.2

使用ed25519算法生成密钥

ssh-keygen -t ed25519

公钥添加至授权名单

cd ~/.ssh #若使用普通用户登录,也需要相应拷贝
cat id_ed25519.pub > authorized_keys

将私钥id_ed25519拷贝至客户端用于ssh登录.

本地化

  • locale重设
dpkg-reconfigure locales

空格选中 en_US.UTF-8 UTF-8 zh_CN.UTF-8 UTF-8,defalut选择 en_US.UTF-8 UTF-8

  • 时区重设
dpkg-reconfigure tzdata

选择Asia/Shanghai

  • apt换源:与上文PVE换源相同
  • 创建并使用普通账户
# 家目录/mnt/ext/gakki 创建账户
useradd -m -b /mnt/ext gakki
# 若已有目录可选择不创建家目录 使用-M
useradd -M -b /mnt/ext gakki
# 创建密码
passwd gakki
# 修改默认sh为zsh
chsh -s /bin/zsh gakki

Docker

安装dockerdocker-compose

apt update && apt install curl
#curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
apt install docker-compose

换国内镜像源

vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}

安装Jellyfin、Nextcloud、qbittorrent等容器将在下下期展开。

Syncthing

使用普通用户启用,避免权限问题

apt install syncthing

临时启动服务

systemctl enable syncthing@gakki --now
vim ~/.config/syncthing/config.xml

找到127.0.0.1:8384,改为0.0.0.0:8384

重新启用服务

systemctl restart syncthing@gakki

九、各应用LXC

qbittorrent

使用新建LXC搭建qbittorrent而非在Debian LXC中使用Docker安装qbittorrent,为的是获取完整的带宽与独立的IPv4与IPv6地址,从而更方便地设置不经过旁路由直连外网。

依旧使用Proxmox VE Helper脚本一键搭建:

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/qbittorrent.sh)"

默认配置2核2G,8GB存储。本例中qbittorrent LXC与旁路由共享eno1网口,因此现在pve中设置桥接自eno1的新Linux Bridge vmbr1

安装完成后挂载SATA硬盘作为下载存储,pve宿主机操作:

pct set 104 -mp0 /dev/disk/by-uuid/f42bcf36-3fee-400f-a8cb-bfaf2697872,mp=/mnt/ext

默认WebUI登录账户密码admin changeme

为了pt下载可以在设置中更换掉默认监听端口,并且在主路由iKuai的ACL增加监听端口的传入规则(见下期)。

AdGuard LXC

PVE Helper一键脚本,默认单核512MiB内存,2G硬盘。为了后期系统更新着想,请使用Manual模式手动改大内存、硬盘容量。

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard.sh)"

安装完可以把WebUI端口调为80,方便HA使用。