CentOS7でDHCPサーバの構築&クライアントからの接続を試してみる

#はじめに
CentOS7で2つのサーバを用意し、DHCPサーバ・クライアントとして動作させてみます。

- testvm1: DHCPサーバ
    - eth1 192.168.99.1/24
    - eth2 192.168.100.1/24
- testvm2: DHCPクライアント
    - eth1 192.168.99.2/24
    - eth2 192.168.100.2/24　←このeth2をDHCPでIPアドレス取得するように変更します


#DHCPサーバの設定・起動
1. dhcpパッケージのインストール

    ```
[root@testvm1 ~]# yum install -y dhcp
    ```
1. dhcpd.confの編集

    ```
[root@testvm1 ~]# cat /etc/dhcp/dhcpd.conf
ddns-update-style  none;         Dynamic DNSのON/OFF
default-lease-time 28800;        割り当てIPアドレスの有効期間
max-lease-time     86400;        割り当てる最大有効期間

    subnet 192.168.100.0 netmask 255.255.255.0 {    サブネット192.168.100.0/24に関する設定
        authoritative;                              異なるサブネットのIPアドレスを要求してきたときの動作（DHCP-NAKを返すか、無視するか）
        range 192.168.100.101 192.168.100.199;      割り当てるIPアドレス範囲 
        option subnet-mask    255.255.255.0;        配布するサブネット情報
        option routers        192.168.100.254;　    配布するデフォルトゲートウェイ情報
        option domain-name-servers 192.168.100.1;   配布するDNSサーバ情報
        option domain-name    "test.com";           配布するドメイン名情報
}
    ```

1. dhcpdの起動

    ```
[root@testvm1 ~]# systemctl start dhcpd
    ```

    起動すると`/var/log/messages`に以下のようなメッセージが出力される

    ```
eth2(192.168.100.1/24)でリッスンされる
Jan 13 01:48:49 testvm1 dhcpd: Listening on LPF/eth2/08:00:27:43:9b:ce/192.168.100.0/24
Jan 13 01:48:49 testvm1 dhcpd: Sending on   LPF/eth2/08:00:27:43:9b:ce/192.168.100.0/24
Jan 13 01:48:49 testvm1 dhcpd:

    eth1(192.168.99.1/24)は設定していないため以下のように出力される
Jan 13 01:48:49 testvm1 dhcpd: No subnet declaration for eth1 (192.168.99.1).
Jan 13 01:48:49 testvm1 dhcpd: ** Ignoring requests on eth1.  If this is not what
    ```

#DHCPクライアントからの接続確認

1. DGCPクライアントのeth2の設定ファイルを変更して、NICを再起動

    ```
[root@testvm2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
NM_CONTROLLED=yes
BOOTPROTO=dhcp
ONBOOT=yes
DEVICE=eth2
[root@testvm2 network-scripts]# ifdown eth2
Device 'eth2' successfully disconnected.
[root@testvm2 network-scripts]# ifup eth2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
    ```

1. IPアドレスを確認
192.168.100.101が設定されているのが確認できる

    ```
[root@testvm2 ~]# ip a
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:98:ac:e1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.101/24 brd 192.168.100.255 scope global noprefixroute dynamic eth2
       valid_lft 28074sec preferred_lft 28074sec
    inet6 fe80::a00:27ff:fe98:ace1/64 scope link
       valid_lft forever preferred_lft forever
    ```

1. DHCPサーバ側でtcpdumpによる通信を確認していると以下のやり取りが確認できる

    ```
[root@testvm1 ~]# tcpdump -nlSvi eth2 dst port 67 or dst port 68
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes

    ----DHCPクライアントのeth2(MACアドレス:08:00:27:98:ac:e1)からDHCPディスカバー（ブロードキャストでDHCPサーバを探す)----
02:20:29.173395 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 08:00:27:98:ac:e1, length 300, xid 0xcab0ba6d, Flags [none]
          Client-Ethernet-Address 08:00:27:98:ac:e1
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Discover　←★DHCPディスカバー
            Hostname Option 12, length 7: "testvm2"
            Parameter-Request Option 55, length 19:
              Subnet-Mask, BR, Time-Zone, Classless-Static-Route
              Domain-Name, Domain-Name-Server, Hostname, YD
              YS, NTP, MTU, Option 119
              Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
              Option 252, NTP, RP
    ----DHCPサーバからDHCPクライアントへDNCオファー（IPアドレス192.168.100.101やDNSサーバなどを指定）----
02:20:30.175255 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.100.1.bootps > 192.168.100.101.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xcab0ba6d, Flags [none]
          Your-IP 192.168.100.101
          Client-Ethernet-Address 08:00:27:98:ac:e1
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Offer　←★DHCPオファー
            Server-ID Option 54, length 4: 192.168.100.1
            Lease-Time Option 51, length 4: 28800
            Subnet-Mask Option 1, length 4: 255.255.255.0
            Domain-Name Option 15, length 8: "test.com"
            Domain-Name-Server Option 6, length 4: 192.168.100.1
            Default-Gateway Option 3, length 4: 192.168.100.254
    ----DHCPクライアントへDHCPサーバへDHCPリクエスト（IPアドレス192.168.100.101を指定）----
02:20:30.176446 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 08:00:27:98:ac:e1, length 300, xid 0xcab0ba6d, Flags [none]
          Client-Ethernet-Address 08:00:27:98:ac:e1
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Request　←★DHCPリクエスト
            Server-ID Option 54, length 4: 192.168.100.1
            Requested-IP Option 50, length 4: 192.168.100.101
            Hostname Option 12, length 7: "testvm2"
            Parameter-Request Option 55, length 19:
              Subnet-Mask, BR, Time-Zone, Classless-Static-Route
              Domain-Name, Domain-Name-Server, Hostname, YD
              YS, NTP, MTU, Option 119
              Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
              Option 252, NTP, RP
    ----DHCPサーバからDHCPクライアントへDNC-ACK（IPアドレス192.168.100.101やDNSサーバなどを指定）----
02:20:30.181847 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.100.1.bootps > 192.168.100.101.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xcab0ba6d, Flags [none]
          Your-IP 192.168.100.101
          Client-Ethernet-Address 08:00:27:98:ac:e1
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: ACK　←★DHCP-ACK
            Server-ID Option 54, length 4: 192.168.100.1
            Lease-Time Option 51, length 4: 28800
            Subnet-Mask Option 1, length 4: 255.255.255.0
            Domain-Name Option 15, length 8: "test.com"
            Domain-Name-Server Option 6, length 4: 192.168.100.1
            Default-Gateway Option 3, length 4: 192.168.100.254
    ```

1. DHCPサーバで上で、割り当て中のIPアドレス確認
DHCPサーバ上では以下のファイルから割り当て中のIPアドレスの情報が確認できます

    ```
[root@testvm1 ~]# cat /var/lib/dhcpd/dhcpd.leases
  lease 192.168.100.101 {
  starts 3 2020/01/15 12:16:41;
  ends 3 2020/01/15 20:16:41;
  cltt 3 2020/01/15 12:16:41;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 08:00:27:98:ac:e1;
  client-hostname "testvm2";
}
server-duid "\000\001\000\001%\256\206g\010\000'C\233\316";
    ```