หน้า 1 จากทั้งหมด 1

ติดตั้งและคอนฟิก DHCP Server บน CentOS 7

โพสต์โพสต์แล้ว: 05 มิ.ย. 2018 11:07
โดย nuiz
ติดตั้ง dhcp server
โค้ด: เลือกทั้งหมด
yum -y install dhcp


ก๊อบปี้ไฟล์คอนฟิกตัวอย่าง
โค้ด: เลือกทั้งหมด
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf.example


เปิดไฟล์ /etc/dhcp/dhcpd.conf
เพิ่มบรรทัดต่อไปนี้
โค้ด: เลือกทั้งหมด
default-lease-time 86400;
max-lease-time 172800;
option time-offset 25200;

# Configuring Subnet eth0 and IP Range
subnet 192.168.100.0 netmask 255.255.255.0 {
   range 192.168.100.100 192.168.100.200;
   option domain-name-servers 8.8.8.8, 8.8.4.4;
   option domain-name "abcd.com";
   option routers 192.168.100.1;
   option tftp-server-name cisco;
   #default-lease-time 600;
   #max-lease-time 7200;
}

#Static for eth0
host eth0 {
hardware ethernet 00:15:5d:64:16:09;
fixed-address 192.168.100.31;
}

#Static DHCP
host nuiz-pc {
hardware ethernet 00:0C:29:05:A7:CB;
fixed-address 192.168.100.110;
}


บรรทัด default-lease-time กำหนดระยะเวลาที่ Clients ต้องส่งมาขอ IP ใหม่ หน่วยเป็นวินาทีครับ ในตัวอย่างคือ 24 ชั่วโมง (24x60x60=86400)
บรรทัด max-lease-time กำหนดระยะเวลา lease time สูงสุดที่ DHCP server จะยอมให้ ใช้กับกรณีที่ Client ส่งค่า lease time ที่อยากได้มาด้วย
บรรทัด "option option tftp-server-name cisco;" เอาไว้เผื่อ DHCP Clients ที่เป็นพวก Cisco IP Phone ซึ่งทั่วไปไม่ต้องมีบรรทัดนี้ก็ได้ครับ แต่ถ้ามีต้องสามารถ resolve ชื่อ cisco เป็น IP Address ได้ เพิ่มชื่อในไฟล์ /etc/hosts ใส่ IP Address ของ TFTP server
โค้ด: เลือกทั้งหมด
192.168.88.10 cisco


บรรทัด "option time-offset 25200;" ไม่ต้องใส่ก็ได้ บรรทัดนี้ไว้ตั้งเวลาในเครื่องให้แก่ DHCP Clients วิธีคำนวณหาค่า time-offset
ประเทศไทย เร็วกว่า GMT 7 ชั่วโมง ดังนั้น 7x3600 = 25200 วินาที

สตาร์ท dhcp service และทำให้สตาร์ทอัตโนมัติ
โค้ด: เลือกทั้งหมด
systemctl restart dhcpd
systemctl enable dhcpd


ถ้า DHCP สตาร์ทไม่ได้ อาจเป็นเพราะว่าใส่ Subnet ผิดครับ ไม่มี Interfaces ไหนเครื่องที่มี Subnet นี้

ตรวจสอบโพรเซส dhcpd
โค้ด: เลือกทั้งหมด
[root@freepbx dhcp]# ps -ef | grep dhcpd
dhcpd    10760     1  0 13:24 ?        00:00:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid


โค้ด: เลือกทั้งหมด
[root@freepbx dhcp]# ps -Awl | grep dhcpd
4 S   177 10760     1  0  80   0 - 27716 poll_s ?        00:00:00 dhcpd


โค้ด: เลือกทั้งหมด
[root@freepbx dhcp]# netstat -alnp | grep dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           10760/dhcpd         
raw        0      0 0.0.0.0:1               0.0.0.0:*               7           10760/dhcpd         
unix  3      [ ]         STREAM     CONNECTED     18627204 10760/dhcpd         
unix  2      [ ]         DGRAM                    18628663 10760/dhcpd 


ดูไอพีที่จ่ายให้แก่ Cliens
โค้ด: เลือกทั้งหมด
more /var/lib/dhcpd/dhcpd.leases


ไฟล์ dhcpd.service
/usr/lib/systemd/system/dhcpd.service
โค้ด: เลือกทั้งหมด
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

[Install]
WantedBy=multi-user.target


ไฟล์ /etc/sysconfig/dhcp
ไฟล์นี้จะกำหนดว่าในกรณีที่เรามีหลายๆ Interface ในเครื่อง จะให้ DHCP Server รันที่ Interface ไหน ยกตัวอย่างเช่นในเครื่องมี Interface eth0, eth1, eth2 แต่ต้องการให้ DHCP รันบน eth0 เท่านั้น ก็ให้ตั้งค่าในไฟล์แบบนี้ครับ
โค้ด: เลือกทั้งหมด
DHCPDARGS="eth0";

หรือให้รันทั้ง eth0 และ eth1 ก็ตั้งค่าแบบนี้
โค้ด: เลือกทั้งหมด
DHCPDARGS="eth0 eth1";

หรือให้รันทุก Interface เลย ก็ไม่ต้องทำอะไรในไฟล์นี้

ไฟล์ /var/lib/dhcpd/dhcpd.leases
ไฟล์นี้เก็บข้อมูลว่าตอนนี้ DHCP Server จ่ายไอพีอะไรออกไปให้เครื่องไหนบ้าง ดูตัวอย่างครับ
โค้ด: เลือกทั้งหมด
lease 192.168.100.162 {
  starts 5 2018/08/31 16:07:13;
  ends 6 2018/09/01 16:07:13;
  cltt 5 2018/08/31 16:07:13;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 50:68:0a:f9:f9:81;
  client-hostname "android-8f57407d45c6fae7";
}

แต่ผมสังเกตุว่าเวลามันไม่ตรงครับ ช้าไป 7 ชั่วโมง ซึ่งเป็นค่าดีฟอลท์ของมันครับที่มันจะแสดงเวลา UTC แต่เราสามารถแก้ไขให้แสดงเวลาตามเวลาบ้านเราได้ ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/dhcp/dhcpd.conf
โค้ด: เลือกทั้งหมด
db-time-format local;

จะแสดงแบบนี้
โค้ด: เลือกทั้งหมด
lease 192.168.100.162 {
  starts epoch 1535732219; # Fri Aug 31 23:16:59 2018
  ends epoch 1535818619; # Sat Sep 01 23:16:59 2018
  cltt epoch 1535732219; # Fri Aug 31 23:16:59 2018
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 50:68:0a:f9:f9:81;
  client-hostname "android-8f57407d45c6fae7";
}


แต่ถ้าเซ็ตแบบนี้ (ค่าดีฟอลท์)
โค้ด: เลือกทั้งหมด
db-time-format default;

ก็จะแสดงแบบนี้ (ค่าดีฟอลท์) แต่เวลาจะแสดงเป็น UTC
โค้ด: เลือกทั้งหมด
lease 192.168.100.165 {
  starts 5 2018/08/31 16:23:53;
  ends 6 2018/09/01 16:23:53;
  cltt 5 2018/08/31 16:23:53;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:15:5d:64:16:05;
}