การติดตั้ง DHCP และ DNS บน Debian-based
`DHCP` ภาษาไอทีบ้านๆ ก็จะเป็น server สำหรับแจก IP Address ให้กับเครื่องฯ ในเครือข่ายแบบอัตโนมัติ แต่ความเป็นจริงสามารถทำได้มากนั้น…
การติดตั้ง DHCP และ DNS บน Debian-based
DHCP ภาษาไอทีบ้านๆ ก็จะเป็น server สำหรับแจก IP Address ให้กับเครื่องฯ ในเครือข่ายแบบอัตโนมัติ แต่ความเป็นจริงสามารถทำได้มากนั้น เรียกว่าเป็นการตั้งค่าเครื่อง client ไม่ว่าจะเป็น fixed ip address, boot image, and etc.
DNS Domain Name Service เป็นบริการการ map ip address กับชื่อ เพื่อความสะดวกในการเรียกใช้งาน
sudo apt update
sudo apt install isc-dhcp-server bind9
สภาพแวดล้อม
| What | Value
| — -| — -
| Gateway or Router | 192.168.1.1
| DHCP Server | 192.168.1.254
| DNS Server | 192.168.1.254
| IP Range | 192.168.1.193–240<br/>255.255.255.0
| domain name | home.lan
## การตั้งค่า DHCP
การตั้งค่า DHCP นั้นจะมีอยู่ด้วยกัน 2 files
/etc/default/isc-dhcp-serverเป็นการกำหนดให้ isc-dhcp-server service ได้รู้ว่าต้องอ่านไฟล์การตั้งค่าจากไฟล์ใด และเป็นการกำหนดว่าจะใช้ network interface card (NIC) ใด การตรวจสอบชื่อของ NIC สามารถได้ด้วยคำสั่งifconfigหรือip a
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
INTERFACESv4=”eth0"
DHCPDv4_CONF เป็นการระบุให้บอก config file จากไฟล์ใด
INTERFACESv4 เป็นการระบุ NIC ที่จะให้ DHCP listen on
/etc/dhcp/dhcpd.confตัวอย่างการตั้งค่า
authoritative;
default-lease-time 14400; # เวลาเป็นจำนวนวินาที
max-lease-time 18000;
log-facility local7;
# กำหนดช่วง IP address ที่จะทำการแจกให้กับเครือข่าย
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.193 192.168.1.240;
option routers 192.168.1.1;
option domain-name-servers 9.9.9.9, 1.1.1.1;
option domain-name “home.lan.”;
}
## Reserve IP
host server-01 {
hardware ethernet 5e:43:0b:00:2f:32;
fixed-address 192.168.1.253;
}
เมื่อการกำหนดค่าต่างๆ เป็นที่เรียบร้อยแล้ว สามารถตรวจสอบ config file ได้ด้วยคำสั่ง sudo dhcpd -t หากผลไม่ได้แจ้งปัญหาใด ก็ทำการ restart service ด้วยคำสั่ง sudo systemctl restart isc-dhcp-server
## การตั้งค่า DNS with Dynamic DNS
การตั้งค่า bind9 DNS อาจจะดูซับซ้อน เพราะใช้การ include files และมีหลาย files ที่เกี่ยวข้อง
อีกทั้งการทำให้ DHCP service สามารถทำการ update dns records ได้ก็ต้องสร้าง key ที่ใช้เป็นการเชื่อมกันระหว่างทั้ง 2 services เพื่อความปลอดภัยของระบบ
### การสร้าง key
หากใน /etc/bind ไม่มีไฟล์ rndc.key หรือต้องการสร้าง rndc.key ใหม่
cd /etc/bind
sudo rndc-confgen > rndc.key
ได้ไฟล์ rndc.key ที่มีเนื้อประมาณนี้
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “raP6EjIHuBzgTaME0p3Gxg==”;
};
options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key “rndc-key” {
# algorithm hmac-md5;
# secret “raP6EjIHuBzgTaME0p3Gxg==”;
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { “rndc-key”; };
# };
# End of named.conf
ทำการลบบรรทัดให้เหลือแต่เฉพาะส่วนของ key ตามตัวอย่างนี้
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “raP6EjIHuBzgTaME0p3Gxg==”;
};
ทำการตั้งค่าไฟล์ให้สามารถอ่านได้เฉพาะ root และ bind เท่านั้น
chmod 660 /etc/bind/rndc.key
chown root:bind /etc/bind/rndc.key
### update config files
/etc/bind/named.confเป็น config file หลัก ที่ include config files อื่นๆ
acl internals { 127.0.0.0/8; 192.168.1.0/24; };
include “/etc/bind/named.conf.options”;
include “/etc/bind/rndc.key”;
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; };
};
include “/etc/bind/named.conf.local”;
include “/etc/bind/named.conf.default-zones”;
/etc/bind/named.conf.optionsกำหนด options อย่างเช่น forwarders, listen-on, recursion
options {
directory “/var/cache/bind”;
query-source address * port *;
forwarders {
9.9.9.9;
1.1.1.1;
};
dnssec-validation auto;
listen-on-v6 { any; };
listen-on { 127.0.0.1; 192.168.1.254; };
allow-transfer { none; };
version “not currently available”;
recursion yes;
allow-recursion { 127.0.0.1; 192.168.1.0/24; };
querylog yes;
};
/etc/bind/named.conf.localกำหนดค่าในส่วนของ local domain
include “/etc/bind/zones.rfc1918”;
controls {
inet 127.0.0.1 port 953 allow {
127.0.0.1;
192.168.1.254;
} keys { “rndc-key”; };
};
zone “home.lan” {
type master;
file “/etc/bind/zones/home.lan”;
allow-update { key rndc-key; };
};
zone “168.192.in-addr.arpa” {
type master;
notify no;
file “/etc/bind/zones/168.192.in-addr.arpa”;
allow-update { key rndc-key; };
};
/etc/bind/named.conf.default-zonesเป็น default setting ที่ไม่ต้องปรับแก้ไขใดๆ
เมื่อทำการตั้งค่าต่างๆ เรียบร้อย ก็ทำการสร้าง zone file สำหรับ local domain โดยใน named.config.local ได้กำหนดให้ zone files นี้ อยู่ภายใต้ /etc/bind/zones
mkdir /etc/bind/zones
cd /etc/bind/zones
vi home.lan
vi 168.192.in-addr.arpa
โดยมีค่าเริ่มต้นประมาณตามนี้
home.lan
$ORIGIN .
$TTL 604800 ; 1 week
samre.lan IN SOA home.lan. root.home.lan. (
1 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS home.lan.
NS localhost.
A 192.168.1.254
$ORIGIN home.lan.
$TTL 3600 ; 1 hour
GATEWAY A 192.168.1.1
DHCPDNS A 192.168.1.254
168.192.in-addr.arpa
$ORIGIN .
$TTL 604800 ; 1 week
168.192.in-addr.arpa IN SOA home.lan. root.home.lan. (
1 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS dhcpdns.
A 192.168.1.254
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 3600 ; 1 hour
1 PTR gateway.home.lan.
254 PTR dhcpdns.home.lan.
ทำการตรวจสอบการตั้งค่า config files ของ bind9 ด้วยคำสั่ง named-checkconf หากไม่ได้มีการแจ้ง error ใด ก็แสดงว่า config เรียบร้อยไม่มีที่ผิด syntax
ทำการตรวจสอบ local zone file ที่สร้างขึ้นมาใหม่ด้วยคำสั่ง หากไม่มีข้อผิดพลาดใด ก็สามารถทำการ restart service
named-checkzone cool.lan /etc/bind/zones/home.lan
named-checkzone 168.192.in-addr.arpa /etc/bind/zones/168.192.in-addr.arpa
systemctl restart bind9
ทุกครั้งที่มีการแก้ไขเพิ่มเติม zone file ต้องทำการ freeze zone file เป็นการชั่วคราว แล้วทำการแก้ไขเพิ่ม พร้อมกับบวกค่าอีก 1 ให้กับบรรทัด serial แล้วจึงทำการ reload และ thaw ต่อไป
rndc freeze home.lan
rndc freeze 168.192.in-addr.arpa
rndc reload home.lan
rndc thaw home.lan
rndc reload 168.192.in-addr.arpa
rndc thaw 168.192.in-addr.arpa
## ตั้งค่า DHCP ให้ทำการ Update DNS
เมื่อทำการติดตั้งและตั้งค่า DNS เป็นที่เรียบร้อย ก็ถึงเวลาดำเนินการให้ DHCP ทำการ update dns record ให้อัตโนมัติ เวลาที่มีการแจก IP address ให้กับเครื่องในเครือข่าย โดยเพิ่มบรรทัดการตั้งค่าใน /etc/dhcp/dhcpd.conf
ddns-domainname “home.lan.”;
ddns-rev-domainname “in-addr.arpa.”;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
use-host-decl-names on;
option domain-name “home.lan.”;
include “/etc/bind/rndc.key”;
update-optimization off;
update-conflict-detection off;
zone home.lan. {
primary 192.168.1.254;
key rndc-key;
}
zone 168.192.in-addr.arpa. {
primary 192.168.1.254;
key rndc-key;
}
/etc/dhcp/dhcpd.conf สุดท้าย จะมีหน้าตาประมาณนี้
authoritative;
default-lease-time 14400; # เวลาเป็นจำนวนวินาที
max-lease-time 18000;
log-facility local7;
ddns-domainname “home.lan.”;
ddns-rev-domainname “in-addr.arpa.”;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
use-host-decl-names on;
option domain-name “home.lan.”;
include “/etc/bind/rndc.key”;
update-optimization off;
update-conflict-detection off;
zone home.lan. {
primary 192.168.1.254;
key rndc-key;
}
zone 168.192.in-addr.arpa. {
primary 192.168.1.254;
key rndc-key;
}
# กำหนดช่วง IP address ที่จะทำการแจกให้กับเครือข่าย
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.193 192.168.1.240;
option routers 192.168.1.1;
option domain-name-servers 9.9.9.9, 1.1.1.1;
option domain-name “home.lan.”;
}
## Reserve IP
host server-01 {
hardware ethernet 5e:43:0b:00:2f:32;
fixed-address 192.168.1.253;
}
อย่าลืมตรวจสอบก่อน restart service
dhcpd -t
systemctl restart isc-dhcp-server
## อ้างอิง
메타데이터
- post_id
- c22a1b8dafb6
- slug
- การติดตั้ง-dhcp-และ-dns-บน-debian-based-c22a1b8dafb6
- url
- https://medium.com/@chookiat/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-dhcp-%E0%B9%81%E0%B8%A5%E0%B8%B0-dns-%E0%B8%9A%E0%B8%99-debian-based-c22a1b8dafb6
- canonical_url
- https://medium.com/@chookiat/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-dhcp-%E0%B9%81%E0%B8%A5%E0%B8%B0-dns-%E0%B8%9A%E0%B8%99-debian-based-c22a1b8dafb6
- author_url
- https://medium.com/@chookiat
- status
- ok
- fetched_at
- 2026-07-27 21:01:28