【问题标题】:How can I connect to a VPN in docker not using VPN images?如何在不使用 VPN 映像的情况下连接到 docker 中的 VPN?
【发布时间】:2020-11-25 10:49:07
【问题描述】:

早上好!

我正在使用 check point mobile 连接到我的客户端 VPN,并且我在 docker 中有 2 个容器:mysql 和 karaf 都共享我使用命令 docker network create --subnet=vpnAddress mynet 创建的网络

我在运行容器时使用了命令--network=mynet

直到这里一切正常,我可以通过 putty ssh 连接到 karaf,安装 kar 并且所有包都正常。

但是当调用服务时,我意识到容器没有连接到 VPN,即使我用 VPN 地址创建了一个网络。我需要连接到 VPN 才能调用服务。

我使用 check point mobile 从外部(docker 外部)连接到 VPN,但我需要 docker 来添加/连接到 VPN。

我使用的是 Windows 10(使用带有 linux 容器的 docker),我尝试转到 C:\ProgramData\DockerDesktop\tmp-d4w 并编辑文件 host.docker.internal 并将 IP 更改为我的 VPN 地址,但没有任何效果。

我搜索了很多,看到有人在谈论 docker vpn 镜像,例如 nordVpn 或 openVpn,但我无法使用。

我被告知我需要将 vpn 网络添加到 docker,但我在网络上是绿色的,我不知道该怎么做,而且我所做的没有用。

希望你能帮助我。谢谢!

编辑:在 docker 引擎中,我添加了 "bip": "vpnAddress/24" 我现在意识到网桥现在使用VPN地址,尝试在karaf和mysql容器中--network=bridge,但现在karaf无法连接到mysql,但如果我使用默认docker create network mynet并使用该网络运行2容器可以,但是用这种方式使用 VPN 就不行了。

【问题讨论】:

  • 你应该在运行带有-p标志的容器时声明VPN端口。
  • @anlgrses 我刚试过。做了一个 netstat -a 并从 vpn 连接中看到了 ipv4 地址,我向 karaf 容器添加了 2 个端口,一个说“正在侦听”,一个说“已建立”。即便如此,也没有运气:(
  • 使用 VPN 容器真的不行吗?使用一个 VPN 容器并与您需要的容器共享网络非常简单和安全(否则您需要为您的容器设置 NET_ADMIN 功能)。您可能已在 Windows 上的 VPN 中连接,但 Docker 可能在 Hyper-V 上的 VM 中运行,因此它不会从您的 Windows 设置继承默认网关
  • @GustavoKawamoto 我想,但我没有证书,并被告知我可以不用它。

标签: docker containers vpn


【解决方案1】:

处理这些事情的最佳方法是使用 Linux 容器并安装 VPN 并执行任何您想要的工作,然后将 Linux 容器推送到 docker hub 以共享工作。 不要忘记添加有关如何从 Linux 容器中检索工作(保存工作的位置)的文档。

【讨论】:

    【解决方案2】:

    我没有在 Windows 上使用过 Docker,但快速浏览一些 VPN 容器表明,至少在 *nix 中,它们使用--device /dev/net/tun --cap-add=NET_ADMIN 将 VPN“设备”暴露给容器。然后其他容器使用 docker 网络或链接来连接到此 VPN 容器 - 因此查看 VPN 容器的工作方式可能会有所帮助。

    Mac 的一个建议似乎是 using extra_hosts,如下所示:

    extra_hosts:
      - "vpn.company.com:172.21.1.1"
    

    你也许可以用类似的东西破解它。 (或在容器中将172.21.1.1 vpn.company.com 物理添加到/etc/hosts)。此外,检查 Docker 守护进程和您的主机之间的 IP address conflicts

    Windows docs 似乎暗示他们不支持将网络接口作为“设备”,因此您可能需要创建一个非常具体的 docker 网络或修改主机网络设置,首先让 Docker 守护进程识别 VPN 网络。

    有关示例,请参阅Configure Advanced Networking 部分。我会先尝试创建一个与 VPN 设备关联的网络,然后查看 --subnet--gateway 等标志。

    docker network create -d transparent \
        -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
    

    这将创建一个具有特定子网和网关的网络,然后在该网络上运行一个具有静态分配 IP 的容器。

    C:\> docker network create -d transparent \
        --subnet=10.123.174.0/23 \
        --gateway=10.123.174.1 MyTransparentNet
    
    C:\> docker run -it --network=MyTransparentNet \
        --ip=10.123.174.105 windowsservercore cmd
    

    祝你好运!

    【讨论】:

    • 感谢您的回答!我真的很欣赏它!我现在就试试你告诉我的。
    • 我尝试了这两个选项你玩我。 1-在 de 容器内的 etc/hosts 中添加 ip。它没有用。 2-创建网络,但它显示消息:“来自守护程序的错误响应:找不到插件“透明”。”我做了一些搜索,我发现透明仅用于 Windows 容器,但不确定该信息。或者,也许我对自己的解释很糟糕,而您认为我使用的是 Windows 容器,如果是这样,对此感到抱歉。我在 Windows 10 上使用 docker,但我使用的是 docker linux 容器。有什么办法吗?或类似的命令?谢谢!
    • 我终于能够做到了 :) 基本上就像你说的那样,我创建了一个与 VPN 相关联的网络,并使用 --network 命令为容器提供了要使用的网络。我在容器中对 VPN 进行了 ping 操作,一切正常。我也遇到的问题是,使用 VPN 我需要传递另一个 IP,这样我才能调用服务。添加 etc/hosts 没有这样做,因为重新启动 karaf 时,ip 会从那里删除。所以在搜索了更多之后,我意识到我必须在运行容器时添加:--add-host=example:ip。之后按预期工作!谢谢!
    猜你喜欢
    • 2022-01-24
    • 2022-12-04
    • 2012-11-13
    • 2010-10-28
    • 2019-06-17
    • 2021-12-08
    • 2012-02-02
    • 2015-11-17
    • 2017-05-19
    相关资源
    最近更新 更多