背景

在 Proxmox VE(PVE)中创建 CentOS Stream 9 LXC 容器后,安装 Tailscale 时,默认会使用 TUN 模式创建 tailscale0 网卡。

由于普通 LXC 容器默认没有挂载 /dev/net/tun,启动 tailscaled 时会出现类似如下错误:

CreateTUN("tailscale0") failed
/dev/net/tun does not exist

如果只是希望容器能够加入 Tailnet,用于 SSH、Web 管理等日常使用,无需启用 TUN,可以直接使用 Tailscale 提供的 Userspace Networking 模式。


安装 Tailscale

执行官方安装脚本:

curl -fsSL https://tailscale.com/install.sh | sh

安装完成后,先不要启动 tailscaled 服务。


修改 systemd 配置

不建议直接修改:

/usr/lib/systemd/system/tailscaled.service

因为软件升级后,该文件可能会被覆盖。

推荐使用 systemd Override 配置:

systemctl edit tailscaled

输入以下内容:

[Service]
ExecStart=
ExecStart=/usr/sbin/tailscaled \
    --state=/var/lib/tailscale/tailscaled.state \
    --socket=/run/tailscale/tailscaled.sock \
    --port=41641 \
    --tun=userspace-networking

其中:

  • ExecStart=(空值)用于清空原有启动命令;
  • 第二个 ExecStart= 重新定义启动参数,并增加 --tun=userspace-networking

注意:

Override 文件必须包含 [Service] 段,并且必须先使用空的 ExecStart= 清除原有配置,否则 systemd 会提示存在多个 ExecStart 配置。

保存退出。


重新加载配置

执行:

systemctl daemon-reload
systemctl restart tailscaled
systemctl enable tailscaled

登录 Tailscale

执行:

tailscale up

首次运行会输出一个登录地址,例如:

To authenticate, visit:

https://login.tailscale.com/...

浏览器打开该链接,登录 Tailscale 账号并完成授权。


验证状态

查看节点状态:

tailscale status

查看 Tailscale 分配的 IP:

tailscale ip

查看服务状态:

systemctl status tailscaled

查看最终生效的 systemd 配置:

systemctl cat tailscaled

查看最终生效的启动参数:

systemctl show tailscaled -p ExecStart

注意事项

1. ip a 看不到 tailscale0 网卡

Userspace Networking 模式不会创建虚拟网卡,因此执行:

ip a

只能看到类似:

lo
eth0

这是正常现象。

需要通过以下命令查看 Tailscale IP:

tailscale ip

2. TPM 报错可以忽略

启动时可能看到:

TPM: error opening: stat /dev/tpmrm0: no such file or directory

这是因为 LXC 容器没有 TPM 设备,Tailscale 会自动退回到文件存储密钥,不影响正常使用。


3. 高级功能需要 TUN

Userspace Networking 模式适用于:

  • SSH
  • Web 服务
  • 开发环境
  • 日常远程访问

如果需要以下功能:

  • Subnet Router(子网路由)
  • Exit Node(出口节点)
  • 创建 tailscale0 网卡
  • 内核态 WireGuard

则需要在 PVE 为 LXC 挂载 /dev/net/tun,并使用默认的 TUN 模式启动 tailscaled


总结

对于运行在 PVE 上的 LXC 容器,如果只是希望快速加入 Tailnet,Userspace Networking 是最简单且兼容性最好的方案。

整个过程无需修改 LXC 权限,也无需挂载 /dev/net/tun,仅需通过 systemd Override 增加 --tun=userspace-networking 参数即可正常运行 Tailscale,非常适合日常开发和运维场景。