ホスト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