Dockerコンテナにトラフィックを転送する

Dockerコンテナにトラフィックを転送する

ホストA(88.12.0.1)とホストB(193.11.8.1)がSSHを介してのみ接続される次のシステムシナリオがあります。ホストB(+172.17.0.2)には、IP 172.17.0.3で実行されるDockerコンテナがあります。

これで、ホストB(ポート22222)のアプリケーションとコンテナ(ポート22223)のアプリケーションと通信する必要があるホストAのアプリケーションがあります。

ホストA(ポート8081)の他のアプリケーションがサーバーとして実行されており、Dockerコンテナー・アプリケーションがこのアプリケーションに接続する必要があります。

これまで、ホストAで次のルールを設定して、ホストAからBにのみトラフィックを正常に転送しました。

ssh -NL 22222:193.11.8.1:22222 [email protected] -v
ssh -NL 22223:193.11.8.1:22223 [email protected] -v

ホストAとホストBの間のポートとしてはSSHのみを使用できます。

上記の第1の規則は、ホストAのアプリケーションがホストBのアプリケーションに接続される最初のケースを扱うので、そのまま動作する。 2番目のルールは、ドッカーコンテナへのトラフィックをホストAからホストBに転送することですが、そこからドッカーコンテナに転送する必要があります。

ホストBのマッピングは、宛先ポート22223に入るトラフィックをDockerコンテナ(172.17.03:22223)に転送する必要があることです。 Dockerコンテナが8081にトラフィックを送信するとき、トラフィックはコンテナを実行しているホストB、ホストAとBをホストAで実行されているサーバーアプリケーション、およびポート8081に接続するSSHトンネルを介してポート8081のホストAに転送する必要があります。

ベストアンサー1

私は何をしたいのかよく理解していませんが、質問の編集内容をiptablesルールに変換しています。

しかし、まずコンテナを実行するときにポートをマッピングしてみてはいかがでしょうか。

 docker run -d -p 22223:22223 yourimage

これは、ポートのホストIP上のすべてのパケットを22223コンテナに転送するための優れた作業を行います。

使用iptables対象B host:

iptables -t nat -A PREROUTING -p tcp -d 193.11.8.1 --dport 22223 -j DNAT --to 172.17.0.3:22223

193.11.8.1:22223上記のコマンドはパケットの宛先を変更します172.17.0.3:22223

iptables -t nat -A PREROUTING -p tcp -s 172.17.0.3 --dport 8081 -j DNAT --to 88.12.0.1

上記のコマンドはパケットの宛先を変更し、172.17.0.3宛先ポート8081は次のとおりです。88.12.0.1:8081

おすすめ記事