Dockerがネットワークに接続する方法をよりよく理解しようとしていますが、この問題が発生しました。注:私はこれがDocker自体とは関係がないと思い、Dockerが登場する車両にすぎません。これが私の誤解なら、自由に訂正してください!
Docker が Swarm モードで実行されると、次の iptables コマンドが実行されます。
> iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT udp -- anywhere anywhere udp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
DOCKER all -- anywhere (1) anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere (2) anywhere
ACCEPT all -- anywhere (3) anywhere
DOCKER all -- anywhere (4) anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
出力に1,2,3,4の数字を追加しました。 1番と4番は重複しているようです。同様に、2と3は互いに同じコピーのように見えます。これらの目的は何ですか?本当に重複ですか?そうでない場合、それを識別するために次の情報層をどのように表示できますか?
そして、最初の部分で誰かdpt:domain
vsを説明することができればdpt:bootps
それも良いと思います!
答え1
見つかったルールは、「ペア」1-4と2-3に対して重複しない可能性が高いですが、使用したコマンドの出力に違いはありません。を使用すると、iptables -L -v
違いを明らかにするための追加の出力が得られます。これは、ルールが別のインターフェイスで実行されている場合(私の経験では)頻繁に発生します。
ターゲットポートの仕様が異なりますdpt:domain
。宛先ポートは53(ドメインまたはDNS)ですが、宛先ポートは67(DHCP)です。dpt:bootps
dpt:domain
dpt:bootps
編集:そうです。この状況はDockerと直接関連していません。これはDockerがユーザーエクスペリエンスにさらされる比較的一般的な状況ですが、Docker環境の外でも頻繁に発生します。
答え2
2番目の質問に対する追加の答え:この実行は、iptables -L -n
IPアドレスとポートをホスト名とサービス名に変換するのではなく、数値形式で返します。したがって、dpt:domain
andはanddpt:bootps
として印刷されます。これは、後ろのサービス名がわからないすべてのホスト/ポートに対して機能します。dpt:53
dpt:67