DHCP サーバの動作確認テストを行いたい場合、実機の DHCP クライアント機能を使っていては大量の試験を実施するのは難しいです。 そういった場合、dhtest を使うことでダミーの MAC アドレスを使って DHCP サーバの動作を確認することが出来ます。 今回は DHCP サーバを作り、dhtest で動作確認を行う… という流れを試してみます。
DHCP サーバのインストール¶
yum
で標準リポジトリからインストールします。
1 |
|
設定ファイルにサブネットの定義を追加します。 設定ファイルは /etc/dhcp/dhcpd.conf
にあります。 ログは LOCAL4 扱いとしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
DHCP サーバは dhcpd ユーザで動作しますので、このユーザが書き込める所有者/権限でログファイルを作成しておきます。
1 2 |
|
サービスを起動します。 併せて自動起動の設定も実施しておきます。
1 2 |
|
DHCP のログをファイルに出力する為、/etc/rsyslog.conf
へ以下を追記します(※ LOCAL4 は未定義で、今回はじめて設定する前提です)
1 2 |
|
もし、外部の Syslog サーバへログを UDP/514 で送信するのであれば以下のように設定します。
1 2 |
|
TCP/514 で送信するには以下のように設定します(アットマークの数が UDP の場合と異なります)。
1 2 |
|
設定変更を反映する為、rsyslog デーモンを再起動します。
1 |
|
Syslog を受信する側のサーバでも「このサーバからの受信を許可する」設定を実施しておきます。
dhtest のコンパイル¶
DHCP クライアントを模したテストには Linux dhcp client simulation tool で公開されている dhtest
が便利です。 dhtest
は GitHub でソースコードが配布されている為、自分でコンパイルする必要があります。 コンパイルに必要なので gcc
と make
をインストールしておきます。
1 |
|
GitHub から最新のソースコードを取得し、展開してコンパイルします。
1 2 3 4 5 |
|
dhtest の使い方¶
dhtest は以下のように使います。 -i
で DHCP discover を送信するインターフェイスを指定し、-m
で MAC アドレスを指定します。 尚、dhtest を実行すると MAC アドレスと同じファイル名を作成しますので、スクリプトで連続実行すると大量のファイルが出来ることになる為、要注意です。
1 2 3 4 5 6 |
|
詳細ログを表示するには -V
オプションを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
dhtest を使ったサンプルスクリプト¶
dhtest を使って 10 回、DHCP 要求を出すサンプルは以下の通りです。
1 2 3 4 5 6 7 |
|
DHCP で割当てたアドレス状況の確認¶
DHCP サーバで割当てたアドレスは /var/lib/dhcpd/dhcpd.leases
を表示することで確認することが出来ます。
参考¶
デフォルト状態の /etc/dhcp/dhcpd.conf
¶
1 2 3 4 5 |
|
dhtest のヘルプ表示¶
```sh
dhtest --help¶
Usage: dhtest [ options ] -m mac_address -N # always use interface's MAC address in Ethernet frame -r, --release # Releases obtained DHCP IP for corresponding MAC -L, --option51-lease_time [ Lease_time ] # Option 51. Requested lease time in secondes -I, --option50-ip [ IP_address ] # Option 50 IP address on DHCP discover -o, --option60-vci [ VCI_string ] # Vendor Class Idendifier string -h, --option12-hostname [ hostname_string ] # Client hostname string -c, --custom-dhcp-option [ option_format ] # option_format - option_number,type_of_option_value(str|num|hex|ip),option_value -v, --vlan [ vlan_id ] # VLAN ID. Range(1 - 4094) -t, --tos [ TOS_value ] # IP header TOS value -i, --interface [ interface ] # Interface to use. Default eth0 -T, --timeout [ cmd_timeout ] # Command returns within specified timout in seconds -b, --bind-ip # Listens on the obtained IP. Supported protocols - ARP and ICMP -k, --bind-timeout [ timeout ] # Listen timout in seconds. Default 3600 seconds -f, --bcast_flag # Sets broadcast flag on DHCP discover and request -d, --fqdn-domain-name [ fqdn ] # FQDN domain name to use -n, --fqdn-server-not-update # Sets FQDN server not update flag -s, --fqdn-server-update-a # Sets FQDN server update flag -p, --padding # Add padding to packet to be at least 300 bytes -P, --port [ port ] # Use port instead of 67 -g, --giaddr [ giaddr ] # Use giaddr instead of 0.0.0.0 -u, --unicast [ ip ] # Unicast request, IP is optional. If not specified, the interface address will be used. -a, --nagios # Nagios output format. -S, --server [ address ] # Use server address instead of 255.255.255.255 -j, --json # Set the output format to json -D, --decline # Declines obtained DHCP IP for corresponding MAC -V, --verbose # Prints DHCP offer and ack details dhtest version 1.5 ```