VRFおよびIPルールが定義されている場合、パケットパスはどの順序で定義されますか?

VRFおよびIPルールが定義されている場合、パケットパスはどの順序で定義されますか?

システムには、VRF、複数のルーティングテーブル、およびルールが定義されています。ローカルサービス(SSH)は1つのインターフェイス(VRFのWANインターフェイス)を介してアクセスできませんが、他のインターフェイスからはアクセスできます。パケットフィルタが無効になっています。

正確にどこが付いているかデバッグしたいと思います。

VRF と IP ルールは同時に定義されます。ルートはどのように決定されますか?

としてはい、VRFなし:

# ip rule show
101:    from all lookup local
102:    from all lookup main
103:    from all lookup vrf_wan
170:    from all fwmark 0x800000a9 lookup vrf_wan
254:    from all fwmark 0x800000fd lookup main
1000:   from all lookup [l3mdev-table]
2000:   from all lookup [l3mdev-table] unreachable
32765:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

カーネルは最も低いルールで始まります。ルールがソース、ターゲット、または fwmark と一致する場合は、テーブルから検索されます。一致するものがある場合、プロセスは停止し、パスが選択されます。テーブルに一致するエントリがない場合は、次のルールが処理されます(間違っている場合は修正してください)。

特定のインターフェイスおよび/またはプロセスにVRFが割り当てられている場合はどうなりますか?これは完全に直交するかip rule show。どちらかを選択する必要がありますか?それとも両方を同時に使用できますか?

コメント:私のシステムはVyOSです。ルール1000、2000、32765-32767はVyOSによって作成され、削除できません。ルール170と254もVyOSのポリシールールによって生成されますが、他のポリシー(ルール101-103)によって上書きされます。

答え1

デフォルトでは、VRFには1000の優先順位を持つ関連ルーティングルールがあります。VRF文書は次のとおりですOPの例と同じです。

  1. l3mdev FIB ルールは、装置に関連した表の照会を指示します。すべての VRF には単一の l3mdev ルールで十分です。。最初のデバイスが VRF 状態にある場合、VRF デバイスは IPv4 および IPv6 の l3mdev ルールを追加します。デフォルト環境設定1000で作成されました。ユーザーは次のことができます。必要に応じてルールを削除し、別の優先順位を追加するか、各VRFルールをインストールします。

したがって、優先順位が1000のルールを削除し、手動ルールを作成したり、必要に応じて独自のルールを調整したりできます(例:pref <1000またはpref> 1000)。

VRFの詳細については、次のブログをご覧ください。 LinuxでVRF(仮想ルーティングと転送)を使用するStefanのブログ、VyOSがpref 2000ルールを作成した理由、およびローカルテーブルルックアップがpref 0からpref 32765に移動された理由が含まれます。


更新:OPの質問を解決します。コメント

何ですかip vrf exec blue ...?設定しますソケットオプションを強制するBPFフィルタ影響を受けるプロセスがソケットを生成するたびに:

[...]

BPFフィルタはvrf / NAME cgroup2に接続され、sk_bound_dev_ifをVRFデバイスインデックスに設定します。 [...] これにより、すべてのAF_INET/AF_INET6(ipv4/ipv6)ソケットが自動的にVRFドメインにバインドされます。

VRF認識プロセスを使用するのと同じであることを知っています。setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, "vrf-blue", ...)

これはoif、私が理解しているルールがl3mdevこれによって具体的に選択され(以前にパスを解決する前に使用されていた場合)、そうでなければデバイスと一致する残りのパスだけが一致することを意味します。

(また、経験上(VRF外)インターフェイスにバインドするときに宛先までのパスがない場合、バインディング時にパケットをエクスポートできるようにパスを追加したかのように動作することがわかりますが、パスはそうではありません。ゲートウェイなのでほとんど動作しません)。

理解しやすくなることを確認してくださいカーネル4.8以前は体系的に実行する必要がありました。:

v4.8 カーネル以前は、各 VRF デバイスに iif および oif ルールが必要でした。

ip ru add oif vrf-blue table 10
ip ru add iif vrf-blue table 10

このルールは、標準ルール(なし)を使用してpref 1000のルールを短絡したい場合にoif機能します。l3mdev

関連情報