Linux/Source/DHCP
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
ns-lab
nowsky system-lab
DigiLoog
Linux
Windows
開始行:
*DHCP [#k05403b6]
[[ISC DHCP Server:+https://www.isc.org/downloads/dhcp/]]
フリーのDHCPサーバとして利用される事もあるソフトウェア。
DNSサーバのBINDで有名なISCが開発を行っている。
近年、後継のKEA DHCPに取って代わるとアナウンスされている...
failoverなどの未実装機能が多い為、安定するまではISC DHCP...
~
*インストール [#k1fee22c]
&size(16){&font(b){0. 事前準備};};
ISC DHCPをビルドするには、autoconf 2.65以上が必要になる。
CentOS6でautoconfをデフォルトのまま使っていた場合、この条...
事前に最新版のautoconfを導入しておく。
この時、インストール先ディレクトリによってはPATH優先度の...
既存のautoconfのPATH(/usr/bin)が優先されてしまい、
追加インストールしたautoconfを参照していない状態になるの...
$ tar zxvf autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ ./configure
$ make && make install
$ cd /usr/bin
$ mv autoconf autoconf.yum-org
$ mv autoheader autoheader.yum-org
$ mv autom4te autom4te.yum-org
$ mv autoreconf autoreconf.yum-org
$ mv autoscan autoscan.yum-org
$ mv autoupdate autoupdate.yum-org
$ mv ifnames ifnames.yum-org
$ ln -s /usr/local/bin/autoconf
$ ln -s /usr/local/bin/autoheader
$ ln -s /usr/local/bin/autom4te
$ ln -s /usr/local/bin/autoreconf
$ ln -s /usr/local/bin/autoscan
$ ln -s /usr/local/bin/autoupdate
$ ln -s /usr/local/bin/ifnames
~
----
&size(16){&font(b){1. ソースコード改変};};
GCCのバージョンが8.2.0以上の場合、&font(b){ISC DHCP v4.4....
configureスクリプトの"-Werror"を削除する事でもビルドを通...
ソース改変によって根本的なエラー対策が可能なのでソース改...
discover.c: In function 'discover_interfaces':
discover.c:646:4: error: 'strncpy' output may be truncat...
strncpy(tmp->name, info.name, sizeof(tmp->name) - 1);
cc1: all warnings being treated as errors
make[2]: *** [Makefile:519: discover.o] Error 1
make[2]: Leaving directory '/usr/local/src/dhcp-4.4.1/co...
make[1]: *** [Makefile:582: all-recursive] Error 1
make[1]: Leaving directory '/usr/local/src/dhcp-4.4.1/co...
make: *** [Makefile:462: all-recursive] Error 1
[[参考情報:+https://www.mail-archive.com/blfs-dev@lists.l...
実際には3ファイルのみ修正する簡単な物なので、パッチ適用が...
- discover.c
diff -uprN dhcp-4.4.1/common/discover.c dhcp-4.4.1_gcc/c...
--- dhcp-4.4.1/common/discover.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/common/discover.c 2019-08-14 15:36...
@@ -643,7 +643,7 @@ discover_interfaces(int state) {
log_fatal("Error allocat...
info.name, isc...
}
- strncpy(tmp->name, info.name, si...
+ memcpy(tmp->name, info.name, siz...
interface_snorf(tmp, ir);
interface_dereference(&tmp, MDL);
tmp = interfaces; /* XXX */
- parse.c
diff -uprN dhcp-4.4.1/common/parse.c dhcp-4.4.1_gcc/comm...
--- dhcp-4.4.1/common/parse.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/common/parse.c 2019-08-14 15:33...
@@ -5567,7 +5567,8 @@ int parse_warn (struct parse *cfil...
va_list list;
char lexbuf [256];
char mbuf [1024];
- char fbuf [1024];
+ char fbuf [2048];
+ char final[4096];
unsigned i, lix;
do_percentm (mbuf, fmt);
@@ -5578,7 +5579,7 @@ int parse_warn (struct parse *cfil...
cfile -> tlname, cfile -> lexline, mbu...
va_start (list, fmt);
- vsnprintf (mbuf, sizeof mbuf, fbuf, list);
+ vsnprintf (final, sizeof final, fbuf, list);
va_end (list);
lix = 0;
@@ -5594,14 +5595,14 @@ int parse_warn (struct parse *cf...
lexbuf [lix] = 0;
#ifndef DEBUG
- syslog (LOG_ERR, "%s", mbuf);
+ syslog (LOG_ERR, "%s", final);
syslog (LOG_ERR, "%s", cfile -> token_line);
if (cfile -> lexchar < 81)
syslog (LOG_ERR, "%s^", lexbuf);
#endif
if (log_perror) {
- IGNORE_RET (write (STDERR_FILENO, mbuf, ...
+ IGNORE_RET (write (STDERR_FILENO, final,...
IGNORE_RET (write (STDERR_FILENO, "\n", ...
IGNORE_RET (write (STDERR_FILENO, cfile ...
strlen (cfile -> toke...
- dhcrelay.c
diff -uprN dhcp-4.4.1/relay/dhcrelay.c dhcp-4.4.1_gcc/re...
--- dhcp-4.4.1/relay/dhcrelay.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/relay/dhcrelay.c 2019-08-14 15:37...
@@ -2119,7 +2119,7 @@ void request_v4_interface(const ch...
(flags & INTERFACE_UPSTREAM ? 'Y' : 'N...
(flags & INTERFACE_DOWNSTREAM ? 'Y' : ...
- strncpy(tmp->name, name, len);
+ memcpy(tmp->name, name, len);
interface_snorf(tmp, (INTERFACE_REQUESTED | fla...
interface_dereference(&tmp, MDL);
}
~
----
&size(16){&font(b){2. ビルド・インストール};};
事前にソースコードをダウンロードしておく。
必要に応じてビルドオプションを付与させる必要があるが、
今回は稼働テストなので出来る限り多くのオプションを付与し...
なお、automakeのバージョンが低い場合、ISC DHCPのビルドに...
autoreconfを実行しautomakeの参照先を書き換えておく。
$ tar zxvf dhcp-4.3.4.tar.gz
$ cd dhcp-4.3.4
$ autoreconf -f -i -v
$ ./configure --prefix=/usr/local/dhcp-4.3.4 \
--enable-dependency-tracking \
--enable-maintainer-mode \
--enable-early-chroot \
--enable-failover \
--enable-execute \
--enable-tracing \
--enable-ipv4-pktinfo \
--enable-dhcpv4o6 \
--enable-dhcpv6
$ make
$ make install
$ cd /usr/local
$ ln -s /usr/local/dhcp-4.3.4 dhcp
~
----
&size(16){&font(b){3. 起動オプションの設定};};
DHCPサーバを実行するユーザ・グループの設定や、
DHCP DISCOVERを待ち受けるインターフェースを指定する。
$ vi /etc/sysconfig/dhcpd
--------------------------------------------------
PROG="dhcpd"
USER="dhcpd"
GROUP="dhcpd"
INTERFACE="eth0"
CONFIG="/usr/local/dhcp/etc/dhcpd.conf"
OPTION=""
==================================================
PROG = バイナリ名
USER = 実行ユーザ
GROUP = 実行グループ
INTERFACE = パケット待ち受けインターフェース
CONFIG = 設定ファイルPATH
OPTION = DHCPサーバの追加起動オプション
~
----
&size(16){&font(b){4. 起動スクリプトの作成};};
ソースコードには起動スクリプトが同梱されていないので自作...
今回は従来通りのinitスクリプトで起動を行う。
サービスの実行ユーザ設定などは、上記のsysconfigファイルで...
initスクリプトはプロセスの起動・停止に特化したスクリプト...
$ vi /etc/init.d/dhcpd
--------------------------------------------------
#!/bin/sh
#
# dhcpd This shell script takes care of starti...
# dhcpd (DHCP server).
#
# chkconfig: 345 55 45
# description: dhcpd is a Dynamic Host Configuration Pro...
# probe: true
# Program configuration
. /etc/sysconfig/dhcpd
RUNDIR="/var/run/${PROG}"
PIDFILE="${RUNDIR}/${PROG}.pid"
LEASEFILE="${RUNDIR}/${PROG}.lease"
LOCKFILE="/var/lock/subsys/${PROG}"
EXEC="/usr/local/dhcp/sbin/${PROG}"
# IPv4
ARGS="-user ${USER} -group ${GROUP} -cf ${CONFIG} -pf ${...
# IPv6
#ARGS="-6 -user ${USER} -group ${GROUP} -cf ${CONFIG} -p...
# Make running directory
if [ ! -e ${RUNDIR} ] ;then
mkdir ${RUNDIR}
chown ${USER}.${GROUP} ${RUNDIR}
chmod 750 ${RUNDIR}
fi
# Make lease file
if [ ! -e ${LEASEFILE} ] ;then
touch ${LEASEFILE}
chown ${USER}.${GROUP} ${LEASEFILE}
fi
# Source function library
. /etc/rc.d/init.d/functions
# Source networking configuration
. /etc/sysconfig/network
# Check that networking is up
[ ${NETWORKING} = "no" ] && exit 0
[ -f ${EXEC} ] || exit 0
[ -f ${CONFIG} ] || exit 0
# See how we were called
case "$1" in
start)
# Start daemon
echo -n "Starting ${PROG}: "
if [ -e ${LOCKFILE} ] ;then
echo "${PROG} running"
exit 0
else
daemon ${EXEC} ${ARGS} ${OPTION} ${INTERFACE}
echo
touch ${LOCKFILE}
fi
;;
stop)
# Stop daemon
echo -n "Shutting down ${PROG}: "
killproc -p ${PIDFILE}
rm -f ${LOCKFILE}
echo
;;
restart)
$0 stop
$0 start
exit $?
;;
*)
echo "Usage: ${PROG} {start|stop|restart}"
exit 1
esac
exit 0
~
----
&size(16){&font(b){5. 起動準備};};
実行ユーザの準備やiptablesのポート開放を設定する。
DHCPサーバ宛はUDP:67、DHCPクライアント宛はUDP:68を使う点...
下記の内容は例なので、自環境に合わせてチューニングした上...
・実行ユーザ、グループ作成
==================================================
$ groupadd dhcpd
$ useradd -g dhcpd -d /var/run/dhcpd -s /sbin/nologin dh...
・起動スクリプト登録
==================================================
$ chmod 755 /etc/init.d/dhcpd
$ chkconfig --add dhcpd
$ chkconfig --list dhcpd
--------------------------------------------------
dhcpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
・iptables開放
==================================================
$ iptables -A INPUT -p udp --dport 67 -j ACCEPT
~
*コンフィグ [#neb6187d]
&size(16){&font(b){A. シングル構成・別セグメント待受};};
-[[Man page of dhcpd.conf:+https://linuxjm.osdn.jp/html/d...
-[[dhcpd.conf 覚書:+http://qiita.com/JhonnyBravo/items/e5...
-[[UNIXサーバメモメモ - ISC DHCP設定ファイル:+http://unix...
クライアントセグメントの外にDHCPサーバを設置し、複数セグ...
DHCPサーバ設置セグメントにDHCPでIPアドレスを払い出さない...
サーバ自体が所属するサブネットについて設定を入れないと、...
下記の設定内容では、サーバセグメントにはDHCPで払い出しを...
サーバを起動させる為に、&font(b){何も払い出さない設定};を...
・DHCPサーバ 構成情報
|ネットワーク |10.0.0.0/24 |
|インターフェース|eth0 (1NIC構成)|
・DHCPクライアント IP払出し情報
|ネットワーク |10.10.0.0/24 |
|デフォルトルート|10.10.0.254 |
|IP払い出し範囲 |10.10.0.100~10.10.0.200|
|プライマリDNS |10.0.0.10 |
|セカンダリDNS |10.0.0.20 |
・補足
DHCPクライアントとDHCPサーバが別セグメントになり、DHCP DI...
クライアントのデフォルトルートとなるルータに、[[DHCPリレ...
・設定内容
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim; #DHCPリース要求時の...
ignore client-updates; #DNSサーバエントリ自...
not authoritative; #セグメント設定情報...
log-facility local1; #ログ出力先
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;...
range 10.10.0.100 10.10.0....
default-lease-time 3600;
max-lease-time 86400;
}
}
~
----
&size(16){&font(b){B. 冗長構成・別セグメント待受};};
-[[FreeBSD Man Pages:+https://www.freebsd.org/cgi/man.cgi...
-[[isc-dhcp-serverでdhcpサーバの冗長構成:+http://www.pros...
-[[UNIXサーバメモメモ - DHCPサーバの2重化(failover)の設...
Aの内容でDHCPサーバを冗長構成にした場合の設定サンプル。
DHCPサーバを楽に冗長化する場合、各サーバから払い出すIPア...
今回はDHCPサーバのFailover機能を使って、lease情報の共有を...
・DHCPサーバ 構成情報
| |Primary |Secondary |
|サーバIPアドレス|10.0.0.101 |10.0.10.101 |
|ネットワーク |10.0.0.0/24|10.0.10.0/24|
|インターフェース|>|eth0 (1NIC構成)|
|keep-alive通信 |>|TCP/647 |
・DHCPクライアント IP払出し情報
|ネットワーク |10.10.0.0/24 |
|デフォルトルート|10.10.0.254 |
|IP払い出し範囲 |10.10.0.100~10.10.0.200|
|プライマリDNS |10.0.0.10 |
|セカンダリDNS |10.0.0.20 |
・補足
例の如く、[[DHCPリレー設定:+http://www.cisco.com/cisco/we...
DHCPサーバが冗長化されている場合、両サーバにDHCP DISCOVER...
CISCOルータの場合、1つのインターフェースに複数のリレー先...
1812J-IOSv15でテストした所、設定したリレー先全てにDISCOVE...
今回の冗長化構成では、lease情報を共有しているので複数のDH...
払い出し範囲を分割する事で冗長化している場合、&font(b){も...
・設定内容(Primary)
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility local1;
failover peer "failover" {
primary; #Primaryサー...
address 10.0.0.101; #自サーバIP...
port 647; #自サーバのF...
peer address 10.0.10.101; #ピアサーバ...
peer port 647; #ピアサーバ...
load balance max seconds 3; #ピアがDHCP ...
max-response-delay 30; #ピアとの接...
max-unacked-updates 10; #Failrecover...
mclt 3600; #Primary限定...
split 128; #Primary限定...
}
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.0.10.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;
default-lease-time 3600;
max-lease-time 86400;
pool { ...
failover peer "failover"; ...
range 10.10.0.100 10.10.0....
deny dynamic bootp clients; ...
}
}
}
・設定内容(Secondary)
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
failover peer "failover" {
secondary; #Secondary...
address 10.0.10.101; #自サーバI...
port 647; #自サーバ...
peer address 10.0.0.101; #ピアサー...
peer port 647; #ピアサー...
load balance max seconds 3;
max-response-delay 30;
max-unacked-updates 10;
}
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.0.10.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;
default-lease-time 3600;
max-lease-time 86400;
pool {
failover peer "failover";
range 10.10.0.100 10.10.0....
deny dynamic bootp clients;
}
}
}
~
----
&size(16){&font(b){C. IPv6(RA)・DNSサーバ配布};};
-[[DHCPv6パケット転送時の設定内容:+https://www.alaxala.co...
-[[Radvd and DHCPd6 Server Configuration:+http://sophiedo...
-[[ISC DHCPv6 configuration excerpt:+http://ipv6.web.cern...
IPv6環境用のDHCPv6を構成する為の設定サンプル。
最近はRAによるEUI-64生成が多いが、DNSサーバなどの付加情報...
なお、下記コンフィグではRAによるIPv6アドレス配布を前提と...
dhcpdはオプション無しで起動するとIPv4動作となる為、
DHCPv6用で動かす為に、起動スクリプト内のARGS先頭に&font(b...
・設定内容
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
allow leasequery;
deny bootp;
shared-network "DHCPv6" {
subnet6 2001:aa:bb:cc::/64 {
range6 2001:aa:bb:cc::/...
#range6 2001:aa:bb:cc::0...
option dhcp6.name-servers 2001:aa:bb:cc::a...
option dhcp6.domain-search "local.domain.co...
option dhcp6.info-refresh-time 21600;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
default-lease-time 10800;
preferred-lifetime 10800;
max-lease-time 43200;
}
}
~
----
&size(16){&font(b){D. IPv6(EUI-64)・疑似クラスタ};};
-[[ISC DHCP Users - ipv6 and failover:+http://isc-dhcp-us...
-[[dhcpd.conf:+https://www.isc.org/wp-content/uploads/201...
IPv4はDHCPフェールオーバー(RFC2132)による、DHCPサーバ冗長...
IPv6のDHCPフェールオーバー(RFC8156)は、ISC DHCPに実装され...
フェールオーバーを用いたDHCPv6サーバ冗長化が出来ない。
その為、IPv6環境下でDHCPv6サーバ冗長化を行う場合、アドレ...
バックエンドにデータベースを利用出来るKEA DHCPでフロント...
シンプル構成でDHCPv6サーバを冗長化するには、、ISC DHCPで&...
複数台のサーバを構築してもアドレス衝突が発生しなくなり、...
ただし、通常のソースビルドではEUI-64方式でのアドレッシン...
ヘッダーを書き換えてEUI-64オプションを有効化した後、&colo...
・ヘッダー書換
# vi dhcp-4.4.1/includes/site.h
---
/* Enable EUI-64 Address assignment policy. Instructs t...
* to use EUI-64 addressing instead of dynamic address a...
* for IA_NA pools, if the parameter use-eui-64 is true ...
* pool. Can be at all scopes down to the pool level. ...
* supported by the configure script. */
#define EUI_64
・設定内容
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
allow leasequery;
deny bootp;
persist-eui-64-leases true; #EUI-64で割り当てたIPv6ア...
#アドレスリースファイルに...
shared-network "DHCPv6" {
subnet6 2001:aa:bb:cc::/64 {
use-eui-64 true; ...
range6 2001:aa:bb:cc::/...
option dhcp6.name-servers 2001:aa:bb:cc::a...
option dhcp6.domain-search "local.domain.co...
option dhcp6.info-refresh-time 21600;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
default-lease-time 10800;
preferred-lifetime 10800;
max-lease-time 43200;
}
}
終了行:
*DHCP [#k05403b6]
[[ISC DHCP Server:+https://www.isc.org/downloads/dhcp/]]
フリーのDHCPサーバとして利用される事もあるソフトウェア。
DNSサーバのBINDで有名なISCが開発を行っている。
近年、後継のKEA DHCPに取って代わるとアナウンスされている...
failoverなどの未実装機能が多い為、安定するまではISC DHCP...
~
*インストール [#k1fee22c]
&size(16){&font(b){0. 事前準備};};
ISC DHCPをビルドするには、autoconf 2.65以上が必要になる。
CentOS6でautoconfをデフォルトのまま使っていた場合、この条...
事前に最新版のautoconfを導入しておく。
この時、インストール先ディレクトリによってはPATH優先度の...
既存のautoconfのPATH(/usr/bin)が優先されてしまい、
追加インストールしたautoconfを参照していない状態になるの...
$ tar zxvf autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ ./configure
$ make && make install
$ cd /usr/bin
$ mv autoconf autoconf.yum-org
$ mv autoheader autoheader.yum-org
$ mv autom4te autom4te.yum-org
$ mv autoreconf autoreconf.yum-org
$ mv autoscan autoscan.yum-org
$ mv autoupdate autoupdate.yum-org
$ mv ifnames ifnames.yum-org
$ ln -s /usr/local/bin/autoconf
$ ln -s /usr/local/bin/autoheader
$ ln -s /usr/local/bin/autom4te
$ ln -s /usr/local/bin/autoreconf
$ ln -s /usr/local/bin/autoscan
$ ln -s /usr/local/bin/autoupdate
$ ln -s /usr/local/bin/ifnames
~
----
&size(16){&font(b){1. ソースコード改変};};
GCCのバージョンが8.2.0以上の場合、&font(b){ISC DHCP v4.4....
configureスクリプトの"-Werror"を削除する事でもビルドを通...
ソース改変によって根本的なエラー対策が可能なのでソース改...
discover.c: In function 'discover_interfaces':
discover.c:646:4: error: 'strncpy' output may be truncat...
strncpy(tmp->name, info.name, sizeof(tmp->name) - 1);
cc1: all warnings being treated as errors
make[2]: *** [Makefile:519: discover.o] Error 1
make[2]: Leaving directory '/usr/local/src/dhcp-4.4.1/co...
make[1]: *** [Makefile:582: all-recursive] Error 1
make[1]: Leaving directory '/usr/local/src/dhcp-4.4.1/co...
make: *** [Makefile:462: all-recursive] Error 1
[[参考情報:+https://www.mail-archive.com/blfs-dev@lists.l...
実際には3ファイルのみ修正する簡単な物なので、パッチ適用が...
- discover.c
diff -uprN dhcp-4.4.1/common/discover.c dhcp-4.4.1_gcc/c...
--- dhcp-4.4.1/common/discover.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/common/discover.c 2019-08-14 15:36...
@@ -643,7 +643,7 @@ discover_interfaces(int state) {
log_fatal("Error allocat...
info.name, isc...
}
- strncpy(tmp->name, info.name, si...
+ memcpy(tmp->name, info.name, siz...
interface_snorf(tmp, ir);
interface_dereference(&tmp, MDL);
tmp = interfaces; /* XXX */
- parse.c
diff -uprN dhcp-4.4.1/common/parse.c dhcp-4.4.1_gcc/comm...
--- dhcp-4.4.1/common/parse.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/common/parse.c 2019-08-14 15:33...
@@ -5567,7 +5567,8 @@ int parse_warn (struct parse *cfil...
va_list list;
char lexbuf [256];
char mbuf [1024];
- char fbuf [1024];
+ char fbuf [2048];
+ char final[4096];
unsigned i, lix;
do_percentm (mbuf, fmt);
@@ -5578,7 +5579,7 @@ int parse_warn (struct parse *cfil...
cfile -> tlname, cfile -> lexline, mbu...
va_start (list, fmt);
- vsnprintf (mbuf, sizeof mbuf, fbuf, list);
+ vsnprintf (final, sizeof final, fbuf, list);
va_end (list);
lix = 0;
@@ -5594,14 +5595,14 @@ int parse_warn (struct parse *cf...
lexbuf [lix] = 0;
#ifndef DEBUG
- syslog (LOG_ERR, "%s", mbuf);
+ syslog (LOG_ERR, "%s", final);
syslog (LOG_ERR, "%s", cfile -> token_line);
if (cfile -> lexchar < 81)
syslog (LOG_ERR, "%s^", lexbuf);
#endif
if (log_perror) {
- IGNORE_RET (write (STDERR_FILENO, mbuf, ...
+ IGNORE_RET (write (STDERR_FILENO, final,...
IGNORE_RET (write (STDERR_FILENO, "\n", ...
IGNORE_RET (write (STDERR_FILENO, cfile ...
strlen (cfile -> toke...
- dhcrelay.c
diff -uprN dhcp-4.4.1/relay/dhcrelay.c dhcp-4.4.1_gcc/re...
--- dhcp-4.4.1/relay/dhcrelay.c 2018-02-21 23:30...
+++ dhcp-4.4.1_gcc/relay/dhcrelay.c 2019-08-14 15:37...
@@ -2119,7 +2119,7 @@ void request_v4_interface(const ch...
(flags & INTERFACE_UPSTREAM ? 'Y' : 'N...
(flags & INTERFACE_DOWNSTREAM ? 'Y' : ...
- strncpy(tmp->name, name, len);
+ memcpy(tmp->name, name, len);
interface_snorf(tmp, (INTERFACE_REQUESTED | fla...
interface_dereference(&tmp, MDL);
}
~
----
&size(16){&font(b){2. ビルド・インストール};};
事前にソースコードをダウンロードしておく。
必要に応じてビルドオプションを付与させる必要があるが、
今回は稼働テストなので出来る限り多くのオプションを付与し...
なお、automakeのバージョンが低い場合、ISC DHCPのビルドに...
autoreconfを実行しautomakeの参照先を書き換えておく。
$ tar zxvf dhcp-4.3.4.tar.gz
$ cd dhcp-4.3.4
$ autoreconf -f -i -v
$ ./configure --prefix=/usr/local/dhcp-4.3.4 \
--enable-dependency-tracking \
--enable-maintainer-mode \
--enable-early-chroot \
--enable-failover \
--enable-execute \
--enable-tracing \
--enable-ipv4-pktinfo \
--enable-dhcpv4o6 \
--enable-dhcpv6
$ make
$ make install
$ cd /usr/local
$ ln -s /usr/local/dhcp-4.3.4 dhcp
~
----
&size(16){&font(b){3. 起動オプションの設定};};
DHCPサーバを実行するユーザ・グループの設定や、
DHCP DISCOVERを待ち受けるインターフェースを指定する。
$ vi /etc/sysconfig/dhcpd
--------------------------------------------------
PROG="dhcpd"
USER="dhcpd"
GROUP="dhcpd"
INTERFACE="eth0"
CONFIG="/usr/local/dhcp/etc/dhcpd.conf"
OPTION=""
==================================================
PROG = バイナリ名
USER = 実行ユーザ
GROUP = 実行グループ
INTERFACE = パケット待ち受けインターフェース
CONFIG = 設定ファイルPATH
OPTION = DHCPサーバの追加起動オプション
~
----
&size(16){&font(b){4. 起動スクリプトの作成};};
ソースコードには起動スクリプトが同梱されていないので自作...
今回は従来通りのinitスクリプトで起動を行う。
サービスの実行ユーザ設定などは、上記のsysconfigファイルで...
initスクリプトはプロセスの起動・停止に特化したスクリプト...
$ vi /etc/init.d/dhcpd
--------------------------------------------------
#!/bin/sh
#
# dhcpd This shell script takes care of starti...
# dhcpd (DHCP server).
#
# chkconfig: 345 55 45
# description: dhcpd is a Dynamic Host Configuration Pro...
# probe: true
# Program configuration
. /etc/sysconfig/dhcpd
RUNDIR="/var/run/${PROG}"
PIDFILE="${RUNDIR}/${PROG}.pid"
LEASEFILE="${RUNDIR}/${PROG}.lease"
LOCKFILE="/var/lock/subsys/${PROG}"
EXEC="/usr/local/dhcp/sbin/${PROG}"
# IPv4
ARGS="-user ${USER} -group ${GROUP} -cf ${CONFIG} -pf ${...
# IPv6
#ARGS="-6 -user ${USER} -group ${GROUP} -cf ${CONFIG} -p...
# Make running directory
if [ ! -e ${RUNDIR} ] ;then
mkdir ${RUNDIR}
chown ${USER}.${GROUP} ${RUNDIR}
chmod 750 ${RUNDIR}
fi
# Make lease file
if [ ! -e ${LEASEFILE} ] ;then
touch ${LEASEFILE}
chown ${USER}.${GROUP} ${LEASEFILE}
fi
# Source function library
. /etc/rc.d/init.d/functions
# Source networking configuration
. /etc/sysconfig/network
# Check that networking is up
[ ${NETWORKING} = "no" ] && exit 0
[ -f ${EXEC} ] || exit 0
[ -f ${CONFIG} ] || exit 0
# See how we were called
case "$1" in
start)
# Start daemon
echo -n "Starting ${PROG}: "
if [ -e ${LOCKFILE} ] ;then
echo "${PROG} running"
exit 0
else
daemon ${EXEC} ${ARGS} ${OPTION} ${INTERFACE}
echo
touch ${LOCKFILE}
fi
;;
stop)
# Stop daemon
echo -n "Shutting down ${PROG}: "
killproc -p ${PIDFILE}
rm -f ${LOCKFILE}
echo
;;
restart)
$0 stop
$0 start
exit $?
;;
*)
echo "Usage: ${PROG} {start|stop|restart}"
exit 1
esac
exit 0
~
----
&size(16){&font(b){5. 起動準備};};
実行ユーザの準備やiptablesのポート開放を設定する。
DHCPサーバ宛はUDP:67、DHCPクライアント宛はUDP:68を使う点...
下記の内容は例なので、自環境に合わせてチューニングした上...
・実行ユーザ、グループ作成
==================================================
$ groupadd dhcpd
$ useradd -g dhcpd -d /var/run/dhcpd -s /sbin/nologin dh...
・起動スクリプト登録
==================================================
$ chmod 755 /etc/init.d/dhcpd
$ chkconfig --add dhcpd
$ chkconfig --list dhcpd
--------------------------------------------------
dhcpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
・iptables開放
==================================================
$ iptables -A INPUT -p udp --dport 67 -j ACCEPT
~
*コンフィグ [#neb6187d]
&size(16){&font(b){A. シングル構成・別セグメント待受};};
-[[Man page of dhcpd.conf:+https://linuxjm.osdn.jp/html/d...
-[[dhcpd.conf 覚書:+http://qiita.com/JhonnyBravo/items/e5...
-[[UNIXサーバメモメモ - ISC DHCP設定ファイル:+http://unix...
クライアントセグメントの外にDHCPサーバを設置し、複数セグ...
DHCPサーバ設置セグメントにDHCPでIPアドレスを払い出さない...
サーバ自体が所属するサブネットについて設定を入れないと、...
下記の設定内容では、サーバセグメントにはDHCPで払い出しを...
サーバを起動させる為に、&font(b){何も払い出さない設定};を...
・DHCPサーバ 構成情報
|ネットワーク |10.0.0.0/24 |
|インターフェース|eth0 (1NIC構成)|
・DHCPクライアント IP払出し情報
|ネットワーク |10.10.0.0/24 |
|デフォルトルート|10.10.0.254 |
|IP払い出し範囲 |10.10.0.100~10.10.0.200|
|プライマリDNS |10.0.0.10 |
|セカンダリDNS |10.0.0.20 |
・補足
DHCPクライアントとDHCPサーバが別セグメントになり、DHCP DI...
クライアントのデフォルトルートとなるルータに、[[DHCPリレ...
・設定内容
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim; #DHCPリース要求時の...
ignore client-updates; #DNSサーバエントリ自...
not authoritative; #セグメント設定情報...
log-facility local1; #ログ出力先
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;...
range 10.10.0.100 10.10.0....
default-lease-time 3600;
max-lease-time 86400;
}
}
~
----
&size(16){&font(b){B. 冗長構成・別セグメント待受};};
-[[FreeBSD Man Pages:+https://www.freebsd.org/cgi/man.cgi...
-[[isc-dhcp-serverでdhcpサーバの冗長構成:+http://www.pros...
-[[UNIXサーバメモメモ - DHCPサーバの2重化(failover)の設...
Aの内容でDHCPサーバを冗長構成にした場合の設定サンプル。
DHCPサーバを楽に冗長化する場合、各サーバから払い出すIPア...
今回はDHCPサーバのFailover機能を使って、lease情報の共有を...
・DHCPサーバ 構成情報
| |Primary |Secondary |
|サーバIPアドレス|10.0.0.101 |10.0.10.101 |
|ネットワーク |10.0.0.0/24|10.0.10.0/24|
|インターフェース|>|eth0 (1NIC構成)|
|keep-alive通信 |>|TCP/647 |
・DHCPクライアント IP払出し情報
|ネットワーク |10.10.0.0/24 |
|デフォルトルート|10.10.0.254 |
|IP払い出し範囲 |10.10.0.100~10.10.0.200|
|プライマリDNS |10.0.0.10 |
|セカンダリDNS |10.0.0.20 |
・補足
例の如く、[[DHCPリレー設定:+http://www.cisco.com/cisco/we...
DHCPサーバが冗長化されている場合、両サーバにDHCP DISCOVER...
CISCOルータの場合、1つのインターフェースに複数のリレー先...
1812J-IOSv15でテストした所、設定したリレー先全てにDISCOVE...
今回の冗長化構成では、lease情報を共有しているので複数のDH...
払い出し範囲を分割する事で冗長化している場合、&font(b){も...
・設定内容(Primary)
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility local1;
failover peer "failover" {
primary; #Primaryサー...
address 10.0.0.101; #自サーバIP...
port 647; #自サーバのF...
peer address 10.0.10.101; #ピアサーバ...
peer port 647; #ピアサーバ...
load balance max seconds 3; #ピアがDHCP ...
max-response-delay 30; #ピアとの接...
max-unacked-updates 10; #Failrecover...
mclt 3600; #Primary限定...
split 128; #Primary限定...
}
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.0.10.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;
default-lease-time 3600;
max-lease-time 86400;
pool { ...
failover peer "failover"; ...
range 10.10.0.100 10.10.0....
deny dynamic bootp clients; ...
}
}
}
・設定内容(Secondary)
$ vi /usr/local/dhcp/etc/dhcpd.conf
--------------------------------------------------
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
failover peer "failover" {
secondary; #Secondary...
address 10.0.10.101; #自サーバI...
port 647; #自サーバ...
peer address 10.0.0.101; #ピアサー...
peer port 647; #ピアサー...
load balance max seconds 3;
max-response-delay 30;
max-unacked-updates 10;
}
shared-network "DHCP" {
subnet 10.0.0.0 netmask 255.255.255.0 {
}
subnet 10.0.10.0 netmask 255.255.255.0 {
}
subnet 10.10.0.0 netmask 255.255.255.0 {
option routers 10.10.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.0.255;
option domain-name-servers 10.0.0.10,10.0.0.20;
default-lease-time 3600;
max-lease-time 86400;
pool {
failover peer "failover";
range 10.10.0.100 10.10.0....
deny dynamic bootp clients;
}
}
}
~
----
&size(16){&font(b){C. IPv6(RA)・DNSサーバ配布};};
-[[DHCPv6パケット転送時の設定内容:+https://www.alaxala.co...
-[[Radvd and DHCPd6 Server Configuration:+http://sophiedo...
-[[ISC DHCPv6 configuration excerpt:+http://ipv6.web.cern...
IPv6環境用のDHCPv6を構成する為の設定サンプル。
最近はRAによるEUI-64生成が多いが、DNSサーバなどの付加情報...
なお、下記コンフィグではRAによるIPv6アドレス配布を前提と...
dhcpdはオプション無しで起動するとIPv4動作となる為、
DHCPv6用で動かす為に、起動スクリプト内のARGS先頭に&font(b...
・設定内容
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
allow leasequery;
deny bootp;
shared-network "DHCPv6" {
subnet6 2001:aa:bb:cc::/64 {
range6 2001:aa:bb:cc::/...
#range6 2001:aa:bb:cc::0...
option dhcp6.name-servers 2001:aa:bb:cc::a...
option dhcp6.domain-search "local.domain.co...
option dhcp6.info-refresh-time 21600;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
default-lease-time 10800;
preferred-lifetime 10800;
max-lease-time 43200;
}
}
~
----
&size(16){&font(b){D. IPv6(EUI-64)・疑似クラスタ};};
-[[ISC DHCP Users - ipv6 and failover:+http://isc-dhcp-us...
-[[dhcpd.conf:+https://www.isc.org/wp-content/uploads/201...
IPv4はDHCPフェールオーバー(RFC2132)による、DHCPサーバ冗長...
IPv6のDHCPフェールオーバー(RFC8156)は、ISC DHCPに実装され...
フェールオーバーを用いたDHCPv6サーバ冗長化が出来ない。
その為、IPv6環境下でDHCPv6サーバ冗長化を行う場合、アドレ...
バックエンドにデータベースを利用出来るKEA DHCPでフロント...
シンプル構成でDHCPv6サーバを冗長化するには、、ISC DHCPで&...
複数台のサーバを構築してもアドレス衝突が発生しなくなり、...
ただし、通常のソースビルドではEUI-64方式でのアドレッシン...
ヘッダーを書き換えてEUI-64オプションを有効化した後、&colo...
・ヘッダー書換
# vi dhcp-4.4.1/includes/site.h
---
/* Enable EUI-64 Address assignment policy. Instructs t...
* to use EUI-64 addressing instead of dynamic address a...
* for IA_NA pools, if the parameter use-eui-64 is true ...
* pool. Can be at all scopes down to the pool level. ...
* supported by the configure script. */
#define EUI_64
・設定内容
ddns-update-style interim;
ignore client-updates;
not authoritative;
log-facility daemon;
allow leasequery;
deny bootp;
persist-eui-64-leases true; #EUI-64で割り当てたIPv6ア...
#アドレスリースファイルに...
shared-network "DHCPv6" {
subnet6 2001:aa:bb:cc::/64 {
use-eui-64 true; ...
range6 2001:aa:bb:cc::/...
option dhcp6.name-servers 2001:aa:bb:cc::a...
option dhcp6.domain-search "local.domain.co...
option dhcp6.info-refresh-time 21600;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
default-lease-time 10800;
preferred-lifetime 10800;
max-lease-time 43200;
}
}
ページ名: