dhcp サーバで遊ぼう

Let's play with dhcp server, by SHIBATA Akira
作成 2006/11/30

はじめに

この記述をお読みのあなたはどうやってココへたどり着いたのだろう? dhcp サーバについて知りたい? それとも DNS サーバのヘンタイ的設定について? あるいはクラッキングの技術を探していたら偶然見つけたかもしれない。 ここでは小さな会社や小規模事業所のネットワーク管理者が、一台のサーバをおいておくことで、楽にかつそれなりに管理できるようにすることを考えてみる。 PC の台数は特に制限無くかつ将来の拡張のポイントを記述してみたいと思う。

事務所には何台の PC があるのだ?

 さて、あなたの事務所というか管理している範囲には何台の PC があるだろうか? また、ネットワーク構成はどのようにしているだろうか? PC の台数が少ないうちは紙とか表計算ソフトにどの IP アドレスを振っているとか、そういうことができるだろう。 しかし紙ならともかく、表計算ソフトに打ち込んでいる IP アドレスはあなたの同僚はいじれるのだろうか? あるいは写し間違いはないのだろうか? もっというと、以前使われていた IP アドレスは今も使われているのだろうか? 最初は使えないと困るから連絡をするようにしておけばちゃんと連絡をくれるだろうから登録はそこそこにうまくいくだろう。 しかし今も使われているかはわからないし、使ってないと判断して勝手にその IP アドレスを使ってみたら、 IP アドレスがダブったりするかもしれない。 固定 IP アドレスは仕組みとしては簡単だが上記にあげたようなことあたりが困るだろう。

じゃぁ、どうするか? 今回の目論見は「 IP アドレスの管理を機械に任せてしまおう」ということだ。 IP アドレスを機械に自動配布させればこっちは特に何をするでもなく、重複もない。 長いこと電源を入れていなかった PC に久しぶりに電源を入れてもそのときに新たにアドレスが振られれば IP アドレスが重複することもなくネットワーク的には破綻しない。 いいことばかりだ。

しかし、そこらの HUB にプチっと Ethernet ケーブルを挿して、すぐ使えるということは別の危険性をはらんでいる。 それはあなたの知らないところで勝手にネットワークを使われたり、外から来た誰かがネットワークに乱入して何かするかもしれない。 ヤバいっ!そう思ってくれるとこれからの書きようにも力が入るってもんだ。

でも、上のヤバい状態って今と同じではないのか?(笑) …まぁ今はなし崩し的にそうなってるのであって望んでそうしたわけじゃないから、これからガンバればいいのだ。 さぁはじめよう。

DHCP について

IP アドレスを自動的に振ってくれたり、 DNS サーバの情報を教えてやったり、そういったことを自動的にやってくれるモノが dhcp サーバだ。 dhcp とは Dynamic Host Configuration Protocol の略で、動的にネットワーク上のホスト(ココでは PC が対象)に必要な情報を提供するプロトコルである。 だから、 dhcp サーバから、 IP アドレスや、 DNS サーバの IP アドレス、標準のルータの IP アドレス(これを多くはデフォルトゲートウェイと呼ぶ)などを自動で配ってやれば、きっとネットワーク管理者であるあなたはかなり楽になるだろう。

反面、あなたが何かしてやらないと「ユーザが勝手にネットワーク上に出現させたコンピュータは自動的に適正な情報をもらってネットワークで活動ができてしまう」ということが発生する。ソレをどうするか? それも問題だ。

また注意事項としては他に dhcp サーバが動いていたらそれを停めておこう。 今回建てる dhcp サーバ以外の dhpc サーバからの情報をもらうとコントロールできないからだ。

プラン

ということでこんな感じにするとよいだろうと考えた。

  1. DHCP を使う、それは自動化と IP アドレスの重複を避けたいからだ
  2. でも勝手につなげないようにしたい
  3. 最初につながるにはヘンなところにつなげて連絡するように促す
  4. 技術的にはデフォルトゲートウェイを自分へ向けて全てのトラフィックがこちらにくるようにする
  5. web ペイジで連絡するように促すようにするために「うそつき DNS サーバ」にする

想定ネットワークは、状況を簡単にするために、下図のようにルータと dhcp サーバとクライアント PC 群(今回は一台のみをテストに使う)ということで、クライアント PC は WindowsXP を想定クライアントにする。

ネットワーク図

ユーザの行動としては、「 (1) PC と HUB の空いているポートとを Ethernet ケーブルでそれぞれプチっとさして、(2) PC の電源を入れ、(3) web を見る」ということを想定している。 そのときに登録済みなら web を普通に使えることとし、未登録なら登録を促す画面を出すようにする。

そのために必要なのはサービスソフトとして今回は下記を挙げる。

これらを設定して、どこの web サイトを見ても登録を促す画面を表示できるようにし、登録設定したら普通に使えるようになるということにしよう。 どこの「 web サイトを見ても」というのは URL がまったく不明だが、とにかくこのサーバにアクセスしてくるように DNS サーバにウソをつかせる。 そうすると、アクセスされてもそんなファイルはないわけだから HTTP ステータス 404 なわけで、その画面を「登録してくれ」画面にすればいいわけだ、すばらしい考えだな(笑)

構築の実際

例によって、筆者は Debian GNU/Linux Sarge(以下 Sarge とする) で構築する。 よって、インストール作業はルート権限で、「 apt-get install dhcp3-server apache2 bind9 」とするだけで終わり。

dhcp サーバの設定

Sarge では dhcp サーバの設定ファイルは /etc/dhcp3/dhcpd.conf だ。 下のように編集しよう。 特に解説していないところは、まぁそんなモンということで詳しく知りたい場合は自分で調べてくれ ;^> 設定の下に解説をつける。

□ /etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name-servers 192.168.1.7; ……………… (1)
option routers 192.168.1.7; ……………………………… (2)
option broadcast-address 192.168.1.255;
option domain-name "intra.example.jp";………………… (3)
default-lease-time 600; …………………………………… (4)
max-lease-time 7200;
authoritative;
log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 { …………… (5)
 range 192.168.1.101 192.168.1.119 ; …………………… (6)
}

host pc-help {
        hardware ethernet 12:34:56:78:90:ab ; ………… (7)
        option domain-name-servers 192.168.10.3 ; …… (8)
        option routers 192.168.1.3 ;……………………… (9)
        }
(1)自分自身が「うそつき DNS サーバ」になるので自分自身のアドレスを指定する。あとで設定する
(2)また全てのトラフィックを受けるために自分自身を指定する
(3)まぁ好きなのを付けてくれ
(4)この辺も好きな時間(単位は秒)を書いて欲しい
(5)使うネットワークとサブネットマスクを指定するのだ。使うネットワークにあわせて変更してくれ
(6)dhcp から割り振るアドレスを決める。ここでは 19 台分確保している。当然ながら固定アドレスで使う装置(大抵サーバ)以外のアドレス指定だ
(7)この MAC アドレスに合致した場合はデフォルトの@〜Cあたりの設定を変えられることができる
(8)特別に設定した MAC アドレスに合致の場合(すなわち登録がある)は正しい DNS サーバを教えてもらえる。ブロードバンドルータのアドレスとかプロバイダで指定してくるアドレスだ
(9)またデフォルトゲートウェイが dhcp サーバに向いていたものをルータ経由のインターネット向けにすることが可能

この(1)〜(6)が登録されていない PC で有効になるもので、登録されたものは(5)〜(9)が有効になる。 つまり(5)(6)は登録してもしなくても有効なので IP アドレスの重複がなくなるハズなのだ。

設定が書けたら dhcp サーバを再起動するため管理者権限で「 /etc/init.d/dhcp3-server restart 」としよう。

□ dhcp サーバの再起動
$ sudo /etc/init.d/dhcp3-server restart
Stopping DHCP server: dhcpd3.
Starting DHCP server: dhcpd3.

dhcp サーバが希望通りに動いているかみてみよう

dhcp サーバが動いている状態で、PC を再起動するか、Windows Xp のコマンドプロンプトで ipconfig /release とうち、続けて ipconfig /renew と打つことでもよい。 Windows Xp のコマンドプロンプトで ipconfig /all と打つと下図のようになる。

□ ipconfig /all の結果
Ethernet adapter ローカル エリア接続:
        Connection-specific DNS Suffix  . : intra.example.jp
        Description . . . . . . . . . . . : Broadcom NetXtreme Gigabit Ethernet
        Physical Address. . . . . . . . . : 00-0B-5D-D3-BA-F4 ………………………… (1)
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 192.168.1.119 ……………………………… (2)
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.7 ………………………………… (3)
        DHCP Server . . . . . . . . . . . : 192.168.1.7 ………………………………… (4)
        DNS Servers . . . . . . . . . . . : 192.168.1.7 ………………………………… (5)
        Lease Obtained. . . . . . . . . . : 2006年11月30日 16:28:54
        Lease Expires . . . . . . . . . . : 2006年11月30日 16:38:54
(1)これがこの PC のネットワークアダプタの MAC アドレスだ。上記の dhcpd.conf には未登録だ
(2)現時点で割り当てられている IP アドレスで、 dhcp サーバとりあえず重複なく割り当てているハズ
(3)すぺてのパケットを受けるために登録してないときの option routers の指定が有効になっている
(4)今いじっている dhcp サーバの IP アドレスのはずだ
(5)DNS サーバも兼ねている

DNS サーバの設定

次に BIND の設定だ。 この設定がうそつき DNS サーバにする設定で、どのアドレスを調べにきても結果に特定の IP アドレスしか返さないようにする。 Sarge では dhcp サーバの設定ファイル群は /etc/bind ディレクトリの下にある。 設定ファイルは下のように設定する

□ /etc/bind/named.conf
zone "." {
        type master;
        file "/etc/bind/db.root" ; };
zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.rev" ; };
□ /etc/bind/db.root
$TTL 3600
.       IN      SOA     default-ns.example.  hostmaster.example. (
                        2006112903      1h 15m 30d 1h )
        IN      NS      default-ns.example.
default-ns.     IN      A       192.168.1.7
*.              IN      A       192.168.1.7
□ /etc/bind/db.rev
$TTL 3600
@       IN      SOA     default-ns.example.  hostmaster.example. (
                        2006112903      1h 15m 30d 1h )
        IN      NS      default-ns.example.
7       IN      PTR     default-ns.example.

設定が書けたら DNS サーバを再起動するため管理者権限で「 /etc/init.d/bind9 restart 」としよう。

DNS サーバが希望通りに動作しているかみてみよう

Windows Xp のコマンドプロンプトと出していろんなサーバの IP アドレスを検索するために nslookup HOSTNAME と下図のように打つとサーバのドメイン名が(ナンカ妙だが、笑)名前解決がなされる。 それぞれ説明すると

(1)グーグルの web サーバの名前解決コマンドを打ってみる
(2)名前解決のための DNS サーバはもちろん dhcp サーバが指定した 192.168.1.7 だ
(3)返ってきた答えは 192.168.1.7 だ
(4)ヤフーの web サーバの名前解決コマンドを打ってみる
(5)返ってきた答えは 192.168.1.7 だ
C:\>nslookup www.google.co.jp ………………… (1)
Server:  default-ns.example
Address:  192.168.1.7 …………………………… (2)

Name:    www.google.co.jp.intra.example.jp
Address:  192.168.1.7 …………………………… (3)

C:\>nslookup www.yahoo.co.jp…………………… (4)
Server:  default-ns.example
Address:  192.168.1.7

Name:    www.yahoo.co.jp.intra.example.jp 
Address:  192.168.1.7 …………………………… (5)

web サーバの設定

仕上げは Apacheの設定だ。 Sarge では Apache の設定ファイル群は /etc/apache2 ディレクトリの下にある。 設定ファイルは下のように設定する。 また、登録を促すファイルを /home/www-data/public_html/index.html として作成しよう

□ /etc/apache2/apache2.conf の 404 の指定で、下のように記述する。 
ErrorDocument 404 /
□ /etc/apache2/sites-enabled/000-default として登録を促す表示ファイルを /home/www-data/public_html/index.html とする。 
NameVirtualHost *

        ServerAdmin webmaster@localhost
        DocumentRoot /home/www-data/public_html
        
                Options FollowSymLinks
                AllowOverride None
        
        
                Options Indexes FollowSymLinks MultiViews ExecCGI
                AllowOverride None
                Order allow,deny
                allow from all
        

□ /home/www-data/public_html/index.html の例
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>
   未登録警告画面
  </title>
 </head>
 <body>
  <h1>未登録警告画面</h1>
  <p>
   いまお使いのこの画面を表示しているパソコンは登録されていませんので、登録手続きをしてください。
  </p>
  <p>
   登録には下の情報を柴田へメールで送ってください。
  </p>
  <ul>
   <li>PC の MAC アドレス</li>
   <li>あなたのメールアドレス</li>
  </ul>
 </body>
</html>

設定が書けたら DNS サーバを再起動するため管理者権限で「 /etc/init.d/apache2 restart 」としよう。 確認にはクライアント PC 上でブラウザを起動して適当な URL (図の例では http://www.google.co.jp/ ) にアクセスしてみればよい。 どうだろう?出てきたカナ?

未登録画面図

IP アドレス直打ちに弱いことに対する対策

基本的にはコレだけでいいハズだが、ブラウザのアドレス欄に 192.168.100.1 とかそういうやり方をする可能性がないわけじゃない。 そういうのに対しては、ポート 80 へのアクセスを全て自分のところにリダイレクトするという方法が良いだろう。 特権モードで「 /sbin/iptables -t nat -A PREROUTING -p tcp -d ! 192.168.1.7 -j REDIRECT --to-ports 80 」と打つとさらによいだろう

登録の実際

クライアント PC の MAC アドレス(コマンドプロンプトで ipconfig /all と打ってでてきた Physical Address の行)を下の「(1)新しく書き足した」部分のように書き足せば、それで使えるようになるハズだ。(注:三点リーダ「…」は見やすくするためにあるだけなので、入力しちゃダメよ) 「(1)新しく書き足した」部分を一行目から簡単に解説すると
一行目、ホスト名記述 host は必須、次の文字列はテキトーで、中カッコ { が必須
二行目、該当の MAC アドレス(例に使ったもの Windows XP の PC)をコロン : で区切って記述
三行目、DNS サーバを指定、この例はブロードバンドルータがプロバイダの DNS サーバの情報を中継してくれる
四行目、デフォルトゲートウェイの指定で、ブロードバンドルータを指定した
五行目、ブロードキャストアドレスの指定
六行目、この host pc-help2 についての記述を終わることをしめす、閉じ中カッコ } を置いてこの分終わり

□ /etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name-servers 192.168.1.7;
option routers 192.168.1.7;
option broadcast-address 192.168.1.255;
option domain-name "intra.example.jp";

default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
 range 192.168.1.101 192.168.1.119 ;
}

host pc-help2 { ………………………………………………………………
        hardware ethernet 00:0b:5d:d3:ba:f4 ;       ↑
        option domain-name-servers 192.168.1.1 ;   (1)新しく書き足した
        option routers 192.168.1.1 ;               |
        option broadcast-address 192.168.1.255 ;    ↓
        } ………………………………………………………………………
host pc-suzuki {  ……………………………………………………………
        hardware ethernet 00:09:6b:82:a3:06 ;       ↑
        option domain-name-servers 172.16.241.10 ; (2)新しく書き足した
        option routers 192.168.1.3 ;               |
        option broadcast-address 192.168.1.255 ;    ↓
        } ………………………………………………………………………
host pc-help {  ………………………………………………………………
        hardware ethernet 12:34:56:78:90:12 ;       ↑
        option domain-name-servers 192.168.10.3 ;  (3)もともとあった
        option routers 192.168.1.3 ;               |
        option broadcast-address 192.168.1.255 ;    ↓
        } ………………………………………………………………………

確認

や、普通に web が見えればちゃんと登録できてるってことでヨロシク(笑)

まとめ

課題としては下のものが挙げられよう

最後に

この仕組みによって、勝手に PC をつながれて使われることは減るだろう。 しかし課題は依然として残るが、ある程度は掌握しつつ PC のネットワーク利用をコントロールできるようになる。 今回はほんの素材なので、いろいろな応用を試してみて欲しい


Memorandum about Linux and Network | ほかのジャンルを見てみる | サイトマップ

免責

beacon

当方(SHIBATA Akira)は, 本サイトをご利用の際に起きるかもしれない不利益に対し, 一切責任を負いません.