Ubuntuにlocalhostのルートがないのはなぜですか?


12
$ sudo docker run --rm ubuntu:14.04 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

これは、127.0.0.0 / 8がループバックデバイスではなく172.17.42.1のゲートウェイにルーティングされることを意味しませんか?


つまり、Ubuntuにループバックのルートがないのはなぜですか?
バラズラウ

ループバックネットワークの明示的なルートは過去のものだと思います。あなたの質問を見て、私たちのサーバーのいくつかを見てみると、ループバック用のルーティングテーブルにルートがありません。これは、Solaris 8ではなくSolaris 10でも有効です(そう、Solaris 8にはまだいくつかのボックスがあります)。
alphamikevictor

回答:


25

このrouteコマンドは非推奨であり、使用しないでください。

新しい方法は、iprouteコマンドセットを使用ipすることです。これらのコマンドはすべて、オブジェクトが後に続いて呼び出されます。例えば:

$ ip route show
default via 192.168.1.254 dev eth0 
192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.27 

さて、これは基本的に同じ情報だとあなたが言うのを聞きます!はい、しかしこれはすべてではありません。ルーティングテーブル(はい、複数)の前にルールテーブルがあります。

$ ip rule show
    0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

以前に見ていたmainルーティングテーブルはルーティングテーブルです。あなたの質問は、localローカル接続に関連するすべてのルートを含むルーティングテーブルに関するものです。この表は次のように表示できます。

$ ip ro sh table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev eth0  proto kernel  scope link  src 192.168.1.27 
local 192.168.1.27 dev eth0  proto kernel  scope host  src 192.168.1.27 
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.27

ipオプション/パラメーターは、それらがまだ一意である限り省略できます。したがってip ro sh、と同じip route showです。)

ここで、ループバックルートを確認できます。

このポリシーベースのルーティングであらゆる種類のすばらしいことを行うことができます。必要な情報については、Matthew G. MarshによるLinuxでのポリシールーティングを読むことをお勧めします。


1
あなたの言い回しに関する懸念:彼の質問は、実際にはローカルアドレス(127.0.0.0/8)のルーティングに関するものでした。 table local答えですが、質問ではありません。これは、127。*アドレスへのトラフィックが127.0.0.1のソースアドレスを持つように変換されるため、答えdev loです。
ピーターコーデス

1
したがって、質問に対する本当の答えは、「ループバックは特別であり、ループバックは必要ないからです」というのが本当の答えです。これらのルーティングテーブルエントリはいずれも、たとえば127.1.1.1へのルーティング方法について何も言及していませんが、それでも機能します(ping時間からわかるように)。おそらくネットワークのコード特殊な場合、パフォーマンス上の理由から、ローカルアドレス、以降ip addrは表示されませんlo以上単なる持つ127.0.0.1...自身のアドレスとして、それは実際には127に任意のIPのトラフィックを受信します/ 8
ピーター・コルド

4
@PeterCordes実際には、この行local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1は127.1.1.1へのルートをカバーしています。127で始まるものはすべてローカルであることを意味します。
ウルテル

ああ、わかりlocalましたlocal。テーブルのエントリが暗示するすべてを理解していませんでした。ありがとう。
ピーターコーデス

2

routeコマンドは、10年前から古く、あなたが行くべきiproute2パッケージ。

テーブルを使用してip route showいるときmainは表示されます。localテーブルを表示するには、を使用しますip route show table local

それが役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.