web-dev-qa-db-ja.com

ルーティングテーブルにデフォルトで169.254.0.0が表示されるのはなぜですか?

eth0/etc/network/interfacesにサブネットを定義しました:

# interfaces(5) file used by ifup(8) and ifdown(8)  
auto lo  
iface lo inet loopback  

auto eth0  
iface eth0 inet static  
        address 192.168.1.1  
        netmask 255.255.255.0  
        network 192.168.1.0  

このサブネットは、イーサネットポートに接続されたRaspberry Piとの通信に使用されます。すでにWi-Fiによって提供されているため、インターネット接続は必要ありません。

Sudo ifup eth0を実行すると、ラップトップが静的IPアドレス192.168.1.1を取得することを期待していました。ただし、route -nは以下を示します。

Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
... (bunch of things) ...  
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0  
  1. 169.254.0.0行があるのはなぜですか?
  2. 不要だと思います。どうすれば削除できますか?
2
Shinagan

引用されたリンクから:

DHCPクライアントがアドレスを取得しようとしたが、タイムアウトと再試行期間の後にDHCPサーバーを見つけられなかった場合、このネットワークからアドレスをランダムに想定します。これにより、DHCPアドレスの取得に失敗したホストとの通信が可能になります。

ただし、interfacesファイルは、おそらく不可能な静的IPアドレスを要求するため、有効なアドレスは指定されませんでした。

192.168.1.1は、接続しようとしているルーターまたは他のアクセスポイントのアドレスです。したがって、アドレスは許可されません。さらに、インターネットに接続する予定の場合は、DNSネームサーバーを指定する必要があります。提案してもいいですか:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 192.168.1.1

もちろん、続行する前に正確な詳細を確認してください。

インターフェイスを再起動します。

Sudo ifdown eth0 && Sudo ifup -v eth0

小切手:

ping -c3 www.ubuntu.com
4
chili555

RFC 3927 (強調鉱山)ごと:

広域IPネットワークに参加するには、ホストが
インターフェースのIPアドレスを手動で設定するか、
ユーザーまたはネットワーク上のソースから自動的に
動的ホスト構成プロトコル(DHCP)サーバー。残念ながら、
このようなアドレス構成情報は常に利用できるとは限りません。
したがって、ホストが依存することができるのは有益です
アドレスがない場合でもIPネットワーク機能の有用なサブセット
構成が利用可能です。 このドキュメントでは、ホストが
169.254/16プレフィックス内のIPv4アドレスを使用して、同じ物理(または論理)リンクに接続されている他のデバイスとの通信に有効なインターフェイスを自動的に構成します。

要約すると、169.254/16サブネットは、DHCPまたは静的IPアドレスの手動割り当てに依存することなく、物理的に(または論理的に、たとえばスイッチを介して)接続された2つのデバイス間の通信を可能にするために予約されました。

プライベートネットワークに関するウィキペディアの記事 を引用するには、

IEEE 802(イーサネット)ネットワーク上のホストがDHCP経由でネットワークアドレスを取得できない場合、169.254.1.0から169.254.254.255のアドレスが擬似ランダムに割り当てられることがあります。

その使用例として、直接イーサネット接続を介して互いに通信する必要がある2つの組み込みデバイスがありますが、一方または両方のデバイスが最初にDHCPを探して、ローカルに接続される可能性があるとしますエリアネットワーク。デバイスが直接接続されており、利用可能なDHCPがない場合、デバイスは multicast DNS などのプロトコルを使用して相互に自動的に検出することができますが、各デバイスにはまず任意のIPアドレスが割り当てられている必要があります実際にイーサネットリンクを介して互いに通信できます。したがって、オペレーティングシステムは、169.254/16ネットワークからイーサネットデバイスにIPアドレスを自動的に割り当てます。


さて、そのルートがデフォルトでルーティングテーブルにある理由について... /etc/networksを見ると、「リンクローカル」ネットワークがこのサブネットにあると定義されていることがわかります。

$ cat /etc/networks
# symbolic names for networks, see networks(5) for more information
link-local 169.254.0.0

このファイルのアドバイスを参照してman networksをチェックアウトすると、以下が表示されます。

このファイルはroute(8)およびnetstat(8)ユーティリティによって読み込まれます。

したがって、routeがそのファイルを読み取った後、ブート時にルートが自動的に作成されます。


ルートは、実際にリンクローカル通信を使用する予定で、接続されたデバイスに静的IPアドレスを割り当てたくない場合にのみ必要です。しかし、そうしなくてもそのままにしておいても害はありません。

ただし、本当に削除したい場合は、次のようにして削除できます

Sudo route del -net 169.254.0.0 gw 0.0.0.0

または、永続的に削除するには、/etc/networksのエントリをコメントアウトして再起動するだけです。

2
villapx

他の人が述べたように、ifup169.254.0.0ネットワークを設定しているため、link-localがルーティングテーブルに存在します。

これを回避するには、ifconfigの代わりにifupを使用することを検討してください。

必要に応じて、最初にifdownを実行します。

Sudo ifdown eth0
Sudo ifconfig eth0 192.168.1.1

ifconfigは作業量が少なく、/etc/network/interfacesを読み取りません。

インターネットアクセスをPiと共有できるようにする必要があります。ラップトップのカーネルでパケット転送をオンにする必要があります。これは再起動せずにできると思います。私は過去にそれをやったことがありますが、私の聞いた上でそれをする方法を知りません。これは役立つかもしれません:

ネットワークインターフェースをブリッジする方法

0
mpb