← Back to list

การติดตั้ง DHCP และ DNS บน Debian-based

`DHCP` ภาษาไอทีบ้านๆ ก็จะเป็น server สำหรับแจก IP Address ให้กับเครื่องฯ ในเครือข่ายแบบอัตโนมัติ แต่ความเป็นจริงสามารถทำได้มากนั้น…

ลุงขี้เมา · 2021-10-30 14:25 · 7 claps · 3.8 min read
#dhcp #dns #ddns #local-dns #local-zone
Open on Medium ↗
Wiki topics: 🔓 · Open Source

การติดตั้ง 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

  1. /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”;
  1. /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;

};
  1. /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; };

};
  1. /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