FreeBSDでdhcpを立てる- isc-dhcpd。

ルータの静的ルーティング追加したら「dhcp機能Offにしないと動かないお!」言われたので、仕方なくサーバマシンでdhcpを立てる事になった。
以下導入メモがてら、解説をします。

makeしようぜ!

# make /usr/ports/net/isc-dhcp40-server

するとconfig画面が。
今回はHost環境でdhcpを走らせるので、

DHCP_PARANOIA
DHCP_JAIL

だけenableに。
上のオプションは、dhcpユーザを作って、もしdhcpdが乗っ取られた場合でも、影響範囲をdhcpだけにするためのオプション。
下は。。。何だろう。誰か教えてー。

rc.confに追加。

とりあえず、make時に出てくる「これをrc.confに書けやハゲ!」的な内容から、必要なものを書く。
今回は、以下の通り。

dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="em0" # ethernet interface(s)
dhcpd_withuser="dhcpd" # user name to run as
dhcpd_withgroup="dhcpd" # group name to run as

"dhcpd_ifaces=ifaces"は、複数枚NICが刺さっている場合、DHCPをばら撒きたいネットワークに繋がっている方を指定してやって下さい。
きちんと指定してやらないと、酷い目にあいます。きちんとifconfig使って確認しましょう。

dhcpd.confを書く。

rc.confに書いた場所(今回は"/usr/local/etc/dhcpd.conf"に設定ファイルをおきましょう。sampleファイルが"/usr/local/etc/dhcpd.conf.sample"としてあります。

割り当て計画を立てる。

今回、割り当ての計画を

  • 静的に割り当てる範囲(マシン側でip固定): 〜7 #=> ex, jail用
  • 静的に割り当てる範囲(dhcpで配布): 8〜127 #=> ex, メインマシン、Capマシン、その他ネットワーク繋がりっぱなしのマシン用
  • dhcpで動的に配布: 128〜 #=> ex, お客さん用/繋いだり繋がなかったりするマシン用

とします。
以下、この場合における設定例です。

# dhcpd.conf
#

# option definitions common to all supported networks...
option domain-name "home.k-ota.net";
option domain-name-servers 192.168.1.1;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates.
ddns-update-style none;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# dhcp dynamic distribution
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.128 192.168.1.254;
        option routers 192.168.1.1;
        option broadcast-address 192.168.1.255;
        option static-routes 192.168.128.10 192.168.1.2;
}

# dhcp static distribution
host fon {
  hardware ethernet 00:18:XX:XX:XX:XX;
  fixed-address 192.168.1.8;
}
host main {
  hardware ethernet 00:1B:XX:XX:XX:XX;
  fixed-address 192.168.1.9;
}
host sub {
  hardware ethernet 00:E0:XX:XX:XX:XX;
  fixed-address 192.168.1.10;
}

option domain-nameを適当に指定してやり、domain-name-serversにルータ(又はネームサーバ)を指定してやって下さい。
今回ddnsのアップデートは使わないのでddns-update-styleはnoneとしました。
log-facilityはデフォルトで。
そして、これ以降が肝となってきます。

dhcpによる動的なipの配布

設定部分としては以下のようになります。

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.128 192.168.1.191;
        option routers 192.168.1.1;
        option broadcast-address 192.168.1.255;
        option static-routes 192.168.128.10 192.168.1.2;
}
  • rangeで動的に配布する範囲を指定します。
  • options routersでルータを指定します。
  • option broadcast-address でブロードキャストアドレスを指定してやります。
  • option static-routesで、静的ルーティングを指定します。組になっていて、一つ目が宛先アドレス、二つ目がその宛先に対するルータのアドレスとなっています。カンマ区切りで複数指定可能です。
dhcpによる、静的ipの配布
host fon {
  hardware ethernet 00:18:XX:XX:XX:XX;
  fixed-address 192.168.1.8;
}
host main {
  hardware ethernet 00:1B:XX:XX:XX:XX;
  fixed-address 192.168.1.9;
}
host sub {
  hardware ethernet 00:E0:XX:XX:XX:XX;
}

ここでは

してやります。
ちなみに、MACアドレスの調べ方は

してやれば分かります。

以上、設定終了。

dhcpdを立ち上げろ!

/usr/local/etc/rc.d/isc-dhcpd start

これで立ち上がります。

で。

きちんとipが来ているかどうか確かめてやりましょう。

  • windows系OSでのip再取得
    • ipconfig /release <= 今持っているipを放す
    • ipconfig /renew <= ip再取得
  • unix系OSでのip再取得(root要ります)
    • dhclient -r <= 今もっているipを放す
    • dhclient <= ip再取得

参考:(linuxのマニュアルですが、isc-dhcpdの日本語manです)
http://www.linux.or.jp/JM/html/dhcp2/man5/dhcpd.conf.5.html