新・闘わないプログラマ No.310

作業手順覚え書き(4) 〜LinuxでDHCP編〜


忘れた頃に「作業手順覚え書き」シリーズです。これは、基本的には自分向けの覚え書きでして、こんなところで公開するほどの代物でもないのですが、まあここに載せておけば「覚え書き」自体を紛失してしまうこともないだろう、と言うことでして、そんなものを読まされる方もいい迷惑かも知れませんが、気にせずに行ってみましょう。

さて、今回のテーマは「だいなみっくほすとこんふぃぐれーしょんぷろとこる」つまりDHCPです。DHCPとは何ぞや、ということは今更述べるまでも無い(知らない人は各自調べていただく)として、まあ、いわゆるひとつの「るーたを使っていんたーねっと」なるものをしている人の大半がこのDHCPのお世話になっていることと思います。
Windowsで言えば、ネットワーク設定の「インターネットプロトコル(TCP/IP)のプロパティ」で「IPアドレスを自動的に取得する」に設定すると、このDHCPを使って自分が使うIPアドレスをDHCPサーバ(普通の人は、インターネットに接続しているルータがこのDHCPサーバになっているはず)から取ってくることになるわけですね(実際には、IPアドレスだけではなく「サブネットマスク」とか「DHCPサーバのIPアドレス」とか「デフォルトゲートウェイのIPアドレス」とか、そういうものも通知してくれます)。このIPアドレスは、DHCPサーバが、事前に設定されたIPアドレスの範囲から未使用のやつを割り振ってくれることになります。で、通常の使用法では、どのIPアドレスがどの機器(PC等)に割り当てられるかは決まっていませんし、また(いろいろとややこしい理由により)ある日突然、今まで使っていたのとは違うIPアドレスが割り振られてしまうこともあります(それでも「いわゆる、いんたーねっとする」範囲内においては、問題は発生しません)。
余談ですが、先日「HDD内蔵DVDレコーダ」なる製品を買いました。この機械自体、webサーバになっていまして、LAN経由でPCからブラウザを通して、いろいろと操作ができます。この場合、当然このDVDレコーダにもIPアドレスを振る必要があるのですが、デフォルトの設定では「DHCPでIPアドレスを取得」というふうになっていました。サーバの場合、IPアドレスがわからないとそのサーバに接続できないわけでして、どっちかと言うと、DHCPを使わない方がトラブルになりづらいと思うのですが…この製品関連の掲示板を見てたら「うまく繋がらない」「急に繋がらなくなった」という質問が山ほどありましたし。実はこのDVDレコーダは、NetBIOSの(ブロードキャストによる)名前解決もできるようなのでWindowsから接続する場合にはNetBIOS名でも繋ぎに行けるようですが…あの名前解決、いまいち信用ができないところがあったり。
ま、とにかく、「クライアント→DHCPを使用しても可」「サーバ→DHCPは使用しない、固定的にIPアドレスを設定する」というのが普通のやり方でしょう。

さて、前置きが長くなりましたが、家では、いままで基本的にはDHCPは使っていませんでした。「基本的には」というのは、ちょっと一時的に接続したい機器があるとか、知人などが持ち込んだPCを接続したい、という場合のために20個くらいのIPアドレスを用意しておいて、インターネットに接続しているルータ上でDHCPサーバを動かしてはいました。
ただし、家に定常的にある機器については、全部固定的なIPアドレスをその機器に設定していたわけです。どの機器もサーバのように他者から接続するような使い方をする可能性があるからです。で、今まではそれでもよかったのですが、一つだけ問題が出てきました。それは、ノートPCについては、外に持ち出して、そこで無線LANで接続するケースが増えたということです。この場合当然のことながら、IPアドレスは家で使っているものではなくて、その環境にあるDHCPサーバが割り振るIPアドレス等を使わないといけないわけです。ということは、家では固定IPアドレス、外ではDHCP、といちいち切り替えないといけないことになります。これが結構面倒です(切り替えのソフトもあるみたいですけど)し、Windows 2000なのに、なぜか設定変更をすると「再起動しろ」と言ってくることがあります(いつもというわけではなく、どういう場合にそうなるのかは不明)。
というわけで、ノートPCだけでも常時DHCPを使いたい、と思うようになりました。実は、DHCPサーバが割り当てるIPアドレスは、必ずしも「どれになるかわからない」というわけではなくて、「この機器には必ずこのIPアドレス」ということも可能です(この機能の無いDHCPサーバもあるようですが)。この場合、その機器のインターフェースのMACアドレスとIPアドレスの組をDHCPサーバに設定してやればいいのです。ですから、私のような用途、つまり「固定的なIPアドレスをDHCPサーバに割り当ててもらう」ということも当然可能です。調べてみたところ、私が使っているルータにも、この「固定的なIPアドレスをDHCPサーバに割り当てる」機能がありました。それでは、ということで早速その設定をしようとして…またまた問題が発覚しました。

ううむ、「本題に入る」と言いつつ、全然本題に入ってないかも。
家ではいま、Linux上でDNSサーバを稼動させています。プロバイダのDNSサーバを直接使っていないのは、家にある機器の名前解決にもDNSを使いたかったからです。これは昔はhostsファイルでやっていたのですが、1台のPCにOSが複数入っていたりして、その全てを直していくのが面倒になってDNSサーバを立ち上げました。
で、問題なのですが、ルータのDHCPサーバは、このLinuxサーバを「DNSサーバのIPアドレス」として通知するようなことが出来ないのです(必ず自分自身のIPアドレスになる)。まあ、普通の使い方ではそうなるので、それ以外の設定が出来なくても通常問題になることはないわけで、私の使い方が変なだけです。
とにかく、そういう事情で、ルータのDHCPサーバ機能は使えないことが判明しました。「さて、困ったな。どうしようか」と考え「なんだ、DNSサーバが動いているLinux上でDHCPサーバも動かせばいいんじゃん。Linux上で動くDHCPサーバくらいあるよな」。
「もしかしてDHCPサーバが既にインストールされているかも」ということで調べてみたところ…

    $ rpm -qa | grep dhcp
    dhcp-2.0pl5-6vl1
    dhcpcd-1.3.21pl2-2vl1

「dhcp-〜」というのがDHCPサーバのパッケージ、「dhcpcd-〜」というのがDHCPクライアント(今回は関係ない)のパッケージのようで、DHCPサーバ自体は既にインストール済みでした。
あとはこれの設定をして「dhcpd」を起動させればいい、ということで「DHCP mini-HOWTO」を参考に「/etc/dhcpd.conf」を作成しました。

    default-lease-time 86400;
    max-lease-time 864000;
    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;
    option domain-name "home";

    subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.201 192.168.1.220;
    }

    host cfr1 {
        hardware ethernet XX:XX:XX:XX:XX:XX;
        fixed-address 192.168.1.31;
    }

ここで、「subnet」で始まる行から3行が、クライアントに与えるIPアドレスを指示する部分で、この例で言えば「192.168.1.201 〜 192.168.1.220」の20個を用意しています。それから「host」で始まる行からの4行が「特定のMACアドレスに対して特定のIPアドレスを割り当てる」記述です(「cfr1」はホスト名です)。「hardware ethernet」の後ろに書いたMACアドレス(ここでは伏字にしています…ここを伏字にしなければいけないほどの意味があるのかどうかはわかりませんが、一応)に対して「192.168.1.31」というIPアドレスを割り当てています。
こうやっておいて、httpdを起動して(そうそう、ルータのDHCPサーバ機能を事前に止めておく事も忘れずに)、クライアントであるノートPCのネットワーク設定を変更して「IPアドレスを自動的に取得する」にすると…

    C:\>ipconfig /all

    Windows 2000 IP Configuration

            Host Name . . . . . . . . . . . . : cfr1
            Primary DNS Suffix  . . . . . . . :
            Node Type . . . . . . . . . . . . : Broadcast
            IP Routing Enabled. . . . . . . . : No
            WINS Proxy Enabled. . . . . . . . : No
            DNS Suffix Search List. . . . . . : home

    Ethernet adapter 無線LAN:

            Connection-specific DNS Suffix  . : home
            Description . . . . . . . . . . . : Wireless Embedded Card Model 0504
            Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX
            DHCP Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            IP Address. . . . . . . . . . . . : 192.168.1.31
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . : 192.168.1.254
            DHCP Server . . . . . . . . . . . : 192.168.1.1
            DNS Servers . . . . . . . . . . . : 192.168.1.1
            Lease Obtained. . . . . . . . . . : 2003年12月6日 20:43:41
            Lease Expires . . . . . . . . . . : 2003年12月7日 20:43:41

と言う感じで、めでたくDHCPから情報を取得することができました。

実はこの「作業手順覚え書き」シリーズ、それなりに参照されているようで、と言うか、私のサイトで唯一実用性が無いわけでも無いものだったりするわけでして…と言いつつ、今回の話は、ちょっと他を見ればすぐに判るようなものだったりして…まあいいや、せっかく書いたんだから載せておこうっと。


2003.12.15 追記
「Windows 2000なのに、なぜか設定変更をすると『再起動しろ』と言ってくることがあります(いつもというわけではなく、どういう場合にそうなるのかは不明)」と書きましたが、これについて情報を頂きました。LANに接続されている場合にIPアドレスの変更を行うと「再起動しろ」とは言われず、接続されていない状態で変更すると再起動を要求される事が多いそうです。私の経験上も、そう言われてみればそんな気もします。情報ありがとうございました。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp