在Proxmox/LXC容器中设置OpenVPN的实用技巧与解决方案

本文详细介绍了在Proxmox虚拟化环境的Debian 9 LXC容器中配置OpenVPN时遇到的常见问题及解决方案,包括TUN设备配置、系统服务启动和配置文件自动加载等关键技术要点。

在Proxmox/LXC容器中设置OpenVPN的实用技巧与解决方案

当我尝试将OpenVPN设置迁移到新Proxmox服务器的容器中时,遇到了多个问题,通过互联网搜索找到的解决方案要么无效,要么已经过时。因此,我决定将所需的一切内容整合到一篇博客文章中,介绍如何在Proxmox/LXC容器内的Debian 9上设置OpenVPN。

将TUN设备添加到非特权容器

由于您确实应该在非特权模式下运行容器,因此典型的添加/允许解决方案:

1
lxc.cgroup.devices.allow: c 10:200 rwm

将无法工作。在特权模式下运行容器是一个非常糟糕的主意,但幸运的是,有一个原生的LXC解决方案。

使用以下命令停止容器:

1
pct stop <容器ID>

将以下行添加到/etc/pve/lxc/<容器ID>.conf

1
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file

使用以下命令启动容器:

1
pct start <容器ID>

现在OpenVPN将能够创建tun设备。只需使用以下命令进行测试运行:

1
openvpn --config /etc/openvpn/blabla.conf

将OpenVPN配置文件添加到“自动启动”

您需要将OpenVPN文件放入/etc/openvpn/目录中,并使用.conf扩展名。如果您添加了新文件,需要在执行service openvpn restart之前运行:

1
systemctl daemon-reload

现有配置文件的更改不需要重新加载systemd。

在非特权容器中让systemd启动OpenVPN

现在OpenVPN可以手动工作,但无法通过“init”脚本启动。您会在日志文件中看到以下错误消息:

1
daemon() failed or unsupported: Resource temporarily unavailable (errno=11)

要解决此问题,请编辑/lib/systemd/system/openvpn@.service并在LimitNPROC=10前添加#注释符号。

现在使用systemctl daemon-reload重新加载systemd,它应该可以工作。

希望这些信息/技巧能帮助您比我更快地解决问题。如果您知道在LXC/Proxmox中的Debian 9容器中运行OpenVPN的其他技巧/解决方案,请写下评论!谢谢!

评论

Bill McGonigle — 2018年9月13日 感谢提供此信息。在Proxmox 5.2中,我需要使用create=dir。我不确定区别是什么,但使用create=file时pct甚至无法启动容器。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计