DHCP mini-HOWTO (DHCPd/DHCPcd)
Vladimir Vuksan, vuksan@veus.hr
v2.8, 11 February 1999
中野武雄 nakano@apm.seikei.ac.jp
v2.8j2, 13 June 1999
この文書は、Linux マシンを DHCP サーバや DHCP クライアントにするやり方
について、基本的な質問に答えるものです。
______________________________________________________________________
目次
1. はじめに
1.1 よくある免責条件
1.2 この文書の最新版
1.3 フィードバック
1.4 貢献者
1.5 著作権に関する情報
2. DHCP プロトコル
3. クライアントの設定
3.1 クライアントデーモンのダウンロード
3.2 Slackware
3.3 RedHat 5.x
3.4 RedHat 4.x and Caldera OpenLinux 1.1/1.2
3.5 Debian
3.6 LinuxPPC と MkLinux
3.7 Token Ring のネットワーク
3.8 最終設定
3.9 雑多な注意
3.10 トラブルシュート
3.10.1 ネットワークカードが正しく設定されていない
3.10.2 DHCP サーバが RFC1541 準拠である/DHCP サーバが Windows NT である
3.10.3 ブートアップの最中に "Using DHCP for eth0 ... failed" というメッセージが出るのですが、システムはうまく動いています
3.10.4 数分はちゃんとネットワークが動作するのですが、 そのあと反応しなくなってしまいます
3.10.5 ブートアップのときには Ethernet カードは認識されているのに、 "NO DHCPOFFER" メッセージがログに残ります。 PCMCIA の Ethernet カードなんですけど。
3.10.6 DHCP クライアントはブロードキャストリクエストを 出すんですが、誰も答えてくれないんです (Peter Amstutz から 寄せられました)
3.10.7 全部のステップをちゃんとたどったのに、私のマシンは接続できません
3.10.8 MediaOne Express のサービスを使っているんですが、接続できません
4. DHCP サーバの設定
4.1 UNIX 用の DHCP サーバ
4.2 ネットワークの設定
4.3 DHCPd のオプション
4.4 サーバを起動する
______________________________________________________________________
1. はじめに
1.1. よくある免責条件
No liability for the contents of this documents can be accepted. Use
the concepts, examples and other content at your own risk. As this is
a new edition of this document, there may be errors and inaccuracies,
that may of course be damaging to your system. Proceed with caution,
and although this is highly unlikely, I don't take any responsibility
for that.
Also bear in mind that this is NOT official information. Much content
in this document are assumptions, which appear to work for people. Use
the information at your own risk.
(日本語訳)
この文書の内容に関しては一切無保証です。概念・例・その他全て読者の責任
のもとにご利用ください。現在の版は新しいので、間違いや不正確な部分があ
るかもしれません。それによってあなたのシステムに障害が起きるかもしれま
せん。気をつけて作業してください。あまりそういうことはないとは思います
が、私はそのような障害に対して一切責任を負いません。
また、これはオフィシャルな情報ではないことも心にとめておいてください。
この文書の内容はある意味仮定です (ただし多くの人々の環境で動作してはい
ます)。情報はあなたの責任のもとにご利用ください。
1.2. この文書の最新版
この文書の最新版は定期的に comp.os.linux.answers にポストされます。ま
たこの種の情報を集めている多くの anonymous FTP サイトに置かれていま
す。例えば以下にもあります。
o
さらに、この文章は Linux Documentation Project のページでも見付かるは
ずです。場所は以下です。
o
訳注: 日本語訳は JF Project のページにあります。
o
1.3. フィードバック
この文書に関するフィードバックはもちろん大歓迎です。あなたの協力と情報
提供がなければ、この文書は存続できません。追記・コメント・批判などを
vuksan@veus.hr まで送って下さい。
訳注: 日本語訳に関するコメントは nakano@apm.seikei.ac.jp までお願いし
ます。
1.4. 貢献者
この文書は Paul Makeev によるオリジナル版を修正してできたものです。
以下の方々がこの mini-HOWTO に貢献してくださいました。
o Heiko Schlittermann
o Jonathan Smith
o Dan Khabaza
o Hal Sadofsky
o Henrik Stoerner
o Paul Rossington
訳注: 日本語訳にあたっては、校正をしてくださった武井伸光さんをはじ
め、JF プロジェクトの皆様にお世話になりました。
1.5. 著作権に関する情報
This document is copyrighted (c)1998 Vladimir Vuksan and distributed
under the following terms:
o Linux HOWTO documents may be reproduced and distributed in whole or
in part, in any medium physical or electronic, as long as this
copyright notice is retained on all copies. Commercial
redistribution is allowed and encouraged; however, the author would
like to be notified of any such distributions.
o All translations, derivative works, or aggregate works
incorporating any Linux HOWTO documents must be covered under this
copyright notice. That is, you may not produce a derivative work
from a HOWTO and impose additional restrictions on its
distribution. Exceptions to these rules may be granted under
certain conditions; please contact the Linux HOWTO coordinator at
the address given below.
o If you have questions, please contact the Linux HOWTO coordinator
at linux-howto@sunsite.unc.edu
(日本語訳)
この文書の著作権は (c)1998 Vladimir Vuksan にあります。以下の条件下で
配布できます;
o Linux HOWTO 文書はあらゆる物理的・電子的メディアにその全部または一
部を複製でき、配布できます。ただしその際には、この著作権条項を残し
ておかなければなりません。商用目的の再配布も可能ですし、また奨励さ
れます。しかしそのような再配布においては、著者にお知らせ下さいます
ようお願いします。
o Linux HOWTO 文書を含む翻訳・派生作業・編集作業は、いずれもこの著作
権条項が適用されます。すなわち HOWTO をもとにして作業を行った結果
に、再配布に対する追加条件を加えることはできません。しかし適切な場
合にはこの規則に例外を設けることも可能です。以下のアドレスで Linux
HOWTO の世話人に連絡してください。
o 疑問な点は、 Linux HOWTO の世話人 linux-howto@sunsite.unc.edu まで
ご連絡ください。
訳注: 日本語訳の著作権は (c)1999 Takeo Nakano にあります。再配布の条件
は上記オリジナルに準じるものとします。
2. DHCP プロトコル
DHCP とは Dynamic Host Configuration Protocol のことです。これはホスト
(動作中のクライアント) に与えられるネットワークのパラメータを、サーバ
を利用して動的に制御するために用いられます。 DHCP は BOOTP に対して過
去互換 (backward compatible) です。より詳しい情報は RFC 2131 (以前は
RFC 1531 でした) などを見てください (この文書の最後にあるインターネッ
トリソースの章も見てください)。 DHCP FAQ
も参考になるでしょ
う。
この mini-HOWTO は DHCP 「サーバ」デーモンと DHCP 「クライアント」デー
モンの両方を扱います。多くの人が必要としているのはクライアントデーモン
でしょう。これはワークステーションがリモートサーバからネットワークの情
報を取得するために用いられます。サーバデーモンはシステム管理者がネット
ワークの情報をクライアントに配布するために用いられます。ですから、普通
のユーザが必要としているのは「クライアント」デーモンのはずです。
3. クライアントの設定
3.1. クライアントデーモンのダウンロード
2.0.x kernels
どのディストリビューションを使っている場合でも、 Linux 用の DHCP クラ
イアントデーモンをダウンロードして自前でビルドすることは可能です。パッ
ケージの名前は dhcpcd で、現在のバージョンは 0.70 です。
訳注: 最近は 0.70 の版が置いてあるところはあまりないようです.. 以下に
ある神戸大のサイトから入手すると良いでしょう。
2.1.x kernels
訳注: この節のことは 2.2 系カーネルにも当てはまります。
2.1.x カーネルでは ipv4 ネットワークのパッケージが変更された (いくつか
のフィールドにデフォルトを設定するやり方が変わりました) ので、dhcpcd
は正しく動作しません。ほとんどの人は開発版のカーネルは使わないでしょう
から、これはあまり問題にはならないでしょう。これが問題になる人は、
dhcpcd 1.3.16 を使いましょう。これは Sergei Viznyuk
sergei@phystech.com によって上記の問題を回避するように修正された版で
す。以下にあります。
o
o
翻訳の時点 (1999/6) では、1.3.17pl5 が最新になっています。また 2.2 カ
ーネルの Changes
文書によれば、 ISC 版の DHCP クライアント
も 2.2 カーネルで動作するそうです。
3.2. Slackware
最新版の DHCPcd は metalab のミラーから、あるいは以下からダウンロード
できます。
o
o
o (Primary
site in Japan)
最新版の dhcpcd.tar.gz をダウンロードしましょう。
o 展開します。
tar -zxvf dhcpcd-0.70.tar.gz
o ディレクトリに入って dhcpcd を make します。
cd dhcpcd-0.70
make
o インストールします (以下のコマンドは root で実行する必要があります)
make install
/etc/dhcpc というディレクトリができます。 DHCPcd はここに DHCP 情報を
保存します。 dhcpcd は /usr/sbin にコピーされます。
ブート時に DHCP を利用してシステムの初期化を行うには、以下のように入力
します。
cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD
古いネットワーク初期化スクリプトを rc.inet1.OLD に移動します。ここで新
しい rc.inet1 スクリプトを作成する必要があります。以下のコードで OK で
しょう。
______________________________________________________________________
#!/bin/sh
#
# rc.inet1 This shell script boots up the base INET system.
HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I
#will leave it in anyways
# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.
/usr/sbin/dhcpcd
______________________________________________________________________
保存してコンピュータを再起動しましょう。
終わったら``最終設定''に進みましょう。
3.3. RedHat 5.x
RedHat 5.0+ における DHCPcd の設定はとても簡単です。まず以下のコマンド
でコントロールパネルを起動します。
control-panel
o "Network Configuration" を選びます。
o Interfaces をクリックします。
o Add をクリックします。
o Edit Ethernet/Bus Interface から "Activate interface at boot time
を選び、Interface configuration protocol として DHCP を選びます。
終わったら``最終設定''に進みましょう。
3.4. RedHat 4.x and Caldera OpenLinux 1.1/1.2
DHCPcd は RedHat の標準ディストリビューションに RPM として入っていま
す。ディストリビューション CD-ROM の RPMS ディレクトリにあるでしょう。
以下からダウンロードしてもいいでしょう。
以下のコマンドでインストールしましょう。
rpm -i dhcpcd-0.6-2.i386.rpm
あるいは自分の好きなバージョンを取ってきて、 Slackware の部分で説明し
たやり方でコンパイルしてもかまいません。
以下の情報は nothing nothing@cc.gatech.edu から寄せられました。
静的な IP アドレスと名前を /etc/resolv.conf から取り除きました。しかし
search 行と二つの nameserver 行は残しました (なぜか私の dhcpcd は
/etc/dhcpc/resolv.conf を生成してくれないので、静的な /etc/resolv.conf
を使わなければなりませんでした)。
/etc/sysconfig.network からは HOSTNAME, GATEWAY のエントリを削除しまし
た。その他のエントリ (NETWORKING, DOMAINNAME, GATEWAYDEV) はそのまま残
しました。
/etc/sysconfig/network-scripts/ifcfg-eth0 からは IPADDR, NETMASK,
NETWORK, BROADCAST のエントリを削除しました。 DEVICE と ONBOOT はその
まま残しました。 BOOTPROTO 行は BOOTPROTO=dhcp と変更しました。
ファイルをセーブし、コンピュータをリブートしましょう。
終わったら``最終設定''に進みましょう。
3.5. Debian
DHCPcd の deb パッケージは以下にあります。
あるいは Slackware のように自分でインストールしてもいいでしょう。 deb
パッケージを展開するには以下のコマンドを入力します。
dpkg -i /where/ever/your/debian/packages/are/dhcpd*deb
DHCPcd 用の設定は特に必要ないようです。なぜなら Heiko Schlittermann
heiko@osinf.tu-dresden.de から寄せられた情報によりますと:
dhcpcd パッケージも、他の debian パッケージと同じようにスタートアップ
スクリプトを /etc/init.d/ にインストールしてくれます (こ
こでは /etc/init.d/dhcpcd です)。そしてそれぞれの /etc/rc?.d/ ディレク
トリにリンクを配置します。
したがって /etc/rc?.d/ ディレクトリの内容がブート時に実行されます。
インストールしてからコンピュータを再起動しない場合は、以下のコマンドに
よって手動でデーモンを起動してみてください。
/etc/init.d/dhcpcd start
終わったら``最終設定''に進みましょう。
3.6. LinuxPPC と MkLinux
以下の内容は R. Shapiro によるものです。
Yoichi Hariguchi (播口陽一さん) の dhcpcd 0.65 と 0.70 は MkLinux と
linuxppc kernel 2.1.24 で正しく動作します。ただし以下の点に注意してく
ださい。
o 実行ファイルをソースからビルドしたい場合、あるいはする必要がある場
合には、 ppc linux コンパイラでは 'char' を 'unsigned char' とみな
しているのに対して、 Hariguchi のソースでは 'char' を 'signed char'
としていることに注意してください。ソースからビルドする場合は
Makefile を編集して CFLAGS にオプション "-fsigned-char" を記述する
必要があります。
o 現在の linuxppc (linux-pmac) の安定版は 2.1.24 で、 2.1 パッチ
を必要とします。 MkLinux の
DR2.1, DR3.0 リリースはいずれも 2.0 カーネル (2.0.33) を用いていま
すので、パッチは必要ありません。ただしパッチを当てても害はありませ
ん。 linuxppc cd-rom にある dhcpcd の rpm は 2.1 パッチを当てていな
いので、当の CD に入っている linux では動作しません! でも MkLinux
なら動作します。
o linuxppc 2.1.24 では、 dhcpcd の起動後すぐにルーター関連の警告が出
ます。これは無視してかまいません。
Hariguchi の dhcpcd は最初にサーバに接続してルーティングを設定する
ときに少々時間が (30 秒くらい) かかります。 linuxppc 2.1.24 では、
上に述べた警告がルーティング完了の合図になります。
最近の linuxppc カーネルでは、Hariguchi の dhcpcd はどの版も動作しませ
ん。かわりに Sergei Viznyuk のものを使う必要があります (現在のバージョ
ンは 1.3.9: 上記の URL をみてください)。残念ながら Viznyuk の dhcpcd
は glibc2 用に書かれているのですが、 linuxppc 2.1.1xx は違うのです。し
たがってコンパイルには少々技が必要になります。詳細は私に連絡してくださ
い。一度コンパイルしてしまえば、最近のカーネルでうまく動作します (でも
MkLinux や linuxppc 2.1.24 では動作しません)。
Viznyuk の dhcpcd については、私も v1.3.7 の Viznyuk 版 dhcpcd を使っ
ていますが、最近の linuxppc カーネルでうまく動いています。 2.1.102,
103, 115, 119 ではテスト済みです。これをソースからビルドすることも可能
ですが、私は詳細は知りません。 Viznyuk dhcpcd は 2.1.24 では動きません
が、そのカーネルではパッチを当てた Hariguchi dhcpcd が動作します。
Hariguchi dhcpcd はソースから簡単にビルドできます。
まとめますと、以下のようになります。
______________________________________________________________________
MkLinux: Hariguchi: yes; Viznyuk, no
2.1.24: Hariguchi: yes if patched (easy to build); Viznyuk: no
2.1.102+: Hariguchi: no; Viznyuk: yes (tricky to build)
______________________________________________________________________
Viznyuk dhcpcd は /etc/resolv.conf に直接書き込むことに注意してくださ
い (すでにあったものは rename されます)。したがって /etc/dhcpc からコ
ピーしたりリンクしたりする必要はありません。また Viznyuk dhcpcd は
/usr/sbin ではなく /sbin にインストールされますし、コマンドラインオプ
ションも Hariguchi のものと少し違います。このため ifup に少々修正が必
要かもしれません。
linuxppc 用のコンパイル済み dhcpcd バイナリが必要な方は、
reshapiro@mediaone.net. までメールをください。
また
にはバイナリの RPM を置いてあります。このディレクトリの
dhcpcd-1.3.8-2.ppc.rpm は使わないようにしてください。壊れています。信
頼してよいバージョンは dhcpcd-0.70-0.ppc.rpm (linuxppc 2.1.24 用) と
dhcpcd-1.3.8-3.ppc.rpm (linuxppc 2.1.102 以降用) です。 1.3.9 の rpm
も近いうちに置くつもりです。また 1.3.9 に少々修正を加えて、 0.65 や
0.70 にあった -c コマンドラインオプション (標準の Viznyuk dhcpcd には
含まれていません) を追加したものも手元にはあります。
3.7. Token Ring のネットワーク
dhcpcd は Token Ring ネットワークで用いようとしても動作しません。以下
は Henrik Stoerner henrik_stoerner@olicom.dk から寄せられたコメントで
す。
問題は dhcpcd が Ethernet カードしか扱えないという点にあります。
dhcpcd は Token-Ring のカードを見付けると、それについて何らかの扱いを
することをせず、「インターフェースが Ethernet ではない」と報告してきま
す。
解決策は dhcpcd のソースにシンプルなパッチを当てることです。
に簡単な web ページを用意し
て、パッチと RPM ファイル、コンパイル済みバイナリを置きました。 (訳注:
リンク切れです...)
パッチは dhcpcd のメンテナにも送付しましたので、 dhcpcd の将来のリリー
スでは取り込んでもらえると思います。
3.8. 最終設定
マシンを再起動したら、ネットワークインターフェースは設定されているはず
です。
ifconfig
と入力すれば、以下のような表示が出るでしょう。
______________________________________________________________________
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:302 errors:0 dropped:0 overruns:0 frame:0
TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0
eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45
inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0
^^^^^^^^^^^^^^^^^^^^^^^
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24783 errors:1 dropped:1 overruns:0 frame:1
TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96
Interrupt:10 Base address:0x300
______________________________________________________________________
inet. addr のあとに通常の番号が出ていれば OK です。 0.0.0.0 が出ても
がっかりしないでください、これは dhcpcd が IP アドレスを取得する前の一
時的な状態です。数分経っても 0.0.0.0 のままでしたら、 ``トラブルシュー
ト'' をチェックしてください。 DHCPcd はデーモンですから、マシンの電源
が入っている限り居続けます。 DHCPcd は 3 時間おきに DHCP サーバに接続
し、新たな IP アドレスを貸し出してもらおうとします。メッセージはすべて
syslog に保存されます (Slackware なら /var/adm/syslog,
Redhat/OpenLinux なら /var/log/syslog です)。
最後にもう一つ。ネームサーバを指定しなければなりません。これには二つの
やり方があります。一つはプロバイダに、使ってもかまわないネームサーバの
アドレスを教えてもらい、それを /etc/resolv.conf に書く方法、もう一つは
DHCPcd に DHCP サーバからリストを取得させ、 /etc/dhcpc に resolv.conf
を作成させる方法です。私は DHCPcd の resolv.conf を使うことにしまし
た。やり方は以下です。
古い /etc/resolv.conf をバックアップします。
mv /etc/resolv.conf /etc/resolv.conf.OLD
/etc/dhcpc ディレクトリがなければ作ります。
mkdir /etc/dhcpc
/etc/dhcpc/resolv.conf から /etc/resolv.conf へのリンクを作ります。
ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
上記でうまく行かない場合は以下を試してください (nothing@cc.gatech.edu
の指摘を受けて修正しました。また Henrik Stoerner からも改善提案をいた
だきました)。
この最終ステップを行わなければならなかったのは、私の dhcpcd が
/etc/dhcpc/resolv.conf を作成しなかったからでした。私は
/etc/sysconfig/network-scripts/ifup に以下の修正を行いました (非常に情
けないハックですが、私のところではうまく動いています)。
______________________________________________________________________
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
echo -n "Using DHCP for ${DEVICE}... "
/sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}
echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
^^^^
echo "failed."
exit 1
______________________________________________________________________
これを以下のように変更しました。
______________________________________________________________________
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
echo -n "Using DHCP for ${DEVICE}... "
/sbin/dhcpcd
echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
^^^^^^
echo "failed."
exit 1
______________________________________________________________________
注意すべきは if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; の部分の !
(エクスクラメーション) です。
さあ、では席に戻って楽しみましょう :-)
3.9. 雑多な注意
以下のステップは本来不要ですが、多くの人にとって便利でしょう。
a) ネットワーク接続を時々しか必要としないなら、 dhcpcd をコマンドライ
ンから起動する事もできます (root 権限が必要です)。
/usr/sbin/dhcpcd
ネットワークを切断するときには以下を実行します。
/usr/sbin/dhcpcd -k
3.10. トラブルシュート
これまで述べてきたステップを正しくたどってもネットワークアクセスができ
ない場合には、いくつかの理由が考えられます。
3.10.1. ネットワークカードが正しく設定されていない
ブートアップのプロセスで、 Linux はネットワークカードをプローブして以
下のような行を出力するはずです。
______________________________________________________________________
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10.
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
______________________________________________________________________
このようなメッセージが現れない場合は、あなたの Linux システムでは
Ethernet カードが認識されていません。一般的な Ethernet カード (NE2000
クローンなど) を使っている場合は、カード設定用の DOS ユーティリティの
入ったディスクがあるはずです。 Linux がカードを認識するまで、IRQ を考
慮しましょう (IRQ 9, 10, 12 などなら通常は良いはずです)。
3.10.2. DHCP サーバが RFC1541 準拠である/DHCP サーバが Windows NT で
ある
dhcpcd を以下のように実行してみましょう。
dhcpcd -r
ifconfig を用いてネットワークインターフェースが正しく設定されたか
チェックしてみましょう (設定のプロセスには数秒かかります。最初は
Inet.addr=0.0.0.0 と言ってきます)。
これで解決したら、ブートアップスクリプトにも "-r" フラグを加えましょ
う。つまり /sbin/dhcpcd のかわりに /sbin/dhcpcd -r のようにしましょ
う。
例えば RedHat なら、 /etc/sysconfig/netrowk-scripts/ifup スクリプトを
編集して以下のようにしましょう。
______________________________________________________________________
IFNAME=$[ {DEVICE} \
"/sbin/dhcpcd -r -c /etc/"- etc etc.
______________________________________________________________________
3.10.3. ブートアップの最中に "Using DHCP for eth0 ... failed" という
メッセージが出るのですが、システムはうまく動いています
おそらく RedHat をお使いで、説明を注意深くたどって来ませんでしたね
:-)。 if 文の ! (エクスクラメーション) が抜けているのでしょう。 ``こ
こ''に戻って修正方法をチェックすること。
3.10.4. 数分はちゃんとネットワークが動作するのですが、 そのあと反応し
なくなってしまいます
gated (ゲートウェイデーモン) が Linux マシンのルーティングを壊してしま
い、このような問題を引き起こすことがあるそうです。 gated が起動してい
ないかどうかを
ps -auxww | grep gate
でチェックし、あった場合は RedHat の RPM マネージャで削除するか、
/etc/rc.d/ のエントリを削除しましょう。
3.10.5. ブートアップのときには Ethernet カードは認識されているのに、
"NO DHCPOFFER" メッセージがログに残ります。 PCMCIA の Ethernet カード
なんですけど。
ネットワークカードの 10BaseT ポート (電話プラグみたいなやつです) が使
われる設定になっているかを確認する必要があります。調べるのに一番いい方
法は、カードのどのコネクタが使われるようになっているのかをブートアップ
時に確認することです。すなわち以下。
______________________________________________________________________
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10.
^^^^^^^^^^^^
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
______________________________________________________________________
ラップトップ型のユーザから、このような問題が PCMCIA ユーティリティ (特
に ifport) のせいで生じるという報告をもらっています。これがコネクタの
タイプを 10Base2 (同軸ケーブル) に設定してしまうのです。 10BaseT に
なっていることを確認してください。そうなっていなければカードを再設定し
てコンピュータを再起動してください。
3.10.6. DHCP クライアントはブロードキャストリクエストを 出すんです
が、誰も答えてくれないんです (Peter Amstutz から 寄せられました)
システムによってはリクエストの一部にホストの名前を含めなければならない
場合があります。 dhcpcd でこれを行うには 'dhcpcd -h foohost' としま
す。そのネットワークに対するあなたのアカウント名を指定するのがおそらく
望ましいでしょう。
3.10.7. 全部のステップをちゃんとたどったのに、私のマシンは接続できま
せん
ケーブルモデムは、ネットワークカードの Ethernet アドレスを記憶してしま
うので、新しいコンピュータを接続したりネットワークカードを交換したとき
には何とかしてケーブルモデムに新しいコンピュータとカードを教えてやらな
ければなりません。通常はコンピュータの電源を入れたままモデムの電源を一
度切って入れ直せばいいはずです。だめな場合はテクニカルサポートに電話し
て、コンピュータのネットワークカードを交換した旨を伝えてください。
ファイアウォールのルール (ipfwadm rule) によって、 DHCP が設定情報を流
すポート 67/68 がふさがれているのかもしれません。ファイアウォールのル
ールを注意して調べてください。
3.10.8. MediaOne Express のサービスを使っているんですが、接続できませ
ん
MediaOne は DHCP に付加すべきでない情報を加えてしまっています。おそら
くこれはもう問題ではないのでしょうが、うまく行かない場合はこれらを確認
してみてください。もし幸運 (不運?) にも同じマシンに Windows NT が載っ
ている場合は、イベントビューアを起動すると以下のような警告が出ているは
ずです。
DHCP received an unknown option 067 of length 005. The raw option data
is given below.
0000: 62 61 73 69 63 basic
訳注: 訳者は NT を使っていませんので、日本語版のメッセージはわかりませ
ん(^_^;
これが原因だった場合は に行ってバイナリ
をダウンロードするか、ソースを入手して入れ替えてください。
4. DHCP サーバの設定
4.1. UNIX 用の DHCP サーバ
U*X ライク OS 用の DHCP サーバはいくつか存在します。商用のものもフリー
のものもあります。フリーの DHCP サーバの中でよく使われているものは
Paul Vixie の ISC DHCPd でしょう。現在の最新版は 1.0 (ほとんどのユーザ
はこちらが良いでしょう) ですが、 2.0 もβテストの段階です。これらは
から入手できます。
ダウンロードして展開し、配布ソースのディレクトリに cd して、以下を実行
します。
./configure
設定にはしばらく時間がかかるでしょう。終わったら、
make
続いて
make install
します。
4.2. ネットワークの設定
インストールが終わったら、 ifconfig -a と入力してください。以下のよう
な表示が出るはずです。
______________________________________________________________________
eth0 Link encap:10Mbps Ethernet HWaddr 00:C0:4F:D3:C4:62
inet addr:183.217.19.43 Bcast:183.217.19.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2875542 errors:0 dropped:0 overruns:0
TX packets:218647 errors:0 dropped:0 overruns:0
Interrupt:11 Base address:0x210
______________________________________________________________________
MULTICAST という文字が現れない場合はカーネルを設定しなおして multicast
のサポートを追加する必要があります。ほとんどのシステムではこれは不要で
しょう。
次に行うことは 255.255.255.255 への経路の追加です。 DHCPd の README か
ら引用します。
"dhcpd を細かいことにうるさい DHCP クライアント (Windows 95 のこと) と
正しく動作させるには、dhcpd は destination address が 255.255.255.255
の IP パケットを送ることができるようになっている必要があります。残念な
がら Linux は 255.255.255.255 をローカルなサブネットのブロードキャスト
(ここでは 192.5.5.223) に変換してしまうのです。この結果は DHCP プロト
コルに違反することになります。たいていの DHCP クライアントはこれに気が
つきませんが、気がつくもの (Microsoft の DHCP クライアント全部) もあり
ます。後者の様なクライアントはサーバからの DHCPOFFER メッセージを受信
する事ができないのです。"
次のように入力しましょう。
route add -host 255.255.255.255 dev eth0
もしも
"255.255.255.255: Unknown host"
のようなメッセージが出力された場合は、次の様なエントリを /etc/hosts
ファイルに追加する必要があります。
255.255.255.255 all-ones
追加したら
route add -host all-ones dev eth0
あるいは
route add -net 255.255.255.0 dev eth0
としてください。もちろん eth0 が使おうとしているネットワークデバイス名
です。異なる場合は適宜変更してください。
4.3. DHCPd のオプション
ここで DHCPd を設定しなければなりません。 /etc/dhcpd.conf を作成しま
す。
一番普通なのは IP アドレスをランダムに割り当てることでしょう。これには
以下のような設定を用います。
______________________________________________________________________
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
}
______________________________________________________________________
こうすると DHCP サーバがクライアントに与える IP アドレスは
192.168.1.10-192.168.1.100 または 192.168.1.150-192.168.1.200 の範囲と
なります。特にクライアントからの時間枠の要求がなければ、 600 秒の間 IP
アドレスが貸し出されます。要求があった場合に最大限許される貸し出し時間
は 7200 秒です。またサーバはクライアントに 255.255.255.0 をサブネット
マスクとして用い、 192.168.1.255 をブロードキャストアドレスとして用
い、 192.168.1.254 をゲートウェイとして用い、 192.168.1.1 か
192.168.1.2 を DNS サーバとして用いるように「アドバイス」します。
特定の IP アドレスをクライアントの Ethernet アドレスに応じて割り当てる
こともできます。
______________________________________________________________________
host haagen {
hardware ethernet 08:00:2b:4c:59:23;
fixed-address 192.168.1.222;
}
______________________________________________________________________
このようにすると IP アドレス 192.168.1.222 が Ethernet アドレス
08:00:2b:4c:59:23 を持ったクライアントに割り当てられます。
これらを適当に混ぜる事もできます。つまり特定のクライアントにはスタ
ティックな IP アドレスを与え (サーバなど)、他には動的な IP を与える
(ラップトップユーザなど) ことができます。他にもたくさんのオプションが
あります。 wins サーバのアドレスを与えたり、タイムサーバを教えたり、な
どです。これらが必要な場合は dhcpd.conf のマニュアルページを読んでくだ
さい。
4.4. サーバを起動する
いよいよ DHCP サーバを起動できます。単に以下のように入力するだけです
(あるいはブートアップスクリプトに書きます)。
/usr/sbin/dhcpd
ちゃんと動作しているかどうかを確かめたい場合は、まずデバッグモードをオ
ンにしてサーバをフォアグラウンドで実行してみましょう。以下のようにしま
す。
/usr/sbin/dhcpd -d -f
そしてどれかクライアントを一つブートしてみて、サーバのコンソールを確認
しましょう。たくさんのデバッグメッセージが現れるはずです。