同じインターフェイス上の 2 つの IP アドレスのどちらが使用されているかを確認する

同じインターフェイス上の 2 つの IP アドレスのどちらが使用されているかを確認する

eth0にDHCPを使用するように設定された組み込みLinuxシステムがありますが、DHCPがIPアドレスを取得できない場合に備えて、リンクローカルIPアドレスをバックアップアドレス(eth0:1)に設定しました。

シェルスクリプトでどのIPアドレスが使用されているかを簡単に確認する方法はありますか?

私が得た最も近いものは次のとおりです。

$ ip route get 1
1.0.0.0 via 192.168.0.100 dev eth0  src 192.168.0.133
    cache
$ ifconfig eth0 0.0.0.0   # Simulate no IP obtained from DHCP
$ ip route get 1                                                       
1.0.0.0 via 192.168.0.100 dev eth0  src 169.254.197.131   
    cache

これは、使用しているIPアドレス(「src」フィールド)を正しく識別します。ただし、これはデフォルトゲートウェイが設定されている場合にのみ機能し、何らかの理由でDHCPが利用できない場合は機能しません。

デフォルトゲートウェイが設定されていない場合でも、どのIPアドレスが使用されているかどうかはどうすればわかりますか?

ベストアンサー1

注文するip route get ADDRESS するデフォルトゲートウェイを設定しなくても機能します。たとえば、eth0:に次のアドレスが設定されていて、デフォルトルートが10.0.7.139/24削除169.254.1.2/16された場合

$ ip route get 10.0.7.222
10.0.7.222 dev eth0 src 10.0.7.139 
    cache

$ ip route get 169.254.55
169.254.55.0 dev eth0 src 169.254.1.2 
    cache

$ ip route get 1
RTNETLINK answers: Network is unreachable

最後の答えは正しいです。アドレス 1.xxx のホストがないと、ホストに接続できません。コマンドが機能しないのではなく、ip route getネットワーク構成が間違っています。

「リンクローカル」は、単に接続されたイーサネットリンクeth0でのみ使用されるアドレスを意味する。 「発信」接続には使用しないでください。

編集:以下の説明に説明が追加されました。

ルーティングテーブル(およびルーティングテーブルのみ)は、パケットが宛先への移動を開始する方法を決定します。宛先がローカルリンクまたはローカルホストにある場合でも、IPパケットを送信するときにルーティングは常に含まれます。ルーティングテーブルエントリには送信元アドレスも含まれ、ルートに一致するアドレスが送信されたパケットの送信元IPアドレスとして選択されます。

同じインターフェイスまたは同じアドレス範囲に複数のIPアドレスを割り当てることができますが、そのうちの1つだけ(プライマリアドレス)が一致するルーティングテーブルエントリに一覧表示されます。

したがって、ip route get(または間接的にip route)あなたの質問に明確な答えを提供します。ip-routeマニュアルページで: "このコマンドはターゲットへの単一のパスを取り、カーネルが見るものと正確にその内容を印刷します。"

おすすめ記事