ติดตั้งและคอนฟิก DHCP Server บน CentOS 7
โพสต์แล้ว: 05 มิ.ย. 2018 11:07
ติดตั้ง dhcp server
ก๊อบปี้ไฟล์คอนฟิกตัวอย่าง
เปิดไฟล์ /etc/dhcp/dhcpd.conf
เพิ่มบรรทัดต่อไปนี้
บรรทัด 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
บรรทัด "option time-offset 25200;" ไม่ต้องใส่ก็ได้ บรรทัดนี้ไว้ตั้งเวลาในเครื่องให้แก่ DHCP Clients วิธีคำนวณหาค่า time-offset
ประเทศไทย เร็วกว่า GMT 7 ชั่วโมง ดังนั้น 7x3600 = 25200 วินาที
สตาร์ท dhcp service และทำให้สตาร์ทอัตโนมัติ
ถ้า DHCP สตาร์ทไม่ได้ อาจเป็นเพราะว่าใส่ Subnet ผิดครับ ไม่มี Interfaces ไหนเครื่องที่มี Subnet นี้
ตรวจสอบโพรเซส dhcpd
ดูไอพีที่จ่ายให้แก่ Cliens
ไฟล์ dhcpd.service
/usr/lib/systemd/system/dhcpd.service
ไฟล์ /etc/sysconfig/dhcp
ไฟล์นี้จะกำหนดว่าในกรณีที่เรามีหลายๆ Interface ในเครื่อง จะให้ DHCP Server รันที่ Interface ไหน ยกตัวอย่างเช่นในเครื่องมี Interface eth0, eth1, eth2 แต่ต้องการให้ DHCP รันบน eth0 เท่านั้น ก็ให้ตั้งค่าในไฟล์แบบนี้ครับ
หรือให้รันทั้ง eth0 และ eth1 ก็ตั้งค่าแบบนี้
หรือให้รันทุก Interface เลย ก็ไม่ต้องทำอะไรในไฟล์นี้
ไฟล์ /var/lib/dhcpd/dhcpd.leases
ไฟล์นี้เก็บข้อมูลว่าตอนนี้ DHCP Server จ่ายไอพีอะไรออกไปให้เครื่องไหนบ้าง ดูตัวอย่างครับ
แต่ผมสังเกตุว่าเวลามันไม่ตรงครับ ช้าไป 7 ชั่วโมง ซึ่งเป็นค่าดีฟอลท์ของมันครับที่มันจะแสดงเวลา UTC แต่เราสามารถแก้ไขให้แสดงเวลาตามเวลาบ้านเราได้ ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/dhcp/dhcpd.conf
จะแสดงแบบนี้
แต่ถ้าเซ็ตแบบนี้ (ค่าดีฟอลท์)
ก็จะแสดงแบบนี้ (ค่าดีฟอลท์) แต่เวลาจะแสดงเป็น UTC
- โค้ด: เลือกทั้งหมด
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;
}