PROXMOX中的LXC容器上启用TUN端口,解决ZeroTier和OpenVPN等需要tun-br的问题

简介

最近ODC做优化和迁移,因此增加了1台同步服务器。但是在部署ZeroTier内网互通穿透时,遇到了LXC小鸡,没有开启tun-br的问题,导致穿透失败,这一台同步服务器无法与其他同步服务器互通。

通过排查,发现是缺少tun port,因此参阅官方文档,找到了方法,为PROXMOX中的LXC容器上启用TUN-BR端口。

问题发生复现

1、怎么安装ZeroTier,一键搞定

curl -s https://install.zerotier.com | sudo bash
zerotier-cli join [你的ZeroTier网络的ID]

2、安装ZeroTier后,设备显示在线,但是内网不通

状态 200 ,my.zerotier.com 管理中心显示 设备在线Online,但是就是内网不通。

ip addr
zerotier-cli status
zerotier-cli listnetworks
zerotier-one -d
zerotier-cli info

3、查看网卡和ZeroTier配置

如上图,首先看到ip addr,无zerotier接口,确认是缺少tun-br接口;其次zerotier-one -d显示cannot bind interface(接口绑定失败),那我们就更加确定,是因为没有开启TUN的缘故。

解决方案(lxc开启tun-br

1、修改PVE宿主机中对应LXC容器的配置文件

对于PVE来说,要启用TUN接口,我们需要向LXC配置文件中添加一些配置信息

LXC配置文件位置(xxx为容器的id,如100等):

临时生效(由永久地址在LXC容器开机时,映射过去,关机后失效)
/var/lib/lxc/xxxx/config
永久生效(建议修改此处,毕竟我们是需要长期开启tun-br
/etc/pve/lxc/xxxx.conf

2、为LXC容器配置文件底部新增如下行:

【建议】创建有特权的容器,来开启tun-br,否则可能由于权限问题,面临报错等,太折腾了。

vi /etc/pve/lxc/2001.conf

lxc.cgroup.devices.allow = c 10:200 rwm
lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"

注:pve7需将cgroup改为cgroup2。

最终完整的lxc配置如下(略有不同):

root@cxt-test:~# cat /etc/pve/lxc/2001.conf 
arch: amd64
cores: 2
hostname: ODC-SyncServer-CNGD1
memory: 2048
net0: name=eth0,bridge=vmbr0,hwaddr=BE:16:E2:EE:CE:51,ip=dhcp,type=veth
onboot: 1
ostype: ubuntu
rootfs: local-zfs:subvol-2001-disk-0,size=200G
swap: 2048
lxc.cgroup.devices.allow: c 10:200 rwm
lxc.hook.autodev: sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
root@cxt-test:~#

3、开机进入容器,执行以下命令,并重启容器

cd /dev
mkdir net
mknod net/tun c 10 200
chmod 0666 net/tun

如果有小报错,不影响结果,执行完重启即可。(需要为有特权root的容器)

重启容器后,tun-br已经开启,可以安装和正常使用需要tun接口的软件了。

恭喜您,TUN-BR接口已开启,软件运行正常

我们可以看到,ip addr 已经出现了zerotier的网卡接口,在本地以通过ssh连接内网地址,连接成功,说明lxc容器的tun已经正确开启。

PROXMOX中的LXC容器上启用TUN端口,解决ZeroTier和OpenVPN等需要tun-br的问题

Leave a Comment