上記は、目的のネットワークのレイアウトです。私はそれを正しくするのに苦労しています。 ルーターからの内部リンクはこの問題には関係ありません。
要件:
これまでに達成したこと:
問題:
私は3つのネットワークが必要だと信じています:
私はPortainerを介してすべてを構成しており、DockerホストはFirewalldを使用しています。提案を事前に感謝します!
さて、この問題を再検討した後、Dockerのチートシートを読んでいて、インターフェイスにバインドできることに気付きました。デフォルトでは、インターフェースが指定されていない場合、インターフェースは0.0.0.0
にバインドされますが、たとえば127.0.0.1:80:80
を指定すると、Dockerホストのみがポート80のコンテナーにアクセスできるようになります。
このように、プライベートネットワーク(192.168.1.0/24)を、Dockerコンテナーのすべての公開ポートにバインドするインターフェイスとして指定し(ネットワーク内から直接アクセスできるように)、バインドしたCaddyプロキシのみを0.0.0.0
。これは私が望むように動作しており、特別な設定は必要ありませんでした。
さらに、すべてのコンテナをinternal
という同じユーザー定義ネットワークにリンクしました。このネットワークでは、外部アクセスを制限するをtrue
に設定しました。このようにして、コンテナは相互に通信でき、コンテナ名で解決でき、プライベートネットワーク以外からはアクセスできません。すべてのコンテナからのすべてのサービスは、リバースプロキシによってのみ公開されます。
すべてのコンテナをDockerオーバーレイネットワークに配置します。このようにして、それらは互いに通信しますが、それ以外の場合はそれらのいずれにも接続できません。プロキシを入力Dockerサービスとしてセットアップします。デフォルトでは、コンテナはインターネットに接続するためのアクセス権も持っています。
一部のコンテナのみにインターネットへのアクセスを許可する場合は、そのオーバーレイネットワークのIPマスカレードを無効にして次の手順を実行します。
a。 ICCを無効にし、マスカレードを有効にして、インターネットへのアクセスが必要なコンテナのみをそのネットワークに接続して、別のオーバーレイネットワークを作成します。
b。 Squidなどのプロキシコンテナをセットアップし、IPマスカレードを許可するDockerのデフォルトのブリッジネットワークを介してインターネットアクセスを許可します。
c。 a)とb)の組み合わせ。