FreeBSD: установка и настройка DHCP сервера

Автор: | 26/02/2012

Для начала, надо найти последнюю версию DHCP сервера.Заходим на и справа, в поле поиска, вводим “dhcp“. Помимо всего прочего, тут нашелся и искомый (смотрите версию, желательно ставить последнюю):

isc-dhcp42-server 4.2.3_2 net on this many watch lists=7 search for ports that depend on this port An older version of this port was marked as vulnerable.
The ISC Dynamic Host Configuration Protocol server
Maintained by: [email protected] search for ports maintained by this maintainer
Port Added: 07 Jul 2011 19:45:39
License: ISCL

Обновим порты:

# portsnap fetch update

Найдем его в портах на сервере и приступим к установке:

# cd /usr/ports/net/isc-dhcp42-server
# make install clean

При конфигурировании уберем CHROOT, если надо – добавим LDAP:

После установки читаем сообщения с подсказками:

****  This port installs the dhcp daemon, but doesn’t invoke dhcpd by default.
If you want to invoke dhcpd at startup, add these lines to /etc/rc.conf:

dhcpd_enable=”YES”                     # dhcpd enabled?
dhcpd_flags=”-q”                       # command option(s)
dhcpd_conf=”/usr/local/etc/dhcpd.conf” # configuration file
dhcpd_ifaces=””                        # ethernet interface(s)
dhcpd_withumask=”022″                  # file creation mask

****  If compiled with paranoia support (the default), the following rc.conf
options are also supported:

dhcpd_chuser_enable=”YES”              # runs w/o privileges?
dhcpd_withuser=”dhcpd”                 # user name to run as
dhcpd_withgroup=”dhcpd”                # group name to run as
dhcpd_chroot_enable=”YES”              # runs chrooted?
dhcpd_devfs_enable=”YES”               # use devfs if available?
dhcpd_rootdir=”/var/db/dhcpd”          # directory to run in
dhcpd_includedir=”<some_dir>”          # directory with config-files to include

Отредактируем файл /etc/rc.conf:


Создадим каталог:

# mkdir /var/db/dhcpd

Назначим пользователя:

# chown dhcpd /var/db/dhcpd

Отредактируйте /usr/local/etc/dhcpd.conf под ваши требования, самая простая конфигурация выглядит так:

# dhcpd.conf
# Sample configuration file for ISC dhcpd
# option definitions common to all supported networks…
option domain-name “setevoy.dcv”;
option domain-name-servers;

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

# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
# 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;

# This is a very basic subnet declaration.

subnet netmask {
option routers;

#fixed address for test
host for_test {
hardware ethernet f0:de:f1:8f:76:1b;

Перезагрузим сервер, и проверим запустился ли dhcpd:

# ps aux | grep dhcpd
root     1332  0.0  0.1  3500  1236   0  S+   12:31AM   0:00.01 grep dhcpd

Не запустился.

Смотрим /var/log/messages:

Feb 26 00:25:45 takashi setevoy: /usr/local/etc/rc.d/isc-dhcpd: ERROR: unable to copy /etc/localtime to /var/db/dhcpd/etc/localtime — not a file or a directory

Такого файла или каталога нет вообще:

# less /etc/localtime
/etc/localtime: No such file or directory
# cd /etc/localtime
bash: cd: /etc/localtime: No such file or directory

ОК, создадим его вручную:

# touch /etc/localtime

И пробуем запустить демон:

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

Starting dhcpd.
Internet Systems Consortium DHCP Server 4.2.3-P2
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit
Warning: subnet overlaps subnet
Wrote 0 class decls to leases file.
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 0 leases to leases file.
Listening on BPF/vr0/00:40:63:ec:73:1a/
Sending on   BPF/vr0/00:40:63:ec:73:1a/
Sending on   Socket/fallback/fallback-net

Запустился, проверим:

# ps aux | grep dhcpd
dhcpd    1435  0.0  0.6  8412  6016  ??  Is   12:33AM   0:00.00 /usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf -lf /var/db/dhcpd/dhcpd.leases -pf /var/
root     1437  0.0  0.1  3500  1236   0  S+   12:33AM   0:00.01 grep dhcpd

Что бы включить логирование, проверьте и при необходимости раскомментируйте в файле конфигурации DHCP /usr/local/etc/dhcpd.conf строку:

log-facility local7;

В файл конфигурации демон syslogd /etc/syslog.conf добавьте:

local7.*                                        /var/log/dhcpd.log

Создайте файл лога:

# touch /var/log/dhcpd.log

Добавьте правило в файл конфигурации ротации логов /etc/newsyslog.conf:

/var/log/dhcpd.log                      600  7     100  @T00  JN

Теперь перезапустите syslogd:

# /etc/rc.d/syslogd restart
Stopping syslogd.
Starting syslogd.

Подключитесь ещё раз dhcp-клиентом и посмотрите логи:

Feb 26 10:03:25 takashi dhcpd: DHCPREQUEST for from f0:de:f1:8f:76:1b (setevoy_laptop) via vr0
Feb 26 10:03:25 takashi dhcpd: DHCPACK on to f0:de:f1:8f:76:1b (setevoy_laptop) via vr0
Feb 26 10:04:36 takashi dhcpd: DHCPINFORM from via vr0: not authoritative for subnet
Feb 26 10:04:40 takashi dhcpd: DHCPINFORM from via vr0: not authoritative for subnet

Статьи по теме: