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