netplan examples のこの例
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 9.0.0.9/24
- 10.0.0.10/24
- 11.0.0.11/24
#gateway4: # unset, since we configure routes below
routes:
- to: 0.0.0.0/0
via: 9.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 10.0.0.1
metric: 100
- to: 0.0.0.0/0
via: 11.0.0.1
metric: 100
ルートがインターフェース構成の一部であるのはなぜですか?
ルーティングはグローバルではありませんか?
これらは、ルートとインターフェースの2つの異なるものです。
ルートには、Linuxルーティングテーブルに関連するインターフェイスがあります。これは、システムのdev
列のip route show
の出力で確認できます。この情報により、カーネルは、各パケットのルート依存関係を計算する必要なく、トラフィックを送信する必要のあるインターフェイスを知ることができます。また、特定のインターフェイスが「ダウン」状態の場合、カーネルはルーティングで正しいことを実行できます。
ネットプランの観点からは、デバイスが同時に起動しないため、ルートとデバイス間の関連付けが重要であり、対応するゲートウェイへのルートが利用可能な場合にのみ、システムはカーネルへのルートの追加を試みる必要があります。
ルートがインターフェースに固有であるのは珍しいことではありませんが、それらは通常グローバルです。
たとえば、VPNインターフェイスがある場合、VPNのもう一方の端にあるすべてのサブネットをそのリンク経由でルーティングする必要があるでしょう。これらはプライベート/予約済みサブネットである可能性があります。つまり、VPNがアクティブな場合にのみ使用できるため、ルートテーブルに常に存在させることは意味がありませんが、おそらくまだ機能します。
提供した例では、おそらく冗長性のために、複数のデフォルトルートがあります。
おそらく、ルーティングで理解する最も重要なルールは、「最も具体的なルートが最初」のルールです。つまり、_10.0.0.1
_にアクセスしようとすると、_10.0.0.0/25
_のルートを通過してから、 _10.0.0.0/24
_のルート。これは明らかに_0.0.0.0/0
_の前に移動します。