简介
最近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已经正确开启。