次のルーティングルールがあります(displayを使用route -n
)。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.1 0.0.0.0 UG 100 0 0 enp0s3
10.0.2.0 0.0.0.0 255.255.255.192 U 100 0 0 enp0s3.100
10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3
このインターフェイスは、enp0s3.100
VLAN IDが100のインターフェイスです。
10.0.2.70 へのパスを取得しようとすると、VLAN インターフェイスを使用すると予想されますが、次の機能は使用しません。
# ip route get 10.0.2.70
10.0.2.70 dev enp0s3 src 10.0.2.11
cache
ここで最長の接頭辞マッチングが使用されない理由を知っている人はいますか?
答え1
まず、単にコマンドを使用するのが最善であるため、ルーティングテーブルを一覧表示するには、コマンドを使用するか、単にip
コマンドを使用する必要があります。ip route show
ip r
この場合、VPN のパスは 10.0.2.0/255.255.255.192 または 10.0.2.0/26 です。サブネットは0〜63です。あなたのサンプルターゲット10.0.2.70は次のとおりです。外部この範囲にあるので、VPN 経由でルーティングする代わりに、enp0s3 で次により具体的なパス 10.0.2.0/24 を使用します。
「最も長いプレフィックスのマッチング」を参照しましたが、一般的に「最も具体的なマッチング」、つまり範囲が最も小さい場所は、最も長いプレフィックスを意味します。ただし、上記のようにテスト中のIPアドレスは、考えているプレフィックスの範囲に属していません。
netmask
Debian(およびその派生物)には、状況をより明確にするのに役立つ非常に便利なユーティリティがあります。
$ netmask -r 10.0.2.0/255.255.255.192
10.0.2.0-10.0.2.63 (64)
これにはip route show
図全体が表示されず、ポリシーベースのルーティングが適用される場合があります。また、すべてのルーティングルールを一覧表示する必要があります。これは一般的な出力です。
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
その後、特定のテーブル(ここでは「ローカル」テーブル)のルーティングエントリを次のように一覧表示できます。
$ ip route show table local
これをポリシーベースのルーティングと呼びます。通常、この機能は使用しませんが(たとえば、複数のインターネット接続がある場合はこの機能を使用します)、自分で構成していないシステムのルーティング問題を解決するときに知っておくと便利です。