没有特权访问的 Docker *** IPSec 客户端

Posted

技术标签:

【中文标题】没有特权访问的 Docker *** IPSec 客户端【英文标题】:Docker *** IPSec client without privileged access 【发布时间】:2018-03-10 09:23:06 【问题描述】:

我有一个 mysql 数据库,只有在建立 *** 连接后才能访问(IpSec-shared-secret + 用户名 + 密码)

所以我想运行一个隔离的 docker 容器,它将建立此连接并以某种方式代理/公开 mysql 端口,以便其他容器可以连接到它而不知道是否有 *** 连接

我能找到的所有示例 - 需要对主机/网络的特权访问(我想避免完全隔离容器逻辑)

我想要的只是从一个可以建立 ipsec-*** 访问远程主机的 mysql 端口的容器中公开 mysql 端口

【问题讨论】:

我曾经也遇到过类似的情况,后来因为没有找到太多信息而不得不放弃。如果您确实找到了一些解决方案,请继续发布解决方案 无论情况如何,容器仍然需要 NET_ADMIN 功能 这有什么更新吗? 【参考方案1】:

您可以在没有特权访问的情况下执行此操作,但需要NET_ADMIN 功能,以便容器可以创建和隧道接口。

为了测试配置,我从

选择了一个免费的 *** 服务

https://www.***book.com/free***

正在下载此[文件] (https://www.***book.com/free-open***-account/***Book.com-Open***-US1.zip)

我在Dockerfile下面创建了同样的

FROM ubuntu:16.04
RUN apt update && apt install -y open*** curl socat wget ca-certificates openssl
WORKDIR /open***/config
COPY ***book-us1-tcp80.o*** .
COPY start.sh /start.sh
ENV OPEN***_USERNAME=***book OPEN***_PASSWORD=dup2atu
CMD /start.sh

***book-us1-tcp80.o*** 中,我对auth-user-pass 做了一个小改动,将其改为auth-user-pass open***-credentials,这样我们就可以从文件中传递凭据。接下来是创建一个start.sh

#!/bin/sh

mkdir -p /dev/net && mknod /dev/net/tun c 10 200

printf "$OPEN***_USERNAME\n$OPEN***_PASSWORD" > open***-credentials
chmod 600 open***-credentials

socat TCP4-LISTEN:80,reuseaddr,fork TCP4:ipinfo.io:80 2>&1 >/dev/null &
exec open*** --inactive 3600 --ping 10 --ping-exit 60 --config ***book-us1-tcp80.o***

mknod /dev/net/tun c 10 200 在运行时在容器内创建一个 tun 设备,因此我们不需要从主机映射它。

由于您希望其他容器通过连接到此容器来访问 mysql,因此您将在下面进行更改

socat TCP4-LISTEN:80,reuseaddr,fork TCP4:ipinfo.io:80 2>&1 >/dev/null &

socat TCP4-LISTEN:3306,reuseaddr,fork TCP4:<YourMYSQLIP>:3306 2>&1 >/dev/null &

这样做是监听容器上的本地端口 X 并将该请求转发到您提供的 IP/域上的端口 Y。然后我们可以将这些端口映射到 Host 或直接通过容器访问它们。

为了运行整个事情,我做了一个简单的docker-compose.yml

version: "3"

services:
  ***:
    build: .
    cap_add:
      - NET_ADMIN
    ports:
      - 3306:3006
      - 8080:80
    dns:
      - 8.8.8.8

现在在执行docker-compose up -d 并等待几秒钟后,我在主机上运行以下命令

$ curl -H "Host: ipinfo.io" localhost:8080/json

  "ip": "198.7.62.204",
  "hostname": "us1.***book.com",
  "city": "Manassas",
  "region": "Virginia",
  "country": "US",
  "loc": "38.7701,-77.6321",
  "org": "AS30633 Leaseweb USA, Inc.",
  "postal": "20109"

如您所见,localhost:8080 已映射到容器端口 80,而 socat 正在将该端口 80 转发到 ipinfo.io:80。转发是通过 *** 进行的

【讨论】:

以上是关于没有特权访问的 Docker *** IPSec 客户端的主要内容,如果未能解决你的问题,请参考以下文章

polkit-gnome-authentication-agent-1 无法在没有特权标志的 docker 中启动

10-docker系列-docker文件共享和特权模式

在没有 sudo 的情况下运行特权 podman(并且没有用户名空间)

VS无法访问IIS元数据库 您没有足够的特权访问计算机上的IIS网站

Docker中使用createdump调试coreclr

docker--网络和特权模式