SwarmのドッカーサービスからVPN(OpenVPN)に接続する


11

OpenVPNサーバーでいくつかのプライベートIPアドレスを公開していますが、Docker Swarmサービスからそれらのアドレスにアクセスしたいのですが。

理想的には、VPNが不要な環境にイメージが展開されることが予想されるため、コンテナの「内部」にOpenVPNクライアントが存在しないことが望まれます。

今まで試したこと

dperson / openvpn-clientイメージを使用して、コンテナーをVPNに正常に接続しました。

--net=container:my-vpn-clientフラグを使用して、そのコンテナをネットワークとして使用する別のコンテナを正常に起動しました。

今、私は自分のプライベートIPアドレスにアクセスするドッカーサービスを設定しようとしていますが、私が見つけたのは:

  • サービスでopenVPNクライアントを実行できませんcap-add: NET_ADMIN。この問題を議論するDockerには未解決の問題がありますが、それらは未解決のままです。
  • 私は、openVPNクライアントコンテナをswarmクラスタの「横」で実行させることができると考えましたが、network_mode: "container:my-vpn-client"サポートされていないため使用できません。それ自体がサービスでなくても群がります。
  • 接続可能なネットワーク(ブリッジ/オーバーレイ)を作成して、OpenVPNクライアントコンテナをそのネットワークに挿入し、そのネットワークの他のメンバーがそのパイプを通過することを期待しました...がっかりしました。

だからここに私は、どんなアイデアですか?

PSそれが役立つ場合、これは主に、swarm init> stack deploy> run tests> swarm leaveのように、単一のドッカーマシンでサービスをswarmモードで実行する自動テストを設定することです。だからそのための「ハック」がある場合...私興味があるかもしれません;)

回答:


1

私はこれとまったく同じことを行います、あなたのopenvpn dockerクライアントでは、NATを設定する必要があります

iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -o tun0 -j SNAT --to-source 10.8.0.10
iptables -t nat -A POSTROUTING -d 172.18.0.50/32 -o eth1 -j SNAT --to-source 172.18.0.100

私にとっては、ブート時にiptables-restoreを介して実行するように設定しました

Dockerホストで、次を/ etc / network / interfacesに追加します

post-up ip rule add from 172.18.0.0/16 table 200
post-up ip route add 192.168.11.222 via 172.18.0.100 table 200

NBこれはどこで使用するものです

  • 172.18.0.0はドッカーネットワークです
  • 172.18.0.50は、Dockerコンテナの1つです
  • 172.18.0.100はdocker openvpnクライアントです
  • 192.168.11.222は、DockerクライアントがアクセスできるようにするプライベートIPです。
  • tun0は、DockerクライアントのOpenVPNインターフェイスです
  • eth1は、openvpnドッカークライアントの172.18.0.0ネットワークインターフェイスです

優れた応答...賛成。(1)トラフィックが適切な場所にルーティングされるようにすること、(2)Docker環境で実行されているソフトウェアがルートが存在することを認識することを確認することの2つの問題があることに注意してください。ローカルネットワークを扱っているかのようにファイルを使用して、トラフィックをルーティングする方法をOpenVPNに指示する必要がある場合ありccrます。すべてのTCP / IPルーティングと同様に、「現状のままtraceroutetcpdumpまたはWireShark があなたの親友です。」
マイクロビンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.