DHCP mini-HOWTO Vladimir Vuksan vuksan@veus.hr 大森保英 - 日本語翻訳 dasen@icntv.ne.jp Revision History Revision v4.12 October 22, 2000 Revised by: vv この文書は、Linux マシンを DHCP サーバや DHCP クライアントにする方法に ついて、基本的な質問に答えるものです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents 1. はじめに 1.1. よくある免責条件 1.2. この文書の最新版 1.3. フィードバック 1.4. 貢献者 1.5. 著作権に関する情報 2. DHCP プロトコル 3. クライアントの設定 3.1. クライアントデーモン (dhcpcd) のダウンロード 3.2. Slackware 3.3. RedHat 6.x および Mandrake 6.x 3.4. RedHat 5.x 3.5. RedHat 4.x および Caldera OpenLinux 1.1/1.2 3.6. Debian 3.7. LinuxPPC および MkLinux 3.8. 最終設定 3.9. 雑多な注意 3.10. トラブルシューティング 3.11. もう一つの DHCP クライアント (ISC dhclient) 4. DHCP サーバのセットアップ 4.1. UNIX 用の DHCP サーバ 4.2. DHCP サーバの設定 4.3. DHCPd のオプション 4.4. サーバを起動する 4.5. その他の興味深い文書 Appendix A. 日本語訳について 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. この文書の最新版 この文書の最新版は次に掲げるリンクから入手可能です。 http://www.oswg.org/oswg-nightly/DHCP.html DHCP mini-HOWTO の翻訳版は次に掲げるリンクから入手可能です。 ・ 中国語 - http://www.linux.org.tw/CLDP/mini/DHCP.html ・ 日本語 - http://www.linux.or.jp/JF/JFdocs/DHCP/index.html ・ スペイン語 - ftp://cuates.pue.upaep.mx/pub/linux/LuCAS/ DHCP-mini-Como/ この文書の他の言語への翻訳は自由とします。ただこのオリジナル文書へ戻る リンクをその翻訳中に示していただくこと、および翻訳版の URL をお知らせく ださること、をお願いしたいと思います。後者はこの文書に翻訳へのリンクを 追加できるようにするためです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3. フィードバック この文書に関するフィードバックはもちろん大歓迎です。あなたの協力と情報 提供がなければ、この文書は存続できません。追記・コメント・批判などを < vuksan-feedback@veus.hr> まで送ってください。 訳注: 日本語訳に関するコメントはここを読んで送ってください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4. 貢献者 この文書は Paul Makeev によるオリジナル版を修正してできたものです。 訳注: 日本語訳に関しては、中野@成蹊大さんの翻訳を、大森保英が DocBook 版 v4.12 に追従させてできたものです。 以下の方々がこの mini-HOWTO に貢献してくださいました。 ・ Heiko Schlittermann ・ Jonathan Smith ・ Dan Khabaza ・ Hal Sadofsky ・ Henrik Stoerner ・ Paul Rossington ・ numerous others ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5. 著作権に関する情報 This document is copyrighted (c) 1998 Vladimir Vuksan and distributed under the terms of the OpenContent License (OPL). Full text of the license can be found at http://www.opencontent.org/opl.shtml この文書の著作権は (c)1998 Vladimir Vuksan にあり、 the OpenContent License (OPL) に基づいて配布できます。ライセンス文書の全文は、上掲のリ ンクから利用可能です。 訳注: 日本語訳の著作権は (c)1999 Takeo Nakano, (c)2001 Yasuhide OOMORI にあります。再配布の条件は上記オリジナルに準じるものとします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. DHCP プロトコル DHCP とは Dynamic Host Configuration Protocol のことです。これはホス ト (動作中のクライアント) に与えられるネットワークのパラメータを、サー バを利用して動的に制御するために用いられます。 DHCP は BOOTP に対して後 方互換 (backward compatible) です。より詳しい情報は RFC 2131 (以前は RFC 1541 でした) などを見てください。 訳注: RFC の国内ミラーサイトとしては、 ・ ftp://ftp.ring.gr.jp/pub/doc/RFC/rfc2131.txt ・ ftp://ftp.ring.gr.jp/pub/doc/RFC/rfc1541.txt があります。 http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html も参考になるでしょう 。 この mini-HOWTO は DHCP 「サーバ」デーモンと DHCP 「クライアント」デー モンの両方を扱います。多くの人が必要としているのはクライアントデーモン でしょう。これはワークステーションがリモートサーバからネットワークの情 報を取得するために用いられます。サーバデーモンはシステム管理者がネット ワークの情報をクライアントに配布するために用いられます。ですから、普通 のユーザが必要としているのは「クライアント」デーモンのはずです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. クライアントの設定 現在 Linux では、3つの異なる DHCP クライアントプログラムがあります。 dhcpcd, pump と dhclient です。この mini-HOWTO では、主に dhcpcd を取り 扱います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1. クライアントデーモン (dhcpcd) のダウンロード お使いのディストリビューションによっては、 DHCP クライアントデーモンを ダウンロードする必要があるかもしれません。ソースからコンパイルしたいの であれば、必要なパッケージは dhcpcd と呼ばれるもので、現在の最新版は 1.3.18 です。 Sergei Viznyuk がメンテナンスしてお り、今日では多くのディストリビューションでバイナリパッケージが収録され ています。 dhcpcd のソースは次の場所からダウンロードできます。 ・ ftp://ftp.phystech.com/pub/ (Primary site) ・ http://www.cps.msu.edu/~dunham/out/ ダウンロードしたら、以下の指示に従ってください。どちらのリンクからも同 じものが入手可能なはずです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2. Slackware 最新版の DHCPcd は metalab のミラーから、あるいは以下からダウンロードで きます。 ・ ftp://metalab.unc.edu/pub/Linux/system/network/daemons ・ ftp://ftp.phystech.com/pub/ (Primary site) ・ ftp://ftp.kobe-u.ac.jp/pub/PC-UNIX/Linux/network/dhcp/ (Primary site in Japan) 最新版の dhcpcd.tar.gz をダウンロードしましょう。 ・ 展開します。 tar -zxvf dhcpcd-1.3.18pl1.tar.gz ・ ディレクトリに入って dhcpcd を make します。 cd dhcpcd-1.3.18pl1 make ・ インストールします (以下のコマンドは 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 6.x および Mandrake 6.x RedHat 6.0+ における DHCPcd の設定はとても簡単です。まず control-panel コマンドでコントロールパネルを起動します。 ・ "Network Configuration" を選びます。 ・ Click on Interfaces ・ Add をクリックします。 ・ Ethernet を選びます。 ・ Edit Ethernet/Bus Interface から "Activate interface at boot time" を選び、"Interface configuration protocol" として "DHCP" を選 びます。 RedHat 6.x では、上記の dhcpcd ではなく、pump が標準の DHCP クライアン トとして同梱されていることに気をつけてください。CD-ROM には dhcpcd の rpm も含まれているので、pump でうまくいかなかったら dhcpcd で試してみま しょう。dhcpcd を (例えば rpm -i dhcpcd-1.3.17pl2-1.i386.rpm のように) インストールしたら、修正が必要になります。 Alexander Stevenson による追加情報を以下 に示します。 DHCPcd では全くうまくいきませんでした。結局役に立ったのは Mandrake 6.0 同梱の (たぶん RedHat にもあると思う) "pump" でした。私が使った コマンドを以下に示します。 pump -i eth0 -h hostname "hostname" は何でも構いませんでしたが、とにかくこれがないとサーバは 反応を示しませんでした。 それから、/sbin/ifup スクリプトに変更を加え、設定を反映させました。 標準のバージョンでは -h オプションがなかったので、うまく動きません でした。 基本的に、linuxconf を使っているのであれば、アダプタの設定を "DHCP" にしても動かない場合には、 /sbin/ifup のスクリプトの pump の行に " -h hostname" というオプションを追加してみるといいのではないでしょう か。私はスクリプトを次のように修正しました。 ... if [ -n "$PUMP" ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/pump -i $DEVICE -h hostname; then echo " done." else echo " failed." exit 1 fi else ... もう一つの、よりエレガントにホスト名を設定する方法が Aad van der Klaauw から寄せられました。以下に示します。 いま自宅のゲートウェイシステムを設定しているんですが、 MAC アドレス をセットして '-h hostname' を有効にする必要がありました。そのために 、スクリプトを「変更せずに」、設定ファイルを使うことにしました。 / etc/sysconfig/network-scripts/ifcfg-eth0 に、次のような記述を加えま した。 DEVICE="eth0" MACADDR="00:11:22:33:44:55" DHCP_HOSTNAME="trigger_for_terayon" こちらならアップグレードしても設定が残りますし、私の知る限りでは「 見通しの良い」方法です。 これで終わりです。マシンをリブートするか、 /sbin/ifup eth0 をコマンドラ インで実行してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4. RedHat 5.x RedHat 5.0+ における DHCPcd の設定はとても簡単です。まず control-panel コマンドでコントロールパネルを起動します。 ・ "Network Configuration" を選びます。 ・ Click on Interfaces ・ Add をクリックします。 ・ Ethernet を選びます。 ・ Edit Ethernet/Bus Interface から "Activate interface at boot time" を選び、"Interface configuration protocol" として "DHCP" を選 びます。 終わったら最終設定に進みましょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5. RedHat 4.x および Caldera OpenLinux 1.1/1.2 DHCPcd は RedHat の標準ディストリビューションに RPM として入っています 。ディストリビューション CD-ROM の RPMS ディレクトリにあるでしょう。以 下からダウンロードしてもいいでしょう。 ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/ dhcpcd-0.6-2.i386.rpm 次のコマンドでインストールしましょう: rpm -i dhcpcd-0.6-2.i386.rpm あるいは自分の好きなバージョンを取ってきて、Slackware の部分で説明した やり方でコンパイルしてもかまいません。 以下の情報は nothing から寄せられました。 静的な 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.6. Debian DHCPcd の deb パッケージは以下にあります。dhcpcd で始まるものを入手しま しょう。 http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/ あるいは Slackware のように自分でインストールしてもいいでしょう。 deb パッケージを展開するには以下のコマンドを入力します。 dpkg -i /where /ever/your/debian/packages/are/dhcpcd*deb DHCPcd 用の設定は特に必要ないようです。理由を以下に示します。 debian パッケージはだいたいそうですが、dhcpcd パッケー ジもスタートアップスクリプトを /etc/init.d/package_name にインストールし (ここでは /etc/init.d/dhcpcd です)、そ して /etc/rc?.d/ ディレクトリに、必要なリンクを配置して くれます。 --Heiko Schlittermann による。 したがって /etc/rc?.d/ ディレクトリの内容がブート時に実行されます。 インストールしてからコンピュータを再起動しない場合は、次のコマンドによ って手動でデーモンを起動してみてください。 /etc/init.d/dhcpcd start 終わったら最終設定に進みましょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.7. LinuxPPC および MkLinux 以下の内容は R. Shapiro によるものです。 "1999" (R5) リリースで、Linuxppc は、ほぼ完全に RedHat 6 互換となりまし た。ただし一つ警告があります(下を見てください)。それ以外の点については 、 RedHat 6.x および Mandrake 6.x での説明と同じことがあてはまります。 残っている問題は、Redhat 6 が標準の DHCP クライアントとして使っている pump が、Linuxppc では安定して動作しない、というものです。この問題に対 処するには、Sergei Viznyuk のページから最新版の dhcpcd を入手してインス トールし、/sbin/ifup を編集して pump の代わりに dhcpcd を使うようにする 必要があります。 if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then PUMP=true fi if [ -n "$PUMP" ]; then とある部分を、 if [ "$BOOTPROTO" = bootp ]; then echo " done." else echo " failed." exit 1 fi elif [ "$BOOTPROTO" = dhcp ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/dhcpcd -d $DEVICE ; then if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then /etc/dhcpc/dhcpcd-${DEVICE}.exe fi と書き換えてください。ifdown にもこれに対応する修正が必要です。 if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then .... fi とある部分を if [ "$BOOTPROTO" = bootp ]; then fi if [ "$BOOTPROTO" = dhcp ]; then if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then kill `cat /var/run/dhcpcd-${DEVICE}.pid` rm -f /var/run/dhcpcd-${DEVICE}.pid fi fi と書き換えます。 ppc で動く dhcpcd の rpm は Linuxppc 1999 に同梱されています。もう少し 新しい rpm が、 ftp://ftp.linuxppc.org/ の contrib ディレクトリにありま す。Linuxppc 1999 でコンパイルできるソースは ftp://ftp.phystech.com/pub /dhcpcd-1.3.17-pl9.tar.gz から入手可能です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 上記でうまくいかない場合は以下を試してください ( の指摘を受けて修正しました。また 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 Note: 注意すべきは 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/network-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 を使っていませんので、日本語版のメッセージはわかりませ ん(^_^; これが原因だった場合は ftp://vanbuer.ddns.org/pub/ に行ってバイナリをダ ウンロードするか、ソースを入手して入れ替えてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.11. もう一つの DHCP クライアント (ISC dhclient) dhcpcd を使っても Linux で接続を確立できない場合は、 ISC dhclient を試 してみるといいかもしれません。dhclient は、 ISC 由来の DHCP 配布 (クラ イアント・サーバ両方を同梱しています) に含まれます。入手方法やコンパイ ル方法についてはここを読んでください。成功したら、この章に戻ってクライ アントを設定してください。 Note: 次の情報は、dhclient の作者の一人、 Ted Lemon から寄せられました。 DHCP client の現在のバージョンでは、 dhclient.conf は必要ありません。 dhclient を、次のコマンドで起動するだけです。 /sbin/dhclient このコマンドを実行すると、全てのブロードキャストインターフェースが設定 されます。これでうまく動かなかったり、特定のインターフェースだけを使い たいのなら、次のような設定を /etc/dhclient.conf に記述してください。 interface "eth0" { send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx; send dhcp-lease-time 86400; } この例では、イーサネットインターフェースは eth0 を使うものと仮定してい ます。他のものを使うときは、記述もそれに合わせてください。 xx:xx:xx:xx: xx の部分も、お使いのイーサネットアドレスに合わせてください。この dhclient.conf を使うと、Win 95 のクライアントの挙動に近いものになります 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. DHCP サーバのセットアップ 4.1. UNIX 用の DHCP サーバ U*X ライク OS 用の DHCP サーバはいくつか存在します。商用のものもフリー のものもあります。フリーの DHCP サーバの中でよく使われているものは Paul Vixie の ISC DHCPd でしょう。現在の最新版は 2.0 (ほとんどのユーザはこち らが良いでしょう) ですが、 3.0 もβテストの段階です。次に掲げるリンクか ら入手可能です。 ftp://ftp.isc.org/isc/dhcp/ バイナリパッケージが収録されているディストリビューションもあります。そ れを使う場合は、次のセクションは飛ばしてください。 ダウンロードしたら展開します。展開したら、配布ソースのディレクトリに cd して、 ./configure を実行します。 設定にはしばらく時間がかかるでしょう。終わったら、 make と make install を実行します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2. DHCP サーバの設定 インストールが終わったら、 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 255.255.255.0 dev eth0 としてください。もちろん eth0 は使おうとしているネットワークデバイス名 です。異なる場合は適宜変更してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3. DHCPd のオプション ここで DHCPd を設定しなければなりません。 /etc/dhcpd.conf を編集 (なけ れば作成) します。KDE ( http://www.kde.org/ ) には、kcmdhcpd という、 GUI による dhcpd の設定ツールがあります。Windows NT の DHCP コンフィグ レータに極めてよく似ています。 KDE 2.0 がリリースされれば、kcmdhcpd も リリースされるはずです。次に掲げるリンクからも入手できます。 ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/ 訳注: 現時点で KDE-2.0.1 がリリースされていますが、 kdenetwork-2.0.1 に は kcmdhcpd は含まれていません。 直接 DHCPd を設定したければ、以下の指示に従ってください。 たいていの人がやりたいと思うのは IP アドレスをランダムに割り当てること でしょう。これには以下のような設定を用います。 # Sample /etc/dhcpd.conf # (add your comments here) 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 サーバとして用いるように「アドバイス」します。 Windows クライアントに WINS サーバを教えてあげる必要がある場合は、 netbios-name-servers オプションを書く必要があります。具体例を以下に示し ます。 option netbios-name-servers 192.168.1.1; 特定の 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 を与える (ラップトップユー ザなど) ことができます。他にもたくさんのオプションがあります。 nis サー バのアドレスを与えたり、タイムサーバを教えたり、などです。これらが必要 な場合は dhcpd.conf のマニュアルページを読んでください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4. サーバを起動する サーバを起動する前に一つだけやっておかねばならないことがあります。多く の場合、DHCP サーバをインストールしても dhcpd.leases ファイルが作成され ません。このファイルは、現在の IP アドレス貸し出しに関する情報を保存す るためにDHCPd が使うものです。プレインテキストの形式なので、 DHCPd を操 作している間に見ることができます。 dhcpd.leases を作成するには、次のよ うにします。 touch /var/state/dhcp/dhcpd.leases これで空のファイル(ファイルサイズ = 0)が作成されます。 dhcpd 2.0 以前の バージョンの中には、 /etc/dhcpd.leases を使うものがありました。貸し出し 情報ファイルを編集する必要はありません。 DHCPCd が自動的に操作します。 「ファイルが存在します」というようなメッセージを受けたとしても、無視し て次に進んで構いません。 いよいよ DHCP サーバを起動できます。単に以下のように入力するだけです (あるいはブートアップスクリプトに書きます)。 /usr/sbin/dhcpd このコマンドは、DHCP サーバを eth0 デバイスに対して起動します。他のデバ イスで起動したければ、単にそのデバイス名をコマンドラインで渡してくださ い。具体例を以下に示します。 /usr/sbin/dhcpd eth1 ちゃんと動作しているかどうかを確かめたい場合は、まずデバッグモードをオ ンにしてサーバをフォアグラウンドで実行してみましょう。以下のようにしま す。 /usr/sbin/dhcpd -d -f そしてどれかクライアントを一つブートしてみて、サーバのコンソールを確認 しましょう。たくさんのデバッグメッセージが現れるはずです。全てがうまく いっているようなら、完了です :-) dhcpd を終了して -d -f オプション無し で起動しましょう。ブート時に dhcpd を起動したいのであれば、例えば次のフ ァイルに dhcpd を追加するといいでしょう。 /etc/rc.d/rc.local ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5. その他の興味深い文書 Linux Magazine (訳注: 日本のものではありません) の2000年4月号には、非常 によい記事が掲載されています。ネットワークの楽園 (Nirvana):ネットワー クの設定を DHCP 並に簡単にする方法という題名で、DHCP のセットアップにつ いて述べられています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix A. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました.翻訳に関するご意見 は JF プロジェクト 宛に連絡してください. 改訂履歴を以下に示します. v4.12j, Sun Feb 4 2001 翻訳: 大森保英 校正: ☆ 早川仁さん ☆ 中野@成蹊大さん ☆ 川崎貴彦さん ☆ その他の JF メンバーの方々