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
マニュアルページで: "このコマンドはターゲットへの単一のパスを取り、カーネルが見るものと正確にその内容を印刷します。"