【问题标题】:Create OpenVPN connection from docker container从 docker 容器创建 OpenVPN 连接
【发布时间】:2019-12-28 02:21:14
【问题描述】:

我有一个简单的 docker 文件

FROM ubuntu:14.04

USER root

RUN apt-get update && sudo apt-get -y install openvpn

COPY . /tmp

在哪里。包含有关 vpn 连接的所有必要信息(ovpn 文件、ca 文件、用户证书和密钥)。

通过docker run -it --device=/dev/net/tun构建并运行容器,然后切换到/tmp目录并执行sudo openvpn config.ovpn我得到以下错误:

Fri Aug 23 06:15:21 2019 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)

[编辑] 通过 OpenVPN GUI 启动 .ovpn 配置工作正常。

有什么建议吗?

谢谢。

【问题讨论】:

  • 除了--device=/dev/net/tun之外,试试--cap-add=net_admin
  • 请更新问题并将格式化的输出放在那里 - 很难在一行中看到它:)
  • 这似乎与连接配置本身有关,而不是与 Docker... 除非您的 Docker 网络使用与您的 VPN 尝试相同的网络。
  • 不,对不起,没有立即的想法。很高兴看到您的客户端配置(没有敏感参数)和(如果可访问)服务器配置以进行进一步的故障排除。并且只是为了检查 - 确保在连接尝试之前您的容器中没有类似的路线。
  • 关于 GUI 客户端:我不确定它是否与 CLI 相同。最近we've faced an issueNetworkManager 覆盖了 OVPN 配置并自行处理路由设置,因此连接配置文件在 NM 中运行良好,但不适用于 OVPN CLI。也许 OVPN GUI 和 CLI 以类似的方式存在一些差异(当然这不太可能)。

标签: docker vpn openvpn


【解决方案1】:

问题是sudo 在您的情况下不会改变任何东西。这不是“权限被拒绝”类问题的最终解决方案。当您的容器已经代表 root 运行时,这尤其不起作用。

Linux 中的特权操作由 capabilities 管理,这些功能表示特定特权操作的权限。为了使该模型与经典 UNIX 模型兼容,默认情况下代表 root 运行的进程具有所有功能。例如,sudo 之类的东西会将您的 UID 升级为 0授予您一整套功能。

然而,在容器中情况并非如此——容器中进程可用的能力数量(甚至是root-owned)受到所谓的边界集的限制,即在 Docker 中运行时,默认包含非常有限的功能:

$ docker run -it ubuntu:14.04
root@fe50edf72783:/# capsh --print

Current: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,
cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,
cap_mknod,cap_audit_write,cap_setfcap+eip

Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,
cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,
cap_mknod,cap_audit_write,cap_setfcap

网络管理(接口配置等)需要CAP_NET_ADMIN 功能。如您所见,它不在 Docker 容器的默认边界集中,因此您需要使用 --cap-add=net_admin 显式添加它:

docker run -it --device=/dev/net/tun --cap-add=net_admin

在此之后,您将在容器中拥有此功能。考虑到您代表root 运行它,拥有此功能会使使用sudo 无用(它不会授予您比现在更多的功能),因此您可以放弃它并简单地使用openvpn config.ovpn 运行OpenVPN。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多