コンテナに付与されたデフォルトの機能セットでは、コンテナがネットワーク設定を変更することはできません。特権モードで実行すると、コンテナにすべての機能が付与されますが、必要に応じて個々の機能を付与するオプションもあります。この場合、必要なものは CAP_NET_ADMIN (完全なリストはこちら: http://man7.org/linux/man-pages/man7/capabilities.7.html--cap-add NET_ADMIN
) と呼ばれるため、docker run コマンドに追加できます。
両方のコンテナーを開始するときは、必ずそのオプションを使用してください。どちらも、透過的なパケットのインターセプトを有効にするためにネットワークを調整する必要があるためです。
mitmproxy
「proxy」コンテナーで、透過モードの指示に従って iptables プレルーティング NAT ルールを構成し、mitmproxy
(-T
透過モードを有効にするフラグを使用して) 開始します。ネットワーク設定の変更はコンテナーの実行時にのみ発生し、Dockerfile で指定したり、永続化したりすることはできないため、このプロキシ イメージのエントリ ポイントとして小さな開始スクリプトを使用します。
「クライアント」コンテナーでは、ip route
コマンドを使用して、デフォルト ゲートウェイを Docker ブリッジのプロキシ コンテナーの IP アドレスに変更するだけです。これが定期的に繰り返されるセットアップである場合は、コンテナーの起動時に自動的にセットアップされるクライアント イメージでエントリ ポイント スクリプトを使用することを検討してください。コンテナーのリンクを使用すると、プロキシ コンテナーを開始して、クライアント コンテナーの開始時にリンクすることができます。次に、クライアント エントリ ポイント スクリプトは、環境変数を介してプロキシ コンテナの IP にアクセスできます。
ところで、非透過モードで mitmproxy を使用して問題を解決できる場合 (HTTP プロキシを使用するようにクライアントを明示的に構成する場合) は、強くお勧めします。設定するのに頭を悩ませることはほとんどありません。
頑張ってください、楽しんでください!