在 Proxmox VE (PVE) 环境下配置了高可用(HA)后,虚拟机(KVM)可以在不同节点间自动迁移。要实现域名稳定指向该虚拟机,核心逻辑是解耦“物理节点 IP”与“服务 IP”。

以下是几种主流且推荐的域名解析设置方案:


方案一:静态内网 IP + 路由器/DNS 映射(最基础)

在 PVE HA 集群中,虚拟机无论迁移到哪个节点,其虚拟网卡的 MAC 地址是不变的。

  1. 设置静态 IP:在虚拟机内部(Guest OS)或通过路由器的 DHCP 静态绑定,给该 KVM 分配一个固定 IP(例如 192.168.1.100)。
  2. 内网解析:在你的内网 DNS 服务器(如 AdGuard Home, Pi-hole 或路由器自带 DNS)中,将域名(如 ha.example.com)直接指向该 192.168.1.100。
  3. 优点:简单直接,不依赖外部配置。
  4. 缺点:仅限内网访问。

方案二:Cloudflare Tunnel / 穿透工具(最推荐,无感迁移)

这是目前处理 PVE HA 最优雅的方案,因为它完全屏蔽了底层 IP 和端口转发。

  1. 原理:在 KVM 虚拟机内安装 Cloudflare 守护进程(Connector)。
  2. 解析:域名解析由 Cloudflare 托管,数据流是“虚拟机 -> Cloudflare 云端”。
  3. HA 优势:当虚拟机从节点 A 漂移到节点 B 时,只要虚拟机重启/恢复网络,隧道会自动重新建立。你不需要修改任何 DNS 记录,外部访问无感切换。
  4. 适用场景:需要公网访问,且不想折腾路由器端口映射。

方案三:反向代理(Nginx Proxy Manager / Traefik)

如果你有多个服务,通常会建立一个专门的反向代理网关。

  1. 部署:单独建立一个反向代理 VM(也可以做 HA)。
  2. 配置:域名指向反向代理服务器的 IP。反向代理内部配置 proxy_pass 指向 Home Assistant 虚拟机的静态 IP。
  3. 优势:统一管理 SSL 证书(Let's Encrypt),一个 443 端口分发给多个虚拟机。

方案四:虚拟 IP (Keepalived / VIP) —— 进阶方案

如果你希望域名指向的是一个“集群地址”而非单个虚拟机 IP:

  1. VIP 配置:如果你的服务是集群化的,可以使用 Keepalived 在两台虚拟机之间维护一个虚拟 IP(VIP)。
  2. 解析:域名直接指向这个 VIP。
  3. 注意:对于单一实体的 KVM(如 Home Assistant),此方案略显复杂,通常配合负载均衡使用。

⚠️ 注意事项与建议

  • 网桥一致性:确保 PVE 所有节点上的虚拟网桥名称(如 vmbr0)一致,且所在的 VLAN 或网段相同,否则虚拟机迁移后会掉网,导致 DNS 解析虽然正确但无法连接。
  • 外部访问的安全提示:如果是 Home Assistant 等敏感服务,强烈建议配合方案二(Cloudflare Tunnel)或 方案三(带 SSL 的反向代理),不要直接将虚拟机的 8123 端口通过路由器 DMZ 暴露到公网。

总结建议

  • 如果是为了省心、安全、公网访问:直接用 Cloudflare Tunnel。
  • 如果是纯内网使用:在路由器里做 DHCP 静态绑定 + 内网 DNS 解析。
  • 如果你已经有多个 KVM 服务:搭建一个 Nginx Proxy Manager 作为流量入口。