3.4. 現在の設定を調べてみる

驚かれるかもしれませんが、iproute2 は既に設定済みなのです! 現状のコマンドである ifconfigroute も、 既に advanced なシステムコールを用いているのです。 ただし非常に基本的な (退屈な) 設定のみですが。

中心となるコマンドは ip です。 ではこのコマンドに、我々のインターフェースの状態を表示させてみましょう。

3.4.1. ip にリンクを表示させる

[ahu@home ahu]$ ip link list
1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100
    link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10
    link/ppp 

環境によって表示は異なりますが、 私の自宅の NAT ルータで ip が表示したのは このような内容でした。ここではすべてが直接関係しているわけではないので、 一部のみを説明します。

まず loopback インターフェースがあります。 これがなくても動作しているコンピュータもあるかもしれませんが、 そのような状況はまずい、というのが私のアドバイスです。 MTU サイズ (最大転送単位) は 3924 オクテットで、 キューイングは行いません。 loopback インターフェースはカーネルによる一種の虚構ですから、 これは当然です。

いまは dummy インターフェースは飛ばします。 これはあなたのコンピュータにはないでしょうから。 続いて物理的なネットワークインターフェースが 2 つあります。 ひとつはケーブルモデムの側に、 もう一つは自宅イーサネットセグメントの側にあります。 さらに、ppp0 インターフェースがあるのもわかります。

IP アドレスが表示されていないことに気づかれたでしょうか。 iproute は「リンク」と「IP アドレス」という二つの概念を切り離しています。 IP エイリアスを用いると、「特定の」IP アドレスという概念は、 どのみち極めて不適切なものになってしまいます。

そのかわり MAC アドレスは表示されています。 これはイーサネットインターフェースのハードウェア識別子です。

3.4.2. ip に IP アドレスを表示させる

[ahu@home ahu]$ ip address show        
1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100
    link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0
4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10
    link/ppp 
    inet 212.64.94.251 peer 212.64.94.1/32 scope global ppp0

今回は情報が多くなりました。すべてのアドレスと、 それがどのカードに属しているかが表示されています。'inet' は Internet (IPv4) の意味です。ほかにもたくさんのアドレスファミリーがありますが、 現在のところはまだ出てきていません。

eth0 をもうちょっと詳しく調べてみましょう。 これには inet アドレス '10.0.0.1/8' が関連付けられています。 これは何を意味するのでしょう? /8 はネットワークアドレス部の ビット数を表しています。全部で 32 ビットありますから、 残りの 24 ビットがネットワークの内部で使えるわけです。 10.0.0.1 の最初の 8 ビットは 10.0.0.0 となりますので、 これが我々のネットワークアドレスです。また我々のネットマスクは 255.0.0.0 です。

他のビットはこのインターフェースと接続しています。 例えば 10.250.3.13 には、 (現在 10.0.0.1 である) eth0 から直接に接続できます。

ppp0 にも同じ考えが適用できますが、数値が違います。 ppp0 のアドレスは 212.64.94.251 で、サブネットマスクはありません。 これは point-to-point 接続であることを意味しており、 212.64.94.251 を除いては、すべてのアドレスがリモートです。 ただし、他にも情報があります。この表示によれば、接続の他端には、 (またもや) 単独のアドレス 212.64.94.1 のみがあります。この /32 は、 ネットワークビットが一切存在しないことを意味しています。

これらの概念を把握することは、決定的に重要です。もし問題があるようなら、 この HOWTO の最初のほうで紹介した文書を参照して下さい。

さらに 'qdisc' にも気づいたでしょうか。これは Queueing Discipline を表しています。これも後ほど非常に重要となります。

3.4.3. ip に経路を表示させる

さて、これで 10.x.y.z というアドレスの探し方はわかりました。 また 212.64.94.1 に到達することもできます。 しかしこれだけでは十分ではありません。全世界へと到達するための方法を 知る必要があります。インターネットには ppp 接続経由でつながっており、 よって 212.64.94.1 は我々から世界に向けたパケットを送る先で、 またその結果を私たちのところに戻してくる場所であることがわかります。

[ahu@home ahu]$ ip route show
212.64.94.1 dev ppp0  proto kernel  scope link  src 212.64.94.251 
10.0.0.0/8 dev eth0  proto kernel  scope link  src 10.0.0.1 
127.0.0.0/8 dev lo  scope link 
default via 212.64.94.1 dev ppp0 

これはほぼ見ただけでわかるでしょう。 最初の 3 行は、既に ip address show によって示された状態を表示しています。 最後の行は、残りの世界が 212.64.94.1 の先に見つかること、 これが我々のデフォルトゲートウェイであることを示しています。 これがまさに「玄関口」であることは、言葉からもわかります。 すなわち我々は 212.64.94.1 にパケットを送れば、 あとの残りはそちらで面倒を見てもらえるのです。

参照のために、古い route ユーティリティの結果もお見せしておきましょう。

[ahu@home ahu]$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use
Iface
212.64.94.1     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         212.64.94.1     0.0.0.0         UG    0      0        0 ppp0