Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
0.0.0.0 192.168.1.25 0.0.0.0 UG 0 0 0 eth0
Linuxルーティングがどのように機能するかを知りたいです。
パケットはデバイス/インターフェイスに入って来ます。この場合にはeth0
、eth1
。eth2
したがって、IPパケットは、これらのデバイスや他のデバイスtun
(たとえば、
IPパケットが到着したとしましょうeth1
。 IPソース:192.168.1.1、IPターゲット:199.178.167.431。アドレスはGenmaskの外部にあるため、eth1
Linuxはデフォルトゲートウェイを介してアドレスを送信しようとします。
IPパケットが到着したとしましょうeth1
。 IPソース:192.168.1.1、IPターゲット:192.168.1.2。このアドレスはgenmaskにあるので、eth1
Linuxはこのパケットをどこに送りますか?どのデバイスで?
IPパケットが到着したとしましょうeth0
。 2つのエントリがありますが、eth0
Linuxはこのパケットをルーティングするためにどのエントリを使用しますか?また、このパケットの送信元と宛先が何であるかはわかりません。誰でも例をあげることができますか?
答え1
まず、TCP / IPとルーティングテーブルの基本的な内容を読むことをお勧めします。
IP パケットが eth1 に到着したとします。 IPソース:192.168.1.1、IPターゲット:199.178.167.431。アドレスはeth1のGenmaskの外側にあるため、Linuxはデフォルトゲートウェイを介してアドレスを送信しようとします。
宛先 IP がインターフェイス定義と一致しないため、パケットは破棄されます。
IP パケットが eth1 に到着したとします。 IPソース:192.168.1.1、IPターゲット:192.168.1.2。このアドレスはeth1のジェンマスクにあるので、Linuxはこのパケットをどこに送りますか?どのデバイスで?
宛先 IP がインターフェイス定義と一致しないため、パケットは破棄されます。
IP パケットが eth0 に到着したとします。 eth0エントリが2つありますが、Linuxはこのパケットをルーティングするためにどのエントリを使用しますか?また、このパケットの送信元と宛先が何であるかはわかりません。誰でも例をあげることができますか?
たった 1 つの項目だけがインターフェイスのレイヤ 3 構成を定義するため、192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
あいまいさはありません。さらに、デフォルトゲートウェイはインターフェイスのローカルIPアドレスにマッピングされていますが、eth0
これは他のすべてのルートが失敗したときに使用されるルートであるため、問題と完全に一致しません。
ルーティングプロセス中、カーネルは常により具体的なパス定義からあまり具体的でないパス定義まで一致します。したがって、パケットが転送される予定で、 と に10.1.2.3
2 つのルートが定義されている場合、パケットは宛先に一致する最も具体的なルートであるため、それを離れます。10.1.0.0/16
eth3
10.1.2.0/24
eth4
eth4
答え2
Linux に限定されず、IP ルーティングルールに過ぎません。
私は最も簡単なケースeth1とeth2から始めました。
192.168.0.0
ターゲットとnetmaskでeth1に提供されているカーネルルーティングテーブルを使用してください255.255.255.0
。これは、eth1がアドレス1から254までのネットワークにあることを意味します。192.168.0
ネットワーク内の各コンピュータはアドレス1から254までを持ち、255は特別な意味を持ちます。ネットワークの最初のアドレスはネットワークアドレス、最後のアドレスはネットワークアドレスです。放送アドレス。したがって、すべてのコンピュータに完全なアドレス「ネットワークアドレス」があります。 「コンピュータアドレス」:たとえば、192.168.0.45および255.255.255.0ネットマスクは、192.168.0ネットワークのコンピュータアドレス45です。このインターフェイスにゲートウェイがない場合、インターフェイスはこの形式のIPパケットのみを受け入れます。したがって、送信元 IP 192.168.1.1 へのパケット ルーティングはありません。そのアドレスは 192.168.0.0 ネットワークに存在せず、IP パケットは破棄されます。
ネットワークアドレスが192.168.25.0であることを除いて、eth2と同じです。
eth0には2つのパスがあります。最初(ターゲット192.168.1.24、マスク255.255.255.252、ゲートウェイなし)はローカルネットワーク用で、2番目(ターゲット0.0.0.0、マスク0.0.0.0、ゲートウェイ192.168.1.25)は「デフォルト」パスです。このパスは、「特定のパケットで何をすべきかわからない場合は、192.168.1.25経由で送信してください」を意味します。ネットワークマスクは255.255.255.252です。 252はバイナリ11111100です。このネットワークには4つのアドレスがあります:192.168.1.24(ネットワークアドレス)、192.168.1.25(ゲートウェイアドレス、ルーティングテーブルで確認)、192.168.1.26(アイドルアドレス)、192.168.1.27(ブロードキャストeth0のIPアドレスが192.168.1.26であると推測することは難しくありません。
とにかく、このパスは内部的に「このパケットをどこに送りますか?」という質問に答えるために使用されます。カーネルでルーティングが有効になっていると仮定すると(/proc/sys/net/ipv4/ip_forward
1に設定)、次のようなさまざまなシナリオが表示されます。
- 送信元IPを持つパケットが
192.168.1.1
eth1(ネットワーク192.168.0.0)に到着します。 - IPソースを持つパケットは、
192.168.0.45
IP宛先を持つeth1(ネットワーク192.168.0.0)に到着します192.168.25.32
。パケットはカーネルによって承認され、ルーティングテーブルに従ってeth2を介して出力されます。 - IPソースを持つパケットは、
192.168.0.45
IP宛先を持つeth1(ネットワーク192.168.0.0)に到着します97.67.25.49
。パケットはカーネルによって承認されますが、カーネルはこの特定のネットワークについて知らず、ルーティングテーブルに従ってeth0を介して192.168.1.25(ゲートウェイ)のIPパケットを送信します。 - IPソースを持つパケットは、
192.168.0.45
IP宛先を持つeth1(ネットワーク192.168.0.0)に到着します192.168.1.1
。パケットはカーネルによって承認されますが、カーネルはこの特定のネットワークについて知らず(彼は192.168.1.1を含まない192.168.1.24/30について知っています)、ルーティングテーブルに従って192.168.1.25(ゲートウェイ)を送信します。 ) eth0 経由の IP パケット。
答え3
パケットルーティングは、パケットが着信インターフェイスに依存しません(少なくとも一般的な「非高度な」ルーティングを使用しません)。パケットはホストのプロセスによって生成された可能性があり、その場合、パケットはネットワークからまったく受信されません。ルーターとして機能するホストのみがパケットを転送します。つまり、受信パケットが宛先でない場合は再送信します。サーバーとワークステーションはしばしば転送を無効にします。この場合、宛先ではなく受信パケットを破棄します。
パケットがローカルで生成または転送されるかどうかに関係なく、発信パケットは同じ方法でルーティングされます。つまり、ルーティングテーブルを参照し、最良のパス(「最も長い接頭辞の一致」を含む)が選択されます。宛先ホストが直接接続されているネットワーク上にある場合、パケットは宛先ホストに直接送信され、そうでない場合、パケットはローカルネットワーク上のルータに送信されます。ルーターのアドレスは、ルーティングテーブルの一致する行の「ゲートウェイ」列にあります。
IP パケットが eth1 に到着したとします。 IPソース:192.168.1.1、IPターゲット:199.178.167.431。アドレスはeth1のGenmaskの外側にあるため、Linuxはデフォルトゲートウェイを介してアドレスを送信しようとします。
あなたの例は少し人為的です。実際の世界では、このソースアドレスを持つパケットはeth1
インターフェイスに接続されているネットワークに属するため、インターフェイスには入りませんeth0
。これが発生した場合は、何か真剣に間違った設定があります。これがパケットがドロップされる理由でもあります。
着信インターフェイス(あなたの例では)のネットワークネットマスクは、パケットのルーティングeth1
方法に影響を与えず、ルーティングテーブルのみとして機能します。一般的に言えば、「クラシック」ルーティングでは、ネクストホップの選択は、パケットの過去の履歴(パケットが入っているインターフェイス(存在する場合)など)ではなく、常に予想に基づいています。