ルーティングテーブルエントリには属性がありますscope
。global
から(またはその逆)変更がlink
ネットワークシステムにどのような影響を与えるかを知りたいです。
ベストアンサー1
NIC設定に3つの異なるIP範囲があるとします。
14: ens160: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
inet 172.22.0.1/24 scope host ens160
inet 172.21.0.1/24 scope link ens160
inet 172.20.0.1/24 scope global ens160
ルーティングテーブルに ens160 パスがあるとします。
172.20.0.0/24 dev ens160 proto kernel scope link src 172.20.0.1
ご覧のとおり、NICとルーティングに範囲設定があります。
パスがsrcを指定した場合、この場合、LinuxはパスとNIC設定の範囲設定を完全に無視します。それは完全に無視されます。そして、LinuxはNICから発信するパケットにsrc ip = 172.20.0.1を使用します。
別のルートがあるとしましょう。
4.4.4.4 scope link
src ipがパスに指定されていない場合、Linuxはパスの範囲を確認します。私たちの場合、範囲=リンクです。その後、LinuxはNIC設定に移動し、同じ範囲のIPを検索します。この例では、IP range = link = 172.21.0.1/24です。
したがって、dst ip = 4.4.4.4の場合、Linuxはsrc ip = 172.21.0.1を使用します。
パスに範囲が指定されていない場合は、範囲 = グローバルを意味します。
はい
35.35.35.35 dev ens160
次へ。基本パスを見てみましょう。
default via 172.16.102.1 dev ens160 onlink
範囲を指定しません。これは範囲=グローバルを意味します。
デフォルトパスはsrcを指定しないため、これはLinuxがscope = globalでens160 IPを取得してそれをsrc IPとして使用することを意味します。
次へ。ルートに 1 つの範囲があり、NIC IP に異なる範囲があるとします。はい
ネットワークカード
14: vasya2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 36:ee:4c:d0:90:3a brd ff:ff:ff:ff:ff:ff
inet 172.22.0.1/24 scope host vasya2
パス
14.14.14.14 scope link
14.14.14.14 pingをすると何が起こるのか?
ルートには範囲=リンクがありますが、NICには範囲=ホストのIPのみがあります。重要なのは、範囲=ホストであるIPは、範囲=ホストであるパスのバックエンドとしてのみ機能できることです。それ以外の場合、LinuxはそのようなIPを使用できません。したがって、Linuxはsrc ip = 0.0.0.0をdst ip 14.14.14.14として使用します。
(実際には、ネットワークカードが物理的なものか仮想なのかによって異なります。ネットワークカードが仮想の場合、この場合、Linuxは
範囲=グローバルである他のネットワークカードの異なるIPを使用します)
一般規則:パスがsrcを指定しない場合
- 範囲=ホストインIPは、範囲=ホストインパスのバックエンドとしてのみ機能できます。
- 範囲=リンクインIPは、範囲=ホストまたは範囲=リンクインパスのバックエンドとしてのみ使用できます。
- 範囲=グローバルなIPは、すべての範囲のルートのバックエンドとしてのみ機能できます。
こんな不快な建築物にたくさん驚きました。
これらのすべての「範囲項目」を忘れるには、ルーティングテーブルのパスにあるsrcフィールドを使用してください。