タイトル【Darwinシリーズ】ネットワークの設定:IPアドレスを割り振るカテゴリーネットワーク, Darwin, Darwin 1.0
作成日2000/7/13 11:42:19作成者新居雅行
Darwin 1.0の中身を見ていくシリーズは、今回からネットワーク設定を見てみることにする。LinuxやFreeBSDのIntel版ではいろいろなネットワークカードに対応するために、ソースが配付されていたり、モジュールが組み込まれていたりする。しかしながら、DarwinがサポートするMacintosh本体は、いずれも本体にEthernet端子が組み込まれた状態ものもだ。つまり、Apple純正品への対応は必須と言える。一方、PCIカードとして追加したEthernetカードを使えるかどうかと言えば、それについてはほとんど期待できない。Mac OS XはIOKitによってモジュール形式でデバイスドライバを供給する。となると、Darwinも同様だが、今現在Darwin用ネットワークカードのモジュールというものは聞かない。現状では本体に組み込まれたネットワーク端子を使う以外は期待できないということだろう(ただし、カーネルにPCIカードのドライバが組み込まれていれば別だろう)。なお、FreeBSDではデバイスドライバがカーネルに組み込む形式になっており、一般にはソースを元にカーネルを構築することになる。

まず、何もしない状態で、ネットワークインタフェース関連のコマンドでチェックを行う。netstat -i コマンドと、ifconfig -a コマンドの結果は次の図のようなものだ。
◇Darwinをインストールした状態でのネットワーク設定
 

デバイスのlo0はループバックだが、Ethernetインタフェースとしてen0というデバイスがすでに認識されている。まずは本体組み込みのEthernetのドライバは、カーネルに統合されているということが概ね確認ができたと言える。ただし、netstatコマンドの結果にあるように「en0*」となっていて、機能していないことを示す*マークがついている。また、ifconfigコマンドの結果にあるように、Ethernetとして機能しているものの、inetの記述がなくつまりインターネット向けのインタフェースとしては機能していないということを示している。

ここで、ネットワークインタフェースの設定を行う、/etc/iftabファイルを参照してみた。このファイルには1行に1つのインタフェースの設定を記述し、3つに別れた列は順にインタフェース名、プロトコル、そして/sbin/ifconfigコマンドに引き渡す引数となる(rootでログインしたときにはifconfigだけで利用できる)。
◇インタフェース設定ファイル/etc/iftabの初期状態
 

ここにあるように、ループバックデバイスのlo0については、インターネットアドレスが127.0.0.1となるように設定がある。しかしながら、他のデバイスは-AUTOMATIC-となっており、自動的に設定がなされるとしか説明がない。つまり、Ethernetインタフェースのen0は自動的に設定がなされるはずである。
しかしながら、どういう形式でifconfigコマンドが呼び出されるかがは分からなかった。もしかしてと思って、DHCPサーバが稼働するネットワーク環境下でそのままDarwinを起動してみたが、IPアドレスは取得している様子はない。ファイル検索で調べたが、DHCPクライアントのdhcpd自体はないようだ(/var/run/dhcpclientというディレクトリはあるが空だ)。どうもDHCPのクライアントとしてすぐに働かせることはできないようで、そうするにしてもいろいろ大変そうであることは確かだ。いずれにしても、Ethernetインタフェースはインターネットが使えるという状態へは自動的に設定されないのである。

それではということで、「ifconfig en0 192.168.0.99」のようにコマンドを入れてみた。すると、きちんとEthernet経由でpingなどで通信ができることが確認できた。とりあえず、IPアドレスを固定するのであれば、/etc/iftabファイルに、

en0 inet 192.168.0.99 netmask 255.255.255.0 up

という行を付け加えた。つまりen0というインタフェースのIPアドレスとネットマスクを一応指定し、upというパラメータでインタフェースを稼動させるのである。このIPアドレス以降の部分がifconfigコマンドの引数になる。「*」で始まる行はとりあえずそのままにして、その行の前に追加してみた。それで再起動を行い、netstat -i、ifconfig -a の各コマンドを実行してみた結果は次の通りだ。これで、en0つまり内蔵のネットワーク端子が、インターネットに対してIPアドレス192.168.0.99で機能することが確認された。たとえば、「ping 192.168.0.1」のようなコマンドがきちんと動くようになったのである。ネットワークの話の続きは次回にしよう。
◇Ethernetインタフェースが稼働した状態
 
関連リンク