📦PVE环境下LXC容器安装与配置Tailscale

2024-11-25|2025-1-6
Yawatasensei
Yawatasensei
type
status
date
slug
summary
tags
category
icon
password
😀
最近将AdGuard Home、Tailscale、DDNS-GO等服务从原有的旁路网关服务器上分离,全部装在了PVE的LXC容器中(Alpine系统),减少旁路网关中Dae对其他服务的影响,让复杂的网络结构变得更清晰易于控制一些。LXC容器的资源占用出乎意料的低,在分配1vCPU的情况下,占用不到1%,以上服务全部安装配置完毕后,内存占用在120MB左右。

📝 主旨内容

配置LXC容器

由于LXC容器毕竟只是PVE母机下的一个容器,并不具有完整的系统配置,如果通过正常方式安装Tailscale,会发现无法通过tun启用tailscale的虚拟网卡,例如报错:/dev/net/tun not found ,所以需要先在PVE母鸡进行配置:
通过SSH或者网页端PVE节点的Shell,进行LXC容器配置,例如我的LXC容器ID为101,那么对应配置文件就位于:/etc/pve/lxc/101.conf ,在其中添加如下内容:
 
  1. lxc.cgroup2.devices.allow: c 10:200 rwm
      • 允许设备访问:这行配置允许容器访问特定的字符设备。
      • c 10:200:表示字符设备,主设备号为10,次设备号为200,/dev/net/tun,用于 TUN/TAP网络设备。
      • rwm:表示读、写和创建(mknod)的权限。
  1. lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
      • 挂载设备:这行配置将主机的/dev/net/tun设备挂载到容器的同一位置。
      • none bind:表示进行绑定挂载,即将主机的设备节点直接映射到容器中。
      • create=file:如果目标位置不存在,则创建一个文件节点。
  1. 保存后,重启LXC容器。

安装TailScale

由于我使用的是Alpine系统,所以默认没有SSH服务,需要通过LXC容器的控制台,进行TailScale安装。
安装完成后,进行TailScale账户的绑定

配置TailScale自启动

配置IPv4及IPv6转发

因为我需要tailscale作为我内网穿透回家的路由点,所以需要配置IPv4及IPv6的转发。
如果系统使用的是sysctl.d目录的方式,那么进行如下配置:
目前我的环境(LXC容器,Alpine系统)就是这个方式,如果在sysctl.conf中进行IPv4和IPv6转发配置,会被空文件覆盖,并不会生效。

配置Tailscale广播子网路由

替换其中的192.0.2.0/23为你的局域网IP地址范围(根据热心网友的提示,修改/24/23)。然后在Tailscale的管理页面勾选节点的subnet allow请求即可。如果tailscale之前已经启动,那么需要先关闭后再使用上述命令启动。

UDP GRO错误解决

由于在使用alpine系统,所以可能会在运行tailscale up命令后出现以下报错:
解决办法为安装ethtool,并通过ethtool配置UDP GRO Forwarding开启,以及UDP GRO List关闭:
其中eth0wan口名称。
 

持久化处理

在完成上述的配置之后,重启LXC容器时,以上的配置会被PVE母鸡初始化,所以我们需要将上述的配置进行固化。
LXC容器ethtool命令固化
/etc/network/interfaces中,eth0 auto 行下方增加命令:
 
命令详解:
  • pre-up:这是一个指令,表示在网络接口启动之前要执行的命令。在这种情况下,ethtool 命令会在接口 eth0 激活之前执行。
  • ethtool:这是一个用于查询和控制网络驱动和硬件设置的命令行工具。
  • K eth0:这部分指定要对网络接口 eth0 应用设置。
  • rx-udp-gro-forwarding on
    • rx-udp-gro-forwarding 是一个选项,用于启用或禁用 UDP 通用接收卸载(GRO)转发。
    • 设置为 on 启用该功能,这可以通过允许网络栈在处理前将多个 UDP 数据包合并为更大的一个来提高 UDP 流量的性能,减少 CPU 开销。
  • rx-gro-list off
    • rx-gro-list 是一个与 GRO 列表处理相关的选项。
    • 设置为 off 禁用此功能,这可能是根据特定网络硬件或驱动程序的能力来确保最佳性能或兼容性所必需的。
 
PVE Debian母鸡增加持久化
/etc/network下新增文件.pve-ignore.interfaces ,文件内容为LXC容器内网卡的名称,例如根据本文来看,就是eth0 ,如果你不清除你的网卡名称是什么,也可以在LXC容器中执行以下命令来获取名称:

📎 参考文章

💡
有关Tailscale安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
Dae安装及配置指南Dae搭配AdGuard Home使用指南
Loading...