Skip to content
Gallery
บันทึกการทำ
Share
Explore
Systems

icon picker
ติดตั้ง DHCP และ DNS บน Debian-based

Last edited 158 days ago by System Writer
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
1
Gateway or Router
192.168.1.1
2
DHCP Server
192.168.1.254
3
DNS Server
192.168.1.254
4
IP Range
192.168.1.193 - 240 255.255.255.0
5
domain name
home.lan
There are no rows in this table

การตั้งค่า 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
home.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 home.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;

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.