ネットワーク名前空間全体にわたる Linux パケットの表示

ネットワーク名前空間全体にわたる Linux パケットの表示

mangle私はiptablesを使用して、特定のホストのテーブルにある特定の送信元/宛先IPのパケット表示を実行しようとしています。その後、これらのパケットは同じホスト上の特定のネットワーク名前空間に転送されますが、そのネットワーク名前空間にインストールされているiptablesルールは正しく実行されません。だから気になります。パケットマークは、そのマークを持つネットワーク名前空間に限定されますか?私の考えでは、タグはskbに関連付けられている「プロパティ」なので、カーネルは名前空間に関係なく、ホスト上でタグがルーティングされる場所を追跡します。

それとも、これをデバッグする方法についてのアイデアを持っている人はいますか?ターゲットネットワークネームスペース内にルールをインストールしましたが、出力を表示するにはTRACE実行する必要があるという印象を受けましたがdmesg、これはネットワークネームスペースには適していません。

答え1

パケットタグは、タグが配置されているネットワークネームスペースにのみローカルですか?

はい。このタグはネットワークネームスペースにローカルです。各ネームスペースには独立したネットワークスタックがあるため、パケットがあるネームスペースから別のネームスペースに移動したときに、有線を通過するのと同じです。痕跡は残りません。

ネットワークネームスペース内にTRACEルールをインストールしました。

時によって異なります...

使用する場合iptables-legacyターゲットTRACEの選択は制限されています。

  • デフォルトでは、初期ネットワーク名前空間のみがnetfilterイベントを記録できます。情報
  • またはsysctl -w net.netfilter.nf_log_all_netns=1それからみんなネットワークネームスペースがログインします。情報これは、複数のネットワーク名前空間が複数のログを生成する場合に問題になる可能性があります。

その理由は情報名前空間ではなくグローバルにログを送信します。情報最初は使用できる唯一の方法ですTRACE

今使うとnftables'nftrace宣言または使用iptables-nft、宛先にメッセージを送信する以前の方法はTRACE(netfilter)に置き換えられます。ネットワークリンクソケットAPIこれは名前空間を認識し、リスナー(マルチキャストなど)にのみ送信されます。

これは次のことを意味します。NFFTバリエーションは次のとおりです。

# iptables-nft -V
iptables v1.8.7 (nf_tables)

しかし、遺産バリエーションは次のとおりです。

# iptables-legacy -V
iptables v1.8.7 (legacy)

使用すると、トレース情報は送信されません。情報これ以上ではありませんが、xtables-monitor --traceキャプチャに使用できます。繰り返しますが、バリアントxtables-monitorにのみ使用できます。iptables-nftiptables

この場合、ip netns add ...生成された複数のネットワーク名前空間を並列にデバッグする1つの方法は次のとおりです。xtables-monitor、ネットワーク名前空間ごとに1回ずつ別々のログに記録されます。ts出力の各行にタイムスタンプを表示して各名前空間を識別すると、後で必要に応じて結果を簡単に分割できます。

Nettsはこんな感じです。金持ち バーそしてブザー音:

for ns in foo bar baz; do
    ip netns exec "$ns" xtables-monitor --trace | ts -s "%.s $ns" &
done

pkill xtables-monitor後で必要になる場合があります。)

ネットワークネームスペースを介して作成されなかったネットワークネームスペースの場合、これは通常、これを生成したアプリケーションに関する情報を含むいくつかの追加の操作でip netns add置き換えることができます(、...)。ip netns execnsenterdocker inspectlxc-info

使用するコマンドnftables彼とは対照的にnft monitor trace動作はネットワークネームスペースでも同じです。実際にもnft monitor trace表示されます。iptables-nftTRACE同じAPIなのでターゲットです。

関連情報