PVE LXC 容器使用server客户端(hclient-cli)进行组网

开摆

发布于8天前
我就是我,不一样的焰火。

故事背景

作为一个技术人员,相信大家或多或少都有自己的服务器,而我也不例外。为了更好地管理和使用服务器,我选择了Proxmox VE(PVE)作为我的虚拟化平台。在PVE中,我使用LXC容器来运行我的本地服务器和相关服务。

原本我是使用着自己的电信宽带免费开通的公网IP来供自己使用,同时也开了MC服务器,让朋友们一起游玩。但是由于搬家后的地方不支持电信宽带,我在去年的时候接触并下单了懒猫微服。尽管懒猫微服的组网功能很吸引我,但是由于去年的系统过于简陋也就退单了。

真正让我下决心的还是运营商公网IP政策收缩问题,在我新房宽带开通的时候属实是恶心到了。移动宽带的公网IP只能办理专线,电信的公网IP也改为了收费政策30/月(2025年6月后施行),尽管最后联通还是申请到了公网IP,但是谁也不能保证之后政策会如何改变。

相比过度阶段使用的FRP内网穿透,懒猫的组网支持双向的通讯,云服务器的备份可以通过添加懒猫的SMB或者webdav地址直接访问。而对比其他开源的组网方案,懒猫提供的客户端工具设置更加简单。

server客户端简介

在最早的设计里面,懒猫微服的组网使用过各种GUI客户端来实现的,包括Windows、Mac、Linux、Android、IOS,而服务端则是使用了hclient-cli - github/hclient-cli - gitee程序。用户需要手动配置CURL命令和参数来实现账户登陆等功能,十分的麻烦。

‼️目前github和gitee提供的release中的hclient-cli现在已经不在更新了。

screen5.png

新版本的网站将hclient-cli定义为了server客户端,当然我觉得这个名字更符合常理。并且最重要的是,server客户端新增加了版本显示和TUI界面,极大的方便了用户使用组网。

screen4.png

旧版本命令:

root@debian:/opt/hclient# ./hclient-cli-linux-amd64 -h
Usage of ./hclient-cli-linux-amd64:
  -api-addr string
        API监听地址,支持 (default "127.0.0.1:7777")
  -cfg string
        配置文件路径 (default "/root/.config/hportal-client")
  -disable-api
        不开启API配置服务器,建议仅在第一次运行时开启配置,然后关闭API server
  -http-addr string
        提供的http服务器地址 (default "127.0.0.1:61090")
  -http-password string
        http代理设置auth密码(为空则随机生成,随机生成的密码位于配置文件夹下的http_proxy_password)
  -http-user string
        http代理设置auth用户名
  -remotetun
        (internal only)
  -tun
        是否开启系统tun模式,开启后系统层面可以直接访问微服资源.

新版本命令:

root@debian:/opt/hclient# ./hclient-cli -h
Usage:
  hclient-cli [--address ADDR]
  hclient-cli help
  hclient-cli [--address ADDR] tui
  hclient-cli [--address ADDR] daemon [--proxy-listen-addr ADDR] [--tun MODE] [--proxy MODE]
  hclient-cli [--address ADDR] stop-daemon
  hclient-cli [--address ADDR] config <show|set> [flags]
  hclient-cli [--address ADDR] login <qr|manual|tfa> [flags]
  hclient-cli [--address ADDR] box <list|delete|enable|disable|set-default> [flags]
  hclient-cli [--address ADDR] init-box --pincode PINCODE --box-name NAME --admin USER [--password PASSWORD|--password-stdin]
  hclient-cli [--address ADDR] check
  hclient-cli [--address ADDR] install
  hclient-cli [--address ADDR] install --mode MODE [--tun MODE] [--exec-path PATH] [--skip-install-binary]
  hclient-cli [--address ADDR] upgrade
  hclient-cli [--address ADDR] uninstall
  hclient-cli [--address ADDR] upload-log [flags]

Commands:
  tui                Run interactive TUI
  daemon             Run daemon in foreground
  stop-daemon        Stop local daemon for current config
  config             Show or update persisted CLI config
  login              Headless login flows
  box                Manage boxes
  init-box           Initialize an unconfigured Lazycat Microserver
  check              Check local environment, mainly TUN prerequisites
  install            Install managed startup; supports fully non-interactive flags
  upgrade            Upgrade managed binary from latest-version.json
  uninstall          Remove managed startup and the installed managed binary
  upload-log         Upload debug logs

Flags:
  -address string
        daemon control address
  -version
        print CLI version

下载运行Server客户端

Server版本可以直接在官网下载,提供了linux/amd64、linux/arm64、linux-riscv64三个版本的二进制文件。

下载对应的版本后增加运行权限,直接运行即可。

# 以linux/amd64版本为例 右键对应的版本选择“复制链接地址”即可得到下载链接
wget https://dl.lazycatmicroserver.com/hclient-cli/v1.1.3/hclient-cli-linux-amd64

# 下载完成后增加运行权限
chmod +x hclient-cli-linux-amd64

# 运行TUI界面 根据提示安装TUN服务 并进行登陆
./hclient-cli-linux-amd64 tui

screen1.png

screen2.png

同时,客服还提供了还提供了一键安装脚本(非官方)。

curl -fsSL https://gitee.com/aixinyin/scripts/raw/master/fix-hclient-cli.sh | sudo bash

screen6.png

不过我建议还是手动安装。

跟踪Server客户端版本以及更多平台支持

在与微服官方老板们沟通之后,我得到了最新版本的地址,顺便看到了其他平台hclient-cli客户端的支持。

最新版本接口请求:

curl https://dl.lazycat.cloud/hclient-cli/latest-version.json

版本信息获取到的数据:

{
  "version": "v1.1.3",
  "artifacts": {
    "darwin-amd64": {
      "name": "hclient-cli-darwin-amd64",
      "sha256": "584b984cb8dd782701226b4faaad58c22113da95707e374f3bc47cfa1759c8d1"
    },
    "darwin-arm64": {
      "name": "hclient-cli-darwin-arm64",
      "sha256": "7137f0a789c4f7d66d6b60f833bf6afa9a1b183f1b6362cdc21e65ae9661fd0b"
    },
    "linux-amd64": {
      "name": "hclient-cli-linux-amd64",
      "sha256": "77bfdc49f3abfffd1b1c1cb8ea1962a80680a3dcdf9c360a8f103d640c34d84e"
    },
    "linux-arm64": {
      "name": "hclient-cli-linux-arm64",
      "sha256": "b0bbb299e1b799bc74811562234e0ae93d97b8ff12f5091b1dc5fbc66c4d8963"
    },
    "linux-riscv64": {
      "name": "hclient-cli-linux-riscv64",
      "sha256": "7f851753b7f0c75a5e194f868d9eb94cf32ec824af4148daf3a76f4ebe6ccdd5"
    },
    "windows-amd64": {
      "name": "hclient-cli-windows-amd64.exe",
      "sha256": "f747d55a31e5ba49442fca1b5dc52fd8d7bb6bfff43ffe3f101345df5a2075cc"
    },
    "windows-arm64": {
      "name": "hclient-cli-windows-arm64.exe",
      "sha256": "8f66053fea96842aeeb6be470312edc85ede814c21af745a6f9373406ea8ede9"
    }
  }
}

这样我们之需要替换对应的版本平台信息就可以拼接出对应的版本平台二进制文件的下载地址:https://dl.lazycatmicroserver.com/hclient-cli/{.version}/{.artifacts.platform.name}

例如:linux/amd64平台的1.13版本的下载地址就是https://dl.lazycatmicroserver.com/hclient-cli/v1.1.3/hclient-cli-linux-amd64

不过可惜的是,官方暂未提供更新日志。

问题出现

我的设备比较多,所以打算每个设备都运行server客户端,这样最大程度利用懒猫微服进行组网互通。

设备用途平台位置 |
轻量应用无忧服务器网站、GIT、密码linux/adm64腾讯云
GMK K8PVE虚拟机linux/amd64住房
PVE - 1Panel游戏服、应用服linux/amd64PVE-LXC环境
群晖 DS 224+照片、文件、备份linux/amd64租房
威联通 QNAP TS-453Dmini深度归档linux/amd64租房

不过,在PVE的LXC服务器中安装时却出现了问题。报错提示:Runtime startup failed,具体信息为:

open /root/.config/hportal-client/
shellapi_addr: no such file or directory

screen3.png

由于之前使用其他组网工具时也是开启TUN模式失败的问题,所以我也是第一时间接受了。

于是,问题又回到了LXC容器如何才能开启TUN模式。

解决方案

在尝试了各种关键词组合查找方案之后,豆包给出了一个可靠的方案。

0. 开启特权容器

由于我本身就是使用的特权容器,所以这一步我就跳过了,但是如果有用户不能接受特权模式运行,可以直接跳转到最后的参考文档中,进行对应的配置测试。

找到对应的虚拟机关机,然后点击选项,将无特权的容器改为

screen8.png

1. 确认TUN设备是否可用

在容器内执行以下命令,确认 TUN 设备是否存在且可用:

# 检查TUN设备是否存在
ls -l /dev/net/tun

# 测试是否能打开TUN设备
cat /dev/net/tun
  • 如果显示 No such file or directory:设备没有被挂载到容器
  • 如果显示 Operation not permitted:有设备但没有访问权限
  • 如果显示 cat: /dev/net/tun: File descriptor in bad state:✅ 设备正常工作

我执行后的结果:

root@debian:/opt/hclient# cat /dev/net/tun
cat: /dev/net/tun: Operation not permitted

我本身开启的是特权模式,所以这里能找到设备。

2. 关闭容器,修改配置

screen7.png

必须先关闭容器再修改配置,否则修改会被覆盖:

# 在PVE宿主机执行
pct stop <容器ID>

编辑 /etc/pve/lxc/<容器ID>.conf 文件,在末尾添加以下 4 行:

# 允许访问TUN/TAP字符设备(主设备号10,次设备号200)
lxc.cgroup2.devices.allow: c 10:200 rwm

# 绑定挂载宿主机的TUN设备到容器
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

# 解除AppArmor限制(PVE 8+必须加,否则即使有设备也会被拦截)
lxc.apparmor.profile: unconfined

# 开启基本系统挂载
lxc.mount.auto: proc:rw sys:rw

这让我想起来最初部署服务器的时候,司波图老师的教程(帮助文档有提到)中提到过的为LXC容器加入渲染器硬件。

3. 启动容器并验证

运行
# 启动容器
pct start <容器ID>

# 进入容器
pct enter <容器ID>

# 再次验证TUN设备
cat /dev/net/tun

实际运行效果:

root@Docker:/opt/app/hclient# cat /dev/net/tun
cat: /dev/net/tun: 文件描述符处于错误状态

这样就可以继续运行./hclient-cli-{your-platform} tui进行安装TUN服务,并进行后续配置了。

验证组网

由于云服务器提供的性能通常有限,而我本地则是8845HS处理器,所以运行轻量大模型的任务就在本地了。之前都是使用frp反向代理道服务器端口,占用一个端口不说,管理也十分麻烦。

现在可以通过懒猫微服在线设备获取,查询到分配的设备专属域名,然后通过http://{domain}:{port}/api/tags来访问到家里的ollama了。

screen9.png

screen10.png

https://appstore.lazycat.cloud/#/shop/detail/in.zhaoj.lazycatonlinedevice

最后说两句

从易用角度,懒猫微服可以说是最易用的个人服务器。但是,当前我更愿意将其定义为年轻人的第一台开发服务器。官方开发文档无疑也是一份技术学习手册,可以开阔思路。同时局域网端口转发工具也为开发者提供了更快的服务发布、测试等功能。

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward

如果后续能融入ActivityPub的理念,我感觉会变得更加有意思。

参考文档

评论

0

暂无评论

说点什么呢~
收藏
1
0
0