在Proxmox/LXC容器中配置Debian 9 OpenVPN的实用技巧

本文详细介绍了在Proxmox的LXC容器中配置OpenVPN时遇到的常见问题及解决方案,包括如何为无特权容器添加TUN设备、配置自动启动以及解决systemd启动问题,适用于需要在容器环境中部署VPN的用户。

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

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

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

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

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

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

使用以下命令停止容器:

1
pct stop <containerid>

将以下行添加到/etc/pve/lxc/<containerid>.conf

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

使用以下命令启动容器:

1
pct start <containerid>

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

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

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

您需要将OpenVPN文件放入/etc/openvpn/中,并使用.conf扩展名。如果您添加了新文件,需要运行

1
systemctl daemon-reload

然后再执行service openvpn restart。现有配置文件的更改不需要systemd重新加载。

让systemd在无特权容器中启动openvpn

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

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

要解决此问题,请编辑

1
/lib/systemd/system/openvpn@.service

并在

1
LimitNPROC=10

前面添加一个#。现在使用

1
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 设计