gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:23:50 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

为了测试配置,我从

https://www.vpnbook.com/freevpn

下载此 [文件] (https://www.vpnbook.com/free-openvpn-account/VPNBook.com-OpenVPN-US1.zip)

我在下面创建 Dockerfile对于相同的

FROM ubuntu:16.04
RUN apt update && apt install -y openvpn curl socat wget ca-certificates openssl
WORKDIR /openvpn/config
COPY vpnbook-us1-tcp80.ovpn .
COPY start.sh /start.sh
ENV OPENVPN_USERNAME=vpnbook OPENVPN_PASSWORD=dup2atu
CMD /start.sh

vpnbook-us1-tcp80.ovpn ,我做了一个小改动为 auth-user-pass并做到了 auth-user-pass openvpn-credentials ,所以我们可以从文件中传递凭据。接下来是创建一个 start.sh
#!/bin/sh

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

printf "$OPENVPN_USERNAME\n$OPENVPN_PASSWORD" > openvpn-credentials
chmod 600 openvpn-credentials

socat TCP4-LISTEN:80,reuseaddr,fork TCP4:ipinfo.io:80 2>&1 >/dev/null &
exec openvpn --inactive 3600 --ping 10 --ping-exit 60 --config vpnbook-us1-tcp80.ovpn
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:
vpn:
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.vpnbook.com",
"city": "Manassas",
"region": "Virginia",
"country": "US",
"loc": "38.7701,-77.6321",
"org": "AS30633 Leaseweb USA, Inc.",
"postal": "20109"
}

如您所见 localhost:8080被映射到容器端口 80socat正在转发该端口 80ipinfo.io:80 .转发是通过 VPN 进行的

关于没有特权访问的 Docker VPN IPSec 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com