Linux の「martian source」ログを読むにはどうすればいいですか?

Linux の「martian source」ログを読むにはどうすればいいですか?

ポリシー ベース ルーティングを使用して KVM 仮想化ホストを設定しています (更新、SSH などのホスト関連トラフィック用の 192.168.1.0/24 管理ネットワーク、VM にルーティングされる 192.168.2.0/24 DMZ ネットワーク)

セットアップは次のようになります(^^^つまり上記のようにツリー構造を表現するため)

#external connectivity
eth0 -> vlan110 -> brhost (192.168.1.9)
^^^  -> vlan120 -> brguest (192.168.2.4)

#internal connectivity
brguestA (10.0.1.1) -> tapA0
^^^                 -> tapA1
^^^                 -> tapA2
brguestB (10.0.2.1) -> tapB0
^^^                 -> tapB1

# ... and so on for each VM group subnet

マシン An は 1 つの「スイッチ」にあり、Bn は 2 番目の「スイッチ」にあるなどです。ホストはルーターのように動作し、iptables がインストールされています。ソース IP は、iptables レベルでブリッジごとに検証されます。

一般的に、すべてが「正常」に動作しますが、境界ケース操作を実行すると、想定どおりに動作しますが、ログは、それが実際の適切な機能というよりも偶然の一致であることを示しています。例:

  • iptablesレベル(tcp-reset)でブロックされているVM(管理ネットワーク内の別のホスト)から192.168.1.3に接続すると、

    (iptables reject log) IN=brguestA OUT=brguest SRC=10.0.1.2 DST=192.168.1.3 ...
    IPv4: martian source 10.0.1.2 from 192.168.1.3 on dev brhost
    

インターフェースは、ホスト/ゲストネットワーク分離のロジックを考慮すると、実際に正しい動作をしており、そのようなパケットがホストによって転送されたとしても、ファイアウォールでドロップされることに注意してくださいOUT。ただし、ホストの iptables は tcp-reset で適切に拒否できないため、そのような接続は VM 上でハングし、リセットを受け取りません。

  • VMから192.168.1.9に接続すると

    IPv4: martian source 192.168.1.9 from 10.0.1.2 on dev brguestA
    

他には何もありません。これらのログで 10.0.1.x と 192.168.1.x の場所が入れ替わっているのが本当に混乱していて、それらの意味が本当にわかりません (どれが src ip でどれが dst ip か)。ホストが何をしようとしているのか、なぜ失敗するのか、よくわかりません。以下は、およびの出力ip ruleですip route

ip rule
0: from all lookup local
32763: from 10.0.0.0/16 lookup guest
32764: from 192.168.2.0/24 lookup guest
32765: from all iif lo lookup host
32766: from all lookup main
32767: from all lookup default

ip route show table host
default via 192.168.1.1 dev brhost proto static
192.168.1.0/24 dev brhost proto static

ip route show table guest
default via 192.168.2.1 dev brguest proto static
10.0.0.0/24 dev brguestA proto static
10.0.1.0/24 dev brguestB proto static
# ... so on for other networks

ip route show table main
192.168.1.0/24 dev brhost proto static
10.0.0.0/24 dev brguestA proto static
10.0.1.0/24 dev brguestB proto static
# ...

systemd-networkdネットワーク管理に使用しています。考えこれは、ホストが常に、設定されているパケットの種類brhostとしてデバイスを使用して応答しようとするため、ルールによってキャッチされるために発生します。ただし、接続が適切に拒否されるため、出力ソースとして常に選択されるわけではないため、そうではないようです。OUTPUTiiflofrom iif lookup host192.168.2.4brhost

関連情報