1

ブリッジを使用して接続された 2 つの Docker コンテナー (たとえば、A (172.17.0.2) と B (172.17.0.3)) をセットアップしています。ホスト コンテナからコンテナ A、次にコンテナ B、そしてインターネットにすべてのリクエストをルーティングしたいと考えています。応答は逆のパスに従う必要があります。

これまでのところ、ホストと 1 つのコンテナー (たとえば A) を使用してこれを行うことができました。コンテナー A で透過モードで実行する mitmproxy をセットアップしました。ポート 8080 で mitmproxy の実行を開始しました (ホスト バインディングを使用するため、A のポート 8080 はホストのポート 8081 にバインドされます)。ホスト上のすべての接続を A 経由でルーティングし、ホストに戻すことができます。ポート 80 と 443 のすべての接続を Docker コンテナーのポート 8080 に転送しています。

これらのルールは、1 つの Docker コンテナーを使用して非 root ユーザーとしてルーティングを実行します。

iptables -I OUTPUT -t nat -p tcp --dport 80 -m owner ! --uid-owner 0 -j DNAT --to 127.0.0.1:8080
iptables -I OUTPUT -t nat -p tcp --dport 443 -m owner ! --uid-owner 0 -j DNAT --to 127.0.0.1:8080

ポート 8500 のコンテナー B で透過モードで mitmproxy を実行することにより、コンテナー A で同様のルールを試しました。これは正しいアプローチだと思います。

ポート 80/443 のすべてのホスト トラフィックをコンテナ A のポート 8080 にルーティングする ポート 8080 のすべてのコンテナ A トラフィック (ここではすべてのトラフィックがこのポートにある必要があります) をコンテナ B のポート 8500 にルーティングします コンテナ B はインターネットに実際の要求を行い、応答を A に送り返し、A はそれをホストに送り返します。

コンテナ A で以下のようなルールを設定すると、コンテナ B で行われる GET リクエストの無限ループが表示されます

iptables -I OUTPUT -t nat -p tcp --dport 8080 -m owner ! --uid-owner 0 -j DNAT --to 172.17.0.3:8500

ホスト マシン上の docker によって設定された既存の iptables ルールと関係があると思いますが、それを機能させる方法がわかりません。

助けてくれてありがとう!

4

0 に答える 0