【问题标题】:VPN Adapter creation fails inside Ubuntu Docker container, except on LCOW?在 Ubuntu Docker 容器内创建 VPN 适配器失败,LCOW 除外?
【发布时间】:2019-03-30 08:34:22
【问题描述】:

基本上,我正在构建一个连接到 VPN 的容器。它恰好使用 AnyConnect,但我认为这并不重要。

我的 dockerfile 看起来像这样。

FROM ubuntu

COPY anyconnect/ /anyconnect/

WORKDIR /anyconnect/vpn
RUN echo y | ./vpn_install.sh

WORKDIR /
COPY start.sh .
RUN chmod 777 start.sh

EXPOSE 1080

ENTRYPOINT [ "/start.sh" ]

启动脚本如下所示。

#!/bin/bash

# Allow tunneling.
mkdir -p /dev/net
mknod /dev/net/tun c 10 200

# Start services.
/opt/cisco/anyconnect/bin/vpnagentd -d > agent-stdout.txt 2> agent-stderr.txt &

# Connect to VPN.
/opt/cisco/anyconnect/bin/vpn connect $1

# Run a daemon here that keeps the container alive.

最后,我像这样启动容器。

docker run -it --rm --cap-add=NET_ADMIN vpn-connector uri.to.vpn.com

VPN 连接语句的输出似乎遇到了“VPN 客户端驱动程序遇到错误。请重新启动您的计算机或设备,然后重试。”的错误。

  >> state: Connecting
  >> notice: Establishing VPN session...
  >> notice: Establishing VPN - Initiating connection...
  >> notice: Establishing VPN - Examining system...
  >> notice: Establishing VPN - Activating VPN adapter...
  >> state: Disconnecting
  >> notice: Disconnect in progress, please wait...
  >> error: The VPN client driver encountered an error.  Please restart your computer or device, then try again.
  >> state: Disconnected

因此,似乎可能存在无法正确创建 AnyConnect 客户端通常创建的 cscotun0 的问题。我已经在 Linux、Mac 和 Windows 上的 Linux 模式上尝试过这个,但它们都失败了,出现了同样的错误。 然而,在一个残酷的转折中,只有当这个容器使用 LCOW(即,Docker for Windows 并选择了 Windows 容器)运行时,连接才会成功。

我什么都试过了。我试过--privileged。我尝试从主机安装/dev/net/tun。我已经在主机等上尝试了 SNAT 规则。没有任何效果。它只适用于LCOW,我不知道为什么这是唯一成功创建接口并且连接成功的场景。

朋友们有什么想法吗?

【问题讨论】:

    标签: docker vpn cisco tunnel docker-for-windows


    【解决方案1】:

    问题似乎在于 docker 会挂载某些文件,例如 /etc/resolv.conf,以使它们与主机系统更改保持同步。

    我找到的解决方法是将--cap-add=SYS_ADMIN 添加到docker run 命令(以允许卸载)。然后,我必须在启动脚本中物理卸载该文件。

    cp /etc/resolv.conf /etc/resolv.conf.bak
    umount /etc/resolv.conf
    cp /etc/resolv.conf.bak /etc/resolv.conf
    

    在那之后,它似乎工作得很好。

    【讨论】:

    • 你,拯救了我的一天!我建议为 lsmod 安装 kmod 依赖项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多