NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Linux

  • Docker

  • 云原生

  • Kubernetes

  • KubeSphere

  • K3S

  • 笔记

    • 基于KtConnect实现本地与kubernetes集群互通
    • 基于Wireguard实现本地与kubernetes集群互通
    • Kubesphere问题总结
    • SpringBoot应用存活探针
    • DevOps - IDEA与Docker实现CI
    • 下一代CI工具 - Tekton
    • 基于Clash.Meta实现的流量分离
    • Windows命令-route路由表
    • 基于acme.sh的证书分发
    • 基于Nginx的内网域名管理
    • 基于Cloudflare-Zero-Trust的内网穿透
    • 基于rclone的跨云对象存储迁移
    • 基于DNS区域解析分流国内外CDN
    • 年轻人的第一台服务器(D1581)
      • 背景
      • 方案选择
        • 服务器
        • 家用电脑
        • 寨板X99
        • D1581
      • 配置单
      • 机箱定制
      • PVE部署
        • 安装
        • PCIE(网卡)直通
        • 启用 IOMMU
        • IOMMU直通模式
        • 内核模块
        • 重启
        • 检查
        • PVE 硬盘直通
        • 安装OpenWrt
        • 安装代理工具
        • 安装WireGurad
        • 允许通过WAN口访问LAN设备
        • 使用cloud-init创建虚拟机
      • 完善PVE
        • 添加CPU温度
        • 添加证书
    • IPMI笔记
    • ipmitool笔记
    • 基于WireGuard实现的云组网
    • 基于Tailscale实现的云组网
  • PVE

  • 维修

  • DevOps

  • 云服务

  • 路由器

  • Hyper-V

  • Windows

  • macOS

  • 运维
  • 笔记
NipGeihou
2023-09-11
目录

年轻人的第一台服务器(D1581)

# 背景

在日常上网冲浪中,时不时能刷到一些是性能是传统中间件 X 倍的新中间件项目,而我仅有的三台 4c8g 的腾讯云服务器不足以让我随心所欲的拉项目下来跑,而最近一年良心云似乎没有开车的动作,甚至把 24 的 hk 轻量给砍了,云服务器高昂的售价,必然会是本不富裕的我雪上加霜,于是我想到了自己搭建物理服务器,舍弃高可用,All in boom。

# 方案选择

# 服务器

最标准的机柜服务器,从一开始就被我 vote 掉了,无论是声音还是占地面积都达不到我的要求。

# 家用电脑

最开始想到的是,使用家用电脑,因为手上用多年前留下的矿渣: TB250-BTC + 9100F + 8G*2 + 矿龙 ,于是我搭了一个 PVE 来玩,而 16G 的内存根本不够玩,而主板又只有两个内存槽。于是乎要升级,要么换主板、要么换内存条,而 9100F 的性能在牙膏厂挤了一大坨牙膏后的 2023 年看来,性能有点落后了,还是得装台新的。

# 寨板 X99

选择装台新的,还是想装个服务器 CPU 的,毕竟专业的事情还是交给专业的人,柜式服务器不考虑了,那么就只剩下塔式的了,主要就两种:品牌工作站、寨板组装机,而品牌工作站高昂的价格劝退。

在攒机过程中,发现 X99 的缺点十分明显:DDR3、功耗高,似乎是上一代的产物。

# D1581

在寻找更好的解决方案时,看到了洋垃圾 D1581 装机记录 (opens new window)这篇文章,他有着和我相似的需求和精力,而他最终选择了 D1581,D1581 是何物?带着疑问我又开始了新一轮的搜寻,发现他仍然有与上面 X99 相似的缺点

  1. 内存条必须是 DDR3L,插两条 16G 可以 1600MHz。最多支持四条 16G 共 64G,降频到 1333MHz。
  2. SATA 盘共享带宽。不要插多个 SATA 硬盘。
  3. CPU 没核显,需要一张亮机卡。(不能无头启动)
  4. 有用户提到,温度低于 10℃ 时,CPU 会概率性地降频到 800MHz。我复现了这个情况。

在我将要 vote 掉这个方案的时候,我看到了定制 INTEL D-1581 服务器主板预览 (陈多鱼的项目) - 哔哩哔哩 (opens new window),这位大佬众筹的定制 D1581 板 U 给出了一套完全不同的方案:支持 DDR4 最高 128G、支持无头启动、自带 2.5G 网卡等等。

最终我在 2023 年 7 月底选择了参与 tank 1581 的众筹,并在 2023 年 9 月初拿到了首批焊油限定款板 U。

# 配置单

随着 D1581 的到货,其他硬件硬件也该买了,配置如下:

配件名称 型号 / 数量 价格
CPU TANK 米多贝克定制 D-1581 669
主板 TANK 米多贝克定制 D-1581 -
内存条 镁光 DDR4 32G 2R×4 ECC REG 2133 * 4 700
散热器 AVC 铜芯 下压式 CPU 散热器 27
硬盘 梵想(FANXIANG)S790 2TB 500
电源 傻瓜超人 小 1U (FLEX) 300W 159
显卡 亮机卡 14
机箱 定制 亚克力定制 60
合计 - 2129

# 机箱定制

逛了一圈某宝,都没能找到符合我符合我心意的机械,要么是电源侧放直接会把 PCIE 挡住的,要么是为了兼顾宽度 24.4cm 的主板,把机箱做宽的,在询问了某宝前排做亚克力定制的一个店家后,根据我给出的尺寸 300mm*200mm*100m ,店家的报价是 30 左右,这个价格比起买一个机箱划算多了,并且还是定制的,于是就开始了每天下班的瞎折腾建模。

8d66458d02fae6870125b0a680a9072

image-20230917171424516

# PVE 部署

以 8.0.3 为例

由于我这台服务器可能到处搬,可能放在公司、出租屋、家里,因此 PVE 的 ip 地址不打算使用以上任何地方的子网 ip,定义一个子网段用于 pve 里的所有虚拟机,也包括管理端 ip,假设这个 IP 段为 192.168.100.1/24

# 安装

唯一要注意的是,选最后一个网口作为管理网口,并将 IP 设为 192.168.100.254 ,安装好后通过手动设置本机 ip 为 192.168.100.1/24 任意 ip 后通过网线连接管理网口,访问 https://192.168.100.254:8006

# PCIE (网卡) 直通

提示

在管理页面的 shell 感觉不是很好用,可以使用 ssh [email protected]

参考:Proxmox VE Administration Guide - 10.9. PCI(e) Passthrough (opens new window)

root@d1581:~# uname -r
6.2.16-3-pve

内核命令行

/etc/default/grub 文件的 GRUB_CMDLINE_LINUX_DEFAULT 变量,将要添加的参数追加在字符串后。

修改后执行 update-grub 刷新,再重启。

# 启用 IOMMU

内核命令行添加:

intel_iommu=on

在文档中提到:

For Intel CPUs, you may also need to enable the IOMMU on the kernel command line (opens new window) for older (pre-5.15) kernels by adding: 对于 Intel CPU,您可能还需要通过添加以下内容在内核命令行上为 ** 旧版(5.15 之前)** 内核启用 IOMMU:

很多教程也会让开启,而我的内核版本在 5.15 之后,那我就不动了。

笔记

即便内核版本是 5.15 之后,也需要开启,不开启报 No IOMMU detected, please activate it.See Documentation for further information. 不可用。

# IOMMU 直通模式

内核命令行添加:硬件支持 IOMMU 直通模式,则启用此模式可能会提高性能

iommu=pt

# 内核模块

编辑 /etc/modules ,添加

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

刷新

update-initramfs -u -k all

# 重启

reboot

# 检查

root@d1581:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[    0.012868] ACPI: DMAR 0x0000000079FBE010 0000C4 (v01 ALASKA A M I    00000001 INTL 20091013)
[    0.012898] ACPI: Reserving DMAR table memory at [mem 0x79fbe010-0x79fbe0d3]
[    0.255406] DMAR: Host address width 46
[    0.255408] DMAR: DRHD base: 0x000000fbffc000 flags: 0x1
[    0.255416] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[    0.255420] DMAR: RMRR base: 0x0000007bbc4000 end: 0x0000007bbd3fff
[    0.255423] DMAR: ATSR flags: 0x0
[    0.255424] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x0
[    0.255428] DMAR-IR: IOAPIC id 8 under DRHD base  0xfbffc000 IOMMU 0
[    0.255430] DMAR-IR: IOAPIC id 9 under DRHD base  0xfbffc000 IOMMU 0
[    0.255432] DMAR-IR: HPET id 0 under DRHD base 0xfbffc000
[    0.255434] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[    0.255435] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[    0.255834] DMAR-IR: Enabled IRQ remapping in xapic mode

笔记

对比了重启前后,打印的都行没什么变化,可能是因为新版默认就是开启直通的原因。

# PVE 硬盘直通

硬盘直通无需像 PCIE 直通那样,开启 IOMMU,不开启就可以实现。

场景:将原来直接跑在硬盘的系统,换到虚拟机环境继续跑。

# 查找要直通的硬盘
ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part

# 直通到虚拟机
qm set <vmid> --scsiX /dev/disk/by-id/xxxxxxx
# qm set 101 --scsi0 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN

参考:佛西博客 - Proxmox VE pve 硬盘直通 (opens new window)

# 安装 OpenWrt

安装参考:PVE - 旁路由 | NipGeihou's blog

除了上文的安装步骤外,还需要在: 硬件 - 添加 - PCI设备 ,按顺序添加两个网卡直通,第一个将默认作为 WAN 口,由于此时这台服务器是不能上网的,因此也就装不了 ethtool ,也就无法通过其判断哪个网卡对应哪个设备 id,那我只能赌一把了。

笔记

在 iStoreOS 中,默认第一个网卡(即桥接网卡)是 wan 口,其他为 lan 口(即两个直通网卡),将网线接入直通网卡调整,eth0 为 lan 口,eth1 为 wan 口

安装完成后,将上级路由接到 WAN 即可上网,建议把 OpenWrt 的 DHCP 关闭,或将 DHCP 的分配范围在 1-100 内,在之后的虚拟机部署中,使用与 VM ID 对应的 ip,如 101 -> 192.168.100.101

提示

如果 PVE 的控制台(noVNC)无法复制粘贴,在硬件添加一个 串行端口 在 PVE 重启即可(虚拟机中 reboot 不生效)。

# 安装代理工具

vernesong/OpenClash: A Clash Client For OpenWrt (opens new window)

# 安装依赖(确保已切换到可靠可用的国内源)
opkg update
#iptables,iStoreOS为了兼容即便是22.03也使用的iptables
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base

#上传IPK文件至您路由器的 /tmp 目录下,可在iStoreOS的WEB-系统-文件传输中上传,在同页面即可点击安装,或使用下方命令行安装

#执行安装命令
opkg install /tmp/luci-app-openclash_0.33.7-beta_all.ipk

#执行卸载命令
#插件在卸载后会自动备份配置文件到 /tmp 目录下,除非路由器重启,在下次安装时将还原您的配置文件
opkg remove luci-app-openclash

安装完成后刷新LUCI页面,在菜单栏 -> 服务 -> OpenClash 进入插件页面

配置

  • 使用 Mata 内核: 全局设置-模式设置 ,勾选 使用 Mata 内核,应用配置。
    • 如果使用了比较新的协议,还需要先更新内核
  • 更新内核: 全局设置-版本更新 ,将 Mata内核 下载到本地,上传到 /etc/openclash/core/clash_meta
    • 备份 mv /etc/openclash/core/clash_meta /etc/openclash/core/clash_meta.bak
    • 参考命令 tar -xf archive.tar.gz
  • 上传配置:将分流配置写到 yaml 文件中,并在 配置文件管理 中上传,应用配置。
    • 建议直接复制 Windows 的 Clash Verge 的运行时配置
  • 启动: 运行状态 ,启动 OPENCLASH
  • 修改管理页面登录密钥: 全局设置-外部控制 ,管理页面登录密钥,应用配置。
  • 切换管理 WEB 版本: 全局设置-外部控制 ,切换(更新) Yacd 版本,切换至 MATE 版本,应用配置。

测试

# 分别在pve、oepnwrt的shell
curl www.google.com

# 安装 WireGurad

安装参考:基于 WireGuard 实现的云组网 | NipGeihou's blog

# 允许通过 WAN 口访问 LAN 设备

参考:Access web interface on WAN - Installing and Using OpenWrt - OpenWrt Forum (opens new window)

image-20230916200818428

我的网络拓扑大概是这样的,为了能够让 电脑 访问到 服务1 ,需如下配置:

路由器 2 允许外部请求进来

image-20230916201319388

添加:

  • 名称: Allow-Admin (随意)
  • 协议:按需选择,允许进来的协议,如 tcp、icmp
  • 源区域:WAN
  • 源地址:不选
  • 源端口:任意
  • 目标区域:任意区域(转发)
  • 目标端口: 22 80 443
  • 操作:接收
  • 保存

将请求转发到路由器 2

这里有两种方式:

  1. 在路由器 1 中设置静态路由,将路由器 2 子网(192.168.2.1/24)转发(网关)到路由器 2 的 WAN 口 ip(如 192.168.1.123)。这种方法需要路由器 1 的管理权限,这样操作路由器 1 下的所有设备都可以访问。
  2. 在 电脑 中将网关设置成路由器 2 的 WAN 口 ip(如 192.168.1.123),这样只有 电脑 可以访问。
    • 或使用: route add 192.168.2.0 mask 255.255.255.0 192.168.1.123 -p

笔记

两种方式,视乎场景选择:

  • 如果在公司没有路由器 1 的权限,也不想让别人访问到你的服务,则可以使用方法 2。
  • 如果是在自己家里,可信任的局域网中,则可以使用方法 1。

# 使用 cloud-init 创建虚拟机

参考:使用 cloud-init 创建虚拟机 | NipGeihou's blog

# 完善 PVE

# 添加 CPU 温度

参考:PVE 篇一:PVE 各项传感器温度 WEB 显示,详细教程_软件应用_什么值得买 (opens new window)

安装查询温度命令

# 安装lm-sensors,一个可以监视CPU和其它的系统温度的工具
apt-get install lm-sensors


# 查看温度
sensors

# 查看温度 json格式
sensors -j

添加到 PVE 变量中

vim usr/share/perl5/PVE/API2/Nodes.pm

# 在vim中搜索并定位到
/$res->{ksm} = {

# 并在其下放添加
$res->{sensinfo} = `sensors -j`;

image-20230914235238210

编辑页面 JS

提示

有别于参考的教程,我觉得没必要显示每一个核心的温度,只需显示其中一个即可。

vim /usr/share/pve-manager/js/pvemanagerlib.js

# 定位到
/Proxmox.Utils.render_cpu_model

# 在其下方添加
    {
        itemId: 'sensinfo',
        colspan: 2,
        printBar: false,
        title: gettext('CPU Temperature'), // WEB显示内容
        textField: 'sensinfo',
        renderer: function (value) {
            value = JSON.parse(value.replaceAll('Â', ''));
            const c0 = value['coretemp-isa-0000']['Package id 0']['temp1_input'].toFixed(1);
            return `${c0}℃`; // 输出格式
        }
    },

image-20230915000533232

重启 WEB 服务

systemctl restart pveproxy

# 添加证书

如果直接通过 ip 访问,总是提示不安全,可使用可靠的域名证书解决,DNS 服务商以 Cloudflare 为例。

添加 DNS API

PVE 首页 - 左侧 数据中心 (而非某一个节点)-ACME - 添加

image-20230916182300114

添加:

  • 插件 ID:随便填,如 Cloudflare

  • DNS API: Cloudflare Managed DNS

  • CF_Account_ID:Find zone and account IDs · Cloudflare Fundamentals docs (opens new window)

  • CF_Email:https://dash.cloudflare.com/profile (opens new window)

  • CF_Key:https://dash.cloudflare.com/profile/api-tokens (opens new window),Global API Key

  • CF_Token:https://dash.cloudflare.com/profile/api-tokens (opens new window),API 令牌,创建证书,编辑区域 DNS,使用模板。

  • CF_Zone_ID:Find zone and account IDs · Cloudflare Fundamentals docs (opens new window)

  • 添加

创建证书

PVE 首页 - 左侧 d1581 (节点)- 凭证 - 添加

  • 质询类型:DNS
  • 插件:上面填的插件 ID, Cloudflare
  • 域名:自己定义

添加账号

  • 用户名:默认,不填
  • 邮件:随便
  • ACME 目录: Let's Encrypt V2
  • 注册

下发证书

  • 立即预定凭证

image-20230916192523511

出现即为成功

访问

通过 DNS 或 hosts 将域名解析到 pve 服务器的 ip 地址,如 https://pve.abc.com:8006 访问。

上次更新: 2024/03/11, 22:37:05
基于DNS区域解析分流国内外CDN
IPMI笔记

← 基于DNS区域解析分流国内外CDN IPMI笔记→

最近更新
01
磁盘管理与文件系统
05-02
02
网络测试 - iperf3
05-02
03
Docker Swarm
04-18
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式