ตั้งค่าเซิร์ฟเวอร์ DNS Master-Slave โดยใช้เครื่องมือ "Bind" ใน RHEL/CentOS 6.5
เซิร์ฟเวอร์ชื่อโดเมน (DNS) ใช้สำหรับระบุชื่อโฮสต์ใดๆ เซิร์ฟเวอร์ DNS หลัก (เซิร์ฟเวอร์หลัก) เป็นตัวจัดการข้อมูลโซนดั้งเดิม และเซิร์ฟเวอร์ DNS ทาส (เซิร์ฟเวอร์รอง) เป็นเพียงเซิร์ฟเวอร์สำรองที่ใช้ในการคัดลอกข้อมูลโซนเดียวกันจาก เซิร์ฟเวอร์หลัก เซิร์ฟเวอร์หลักจะแก้ไขชื่อของทุกโฮสต์ที่เรากำหนดไว้ในฐานข้อมูลโซนและใช้โปรโตคอล UDP เนื่องจากโปรโตคอล UDP จะไม่ใช้กระบวนการตอบรับในขณะที่ tcp ใช้การตอบรับ เซิร์ฟเวอร์ DNS ยังใช้โปรโตคอล UDP เพื่อแก้ไขคำขอค้นหาโดยเร็วที่สุด
DNS ทำงานอย่างไร?
การทำความเข้าใจ DNS อาจทำให้มือใหม่สับสนเล็กน้อย ต่อไปนี้เป็นคำอธิบายโดยย่อเกี่ยวกับวิธีการทำงานของ DNS
สมมุติว่าถ้าเราจำเป็นต้องเข้าถึงเว็บไซต์ใดๆ เราจะทำอย่างไร? เพียงพิมพ์ www.google.com ในเบราว์เซอร์แล้วกด Enter อืม นั่นคือทั้งหมดที่เรารู้ แต่ความจริงก็คือ DNS เจ็บปวดแค่ไหนในขณะที่สอบถามเรา ขณะที่เราพิมพ์ www.google.com ระบบจะค้นหา www.google.com เมื่อใดก็ตามที่เราพิมพ์ชื่อโดเมน จะมี . (จุด) ที่ท้าย www.google.com ที่ระบุว่าให้ค้นหาเซิร์ฟเวอร์รูทของเนมสเปซ
มี เซิร์ฟเวอร์รูท 13 แห่ง ทั่วโลกที่พร้อมให้แก้ไขคำค้นหา ในตอนแรก ขณะที่เรากด Enter เป็น www.google.com เบราว์เซอร์ของเราจะส่งคำขอไปยังตัวแก้ไขในพื้นที่ของเรา ซึ่งมีรายการเกี่ยวกับข้อมูลเซิร์ฟเวอร์ DNS หลักและรองของเรา หากพวกเขาไม่มีข้อมูลเกี่ยวกับคำค้นหาที่ร้องขอ พวกเขาจะส่งคำขอไปยังโดเมนระดับบนสุด (TLD) หาก TLD บอกว่าฉันไม่ทราบคำขอ อาจเป็นเซิร์ฟเวอร์ที่เชื่อถือได้ที่รู้จักคุณ คำขอ มันจะส่งต่อไปยังเซิร์ฟเวอร์ที่เชื่อถือได้ ที่นี่เฉพาะ www.google.com เท่านั้นที่กำหนดเป็นที่อยู่ 72.36.15.56
ในระหว่างนี้เซิร์ฟเวอร์ที่เชื่อถือได้จะให้คำตอบกับ TLD และ TLD จะส่งผ่านไปยังเซิร์ฟเวอร์รูท และรูทจะให้ข้อมูลแก่เบราว์เซอร์ ดังนั้นเบราว์เซอร์จะแคชคำขอ DNS สำหรับการใช้งานในอนาคต ดังนั้นกระบวนการอันยาวนานเหล่านี้จะหมดไปภายในหน่วยมิลลิวินาที หากพวกเขาไม่ทราบคำขอ พวกเขาจะตอบกลับในชื่อ NXDOMAIN นั่นหมายความว่าไม่พบบันทึกใด ๆ ในฐานข้อมูลโซน หวังว่านี่จะทำให้คุณเข้าใจวิธีการทำงานของ DNS
อ่านเพิ่มเติม: ตั้งค่าเซิร์ฟเวอร์แคช DNS ใน Ubuntu
สภาพแวดล้อมการทดสอบของฉัน
สำหรับบทความนี้ ฉันใช้เครื่อง 3 เครื่อง, 2 เครื่องสำหรับการตั้งค่าเซิร์ฟเวอร์ (ต้นแบบและทาส) และ 1 เครื่องสำหรับไคลเอนต์
---------------------------------------------------
Master DNS Server
---------------------------------------------------
IP Address : 192.168.0.200
Host-name : masterdns.tecmintlocal.com
OS : Centos 6.5 Final
---------------------------------------------------
Slave DNS Server
---------------------------------------------------
IP Address : 192.168.0.201
Host-name : slavedns.tecmintlocal.com
OS : Centos 6.5 Final
---------------------------------------------------
Client Machine to use DNS
---------------------------------------------------
IP Address : 192.168.0.210
Host-name : node1.tecmintlocal.com
OS : Centos 6.5 Final
แพ็คเกจความต้องการ
bind, bind-utils, bind-chroot
ไฟล์การกำหนดค่าที่ใช้
config file : /etc/named.conf
script file : /etc/init.d/named
พอร์ตและโปรโตคอลที่ใช้
53, UDP
ตั้งค่าเซิร์ฟเวอร์ DNS หลัก
ขั้นแรก ตรวจสอบที่อยู่ IP ชื่อโฮสต์ และเวอร์ชันการแจกจ่ายของเซิร์ฟเวอร์ DNS หลัก ก่อนที่จะดำเนินการตั้งค่าต่อไป
sudo ifconfig | grep inet
hostname
cat /etc/redhat-release
เมื่อคุณยืนยันว่าการตั้งค่าข้างต้นถูกต้อง ก็ถึงเวลาที่ต้องดำเนินการติดตั้งแพ็คเกจที่จำเป็น
sudo yum install bind* -y
การติดตั้งและการกำหนดค่าการผูก
หลังจากติดตั้งแพ็คเกจที่จำเป็น ตอนนี้ให้กำหนดไฟล์โซนในไฟล์การกำหนดค่าหลัก 'named.conf'
sudo vim /etc/named.conf
ด้านล่างนี้คือรายการไฟล์ named.conf ของฉัน โปรดเปลี่ยนไฟล์การกำหนดค่าตามความต้องการของคุณ
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.0.200; }; # Here we need to add our Master DNS Server IP.
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.0.0/24; }; # subnet range where my hosts are allowed to query our DNS.
allow-transfer { localhost; 192.168.0.201; }; # Here we need to our Slave DNS server IP.
recursion no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
## Define our forward & reverse Zone file here for tecmintlocal.com.
zone"tecmintlocal.com" IN {
type master;
file "tecmintlocal.fwd.zone";
allow-update { none; };
};
zone"0.168.192.in-addr.arpa" IN {
type master;
file "tecmintlocal.rev.zone";
allow-update { none; };
};
#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
ต่อไปนี้เป็นคำอธิบายของการกำหนดค่าแต่ละรายการที่เราใช้ในไฟล์ด้านบน
- พอร์ตการฟัง 53 – ใช้สำหรับ DNS เพื่อฟังในอินเทอร์เฟซที่มีอยู่
- Master DNS – กำหนดที่อยู่ IP Master DNS ของคุณเพื่อรับฟังคำค้นหา
- Slave DNS – กำหนด DNS Slave ของคุณ ซึ่งใช้ในการซิงค์ข้อมูลโซนของเราเพื่อแก้ไขโฮสต์จาก Master
- ไม่เรียกซ้ำ – หากตั้งค่าเป็นใช่ การสืบค้นแบบเรียกซ้ำจะทำให้เซิร์ฟเวอร์เข้าสู่การโจมตี DDOS
- ชื่อโซน – กำหนดชื่อโซนของคุณที่นี่ ซึ่งกำหนดเป็น tecminlocal.com
- ประเภทต้นแบบ – เนื่องจากระบบนี้ได้รับการกำหนดค่าสำหรับเซิร์ฟเวอร์หลัก สำหรับเซิร์ฟเวอร์ทาสที่กำลังจะมาถึง ระบบนี้จะเป็นทาส
- tecmintlocal.fwd.zone – ไฟล์นี้มีข้อมูลโฮสต์สำหรับโซนนี้
- อนุญาตให้อัปเดตไม่มี – หากไม่มีจะตั้งค่า มันจะไม่ใช้ Dynamic DNS (DDNS)
การสร้างไฟล์โซนหลัก
ขั้นแรกให้เรากำหนดรายการโซนการค้นหาล่วงหน้า ที่นี่เราจำเป็นต้องสร้างไฟล์โซนในชื่อของสิ่งที่เรากำหนดไว้ในไฟล์ named.conf ดังต่อไปนี้
tecmintlocal.fwd.zone
tecmintlocal.rev.zone
เราใช้ไฟล์การกำหนดค่าตัวอย่างสำหรับการสร้างไฟล์โซนส่งต่อ ในกรณีนี้ เราจะต้องคัดลอกไฟล์การกำหนดค่าตัวอย่าง
sudo cp /var/named/named.localhost /var/named/tecmintlocal.fwd.zone
sudo cp /var/named/named.loopback /var/named/tecmintlocal.rev.zone
เมื่อคุณคัดลอกไฟล์การกำหนดค่าแล้ว ตอนนี้ให้แก้ไขไฟล์โซนเหล่านี้โดยใช้โปรแกรมแก้ไข vim
sudo vim /var/named/tecmintlocal.fwd.zone
ก่อนที่จะกำหนดข้อมูลโฮสต์ของเราในไฟล์โซนส่งต่อ ก่อนอื่นให้ดูไฟล์โซนตัวอย่างโดยย่อ
นี่คือการกำหนดค่าโซนข้างหน้าของฉัน ผนวกรายการด้านล่างและทำการเปลี่ยนแปลงตามความต้องการของคุณ
$TTL 86400
@ IN SOA masterdns.tecmintlocal.com. root.tecmintlocal.com. (
2014090401 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
; Name server's
@ IN NS masterdns.tecmintlocal.com.
@ IN NS slavedns.tecmintlocal.com.
; Name server hostname to IP resolve.
@ IN A 192.168.0.200
@ IN A 192.168.0.201
; Hosts in this Domain
@ IN A 192.168.0.210
@ IN A 192.168.0.220
masterdns IN A 192.168.0.200
slavedns IN A 192.168.0.201
node1 IN A 192.168.0.210
rhel1 IN A 192.168.0.220
บันทึกและออกจากไฟล์โดยใช้ wq! หลังจากแก้ไขการมองไปข้างหน้า ดูเหมือนว่าด้านล่าง ใช้ TAB เพื่อรับรูปแบบที่เหมาะสมในไฟล์โซน
ตอนนี้ ให้สร้างไฟล์การค้นหาแบบย้อนกลับ เราได้สร้างสำเนาของไฟล์ย้อนกลับในชื่อ tecmintlocal.rev.zone แล้ว ดังนั้นเราจึงใช้ไฟล์นี้เพื่อกำหนดค่าการค้นหาแบบย้อนกลับ
sudo vim /var/named/tecmintlocal.rev.zone
ก่อนที่จะกำหนดข้อมูลโฮสต์ของเราในไฟล์โซนย้อนกลับ โปรดดูตัวอย่างไฟล์ค้นหาแบบย้อนกลับอย่างรวดเร็วดังที่แสดงด้านล่าง
นี่คือการกำหนดค่าโซนย้อนกลับของฉัน ผนวกรายการด้านล่างและทำการเปลี่ยนแปลงตามที่คุณต้องการ
$TTL 86400
@ IN SOA masterdns.tecmintlocal.com. root.tecmintlocal.com. (
2014090402 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
; Name server's
@ IN NS masterdns.tecmintlocal.com.
@ IN NS slavedns.tecmintlocal.com.
@ IN PTR tecmintlocal.com.
; Name server hostname to IP resolve.
masterdns IN A 192.168.0.200
slavedns IN A 192.168.0.201
;Hosts in Domain
node1 IN A 192.168.0.210
rhel IN A 192.168.0.220
200 IN PTR masterdns.tecmintlocal.com.
201 IN PTR slavedns.tecmintlocal.com.
210 IN PTR node1.tecmintlocal.com.
220 IN PTR rhel1.tecmintlocal.com.
บันทึกและออกจากไฟล์โดยใช้ wq! หลังจากแก้ไขการค้นหาแบบย้อนกลับ ดูเหมือนว่าด้านล่าง ใช้ TAB เพื่อรับรูปแบบที่เหมาะสมในไฟล์โซน
ตรวจสอบความเป็นเจ้าของกลุ่มของไฟล์การค้นหาแบบไปข้างหน้าและแบบย้อนกลับ ก่อนที่จะตรวจสอบข้อผิดพลาดในการกำหนดค่า
sudo ls -l /var/named/
ที่นี่เราจะเห็นว่าทั้งสองไฟล์อยู่ในความเป็นเจ้าของของผู้ใช้ รูท เนื่องจากไฟล์ที่เราคัดลอกจากไฟล์ตัวอย่างจะอยู่ภายใต้ /var/named/ เปลี่ยนกลุ่มเป็นชื่อทั้งสองไฟล์โดยใช้คำสั่งต่อไปนี้
sudo chgrp named /var/named/tecmintlocal.fwd.zone
sudo chgrp named /var/named/tecmintlocal.rev.zone
หลังจากตั้งค่าความเป็นเจ้าของไฟล์ให้ถูกต้องแล้ว ให้ตรวจสอบอีกครั้ง
sudo ls -l /var/named/
ตอนนี้ ให้ตรวจสอบข้อผิดพลาดในไฟล์โซนก่อนเริ่มบริการ DNS ขั้นแรกให้ตรวจสอบไฟล์ named.conf จากนั้นตรวจสอบไฟล์โซนอื่นๆ
sudo named-checkconf /etc/named.conf
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.fwd.zone
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.rev.zone
ตามค่าเริ่มต้น iptables ทำงานอยู่และเซิร์ฟเวอร์ DNS ของเราถูกจำกัดไว้ที่ localhost หากไคลเอนต์ต้องการแก้ไขชื่อจากเซิร์ฟเวอร์ DNS ของเรา เราจะต้องอนุญาตคำขอขาเข้า เพื่อที่เราจะต้องเพิ่มกฎขาเข้าของ iptables สำหรับพอร์ต 53
sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
ตอนนี้ตรวจสอบว่ามีการเพิ่มกฎอย่างถูกต้องในห่วงโซ่ INPUT
sudo iptables -L INPUT
จากนั้น ให้บันทึกกฎและรีสตาร์ทไฟร์วอลล์
sudo service iptables save
sudo service iptables restart
เริ่มบริการที่มีชื่อและทำให้เป็นแบบถาวร
sudo service named start
sudo chkconfig named on
sudo chkconfig --list named
สุดท้าย ให้ทดสอบไฟล์โซน DNS หลักที่กำหนดค่า (ไปข้างหน้าและย้อนกลับ) โดยใช้เครื่องมือ ขุด และ nslookup
dig masterdns.tecmintlocal.com [Forward Zone]
dig -x 192.168.0.200
nslookup tecmintlocal.com
nslookup masterdns.tecmintlocal.com
nslookup slavedns.tecmintlocal.com
เย็น! เราได้กำหนดค่า Master DNS แล้ว ตอนนี้เราต้องตั้งค่าเซิร์ฟเวอร์ Slave DNS ก้าวไปข้างหน้าเพื่อตั้งค่าเซิร์ฟเวอร์ทาส ซึ่งใช้เวลาไม่นานในการตั้งค่าหลัก
ตั้งค่าเซิร์ฟเวอร์ DNS ทาส
ในเครื่อง Slave เราต้องติดตั้งแพ็คเกจการผูกแบบเดียวกับที่แสดงใน Master ดังนั้นมาติดตั้งโดยใช้คำสั่งต่อไปนี้
sudo yum install bind* -y
เปิดและแก้ไขไฟล์ 'named.conf' สำหรับฐานข้อมูลโซนและการฟังพอร์ตของเรา
sudo vim /etc/named.conf
ทำการเปลี่ยนแปลงตามที่แสดง ตามความต้องการของคุณ
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.0.201}; # Our Slave DNS server IP
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.0.0/24; };
recursion no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
## Define our slave forward and reverse zone, Zone files are replicated from master.
zone"tecmintlocal.com" IN {
type slave;
file "slaves/tecmintlocal.fwd.zone";
masters { 192.168.0.200; };
};
zone"0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/tecmintlocal.rev.zone";
masters { 192.168.0.200; };
};
#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
เริ่มบริการ DNS โดยใช้
sudo service named start
หลังจากเริ่มบริการการเชื่อมโยงใหม่แล้ว เราไม่จำเป็นต้องกำหนดข้อมูลโซนทีละรายการ เนื่องจาก อนุญาตการโอน ของเราจะจำลองข้อมูลโซนจากเซิร์ฟเวอร์หลักตามที่แสดงในภาพด้านล่าง
sudo ls -l /var/named/slaves
ตรวจสอบข้อมูลโซนโดยใช้คำสั่ง cat
sudo cat /var/named/slaves/tecmintlocal.fwd.zone
sudo cat /var/named/slaves/tecmintlocal.rev.zone
จากนั้น เปิดพอร์ต DNS 53 บน iptables เพื่ออนุญาตการเชื่อมต่อขาเข้า
sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
บันทึกกฎ iptables และรีสตาร์ทบริการ iptables
sudo service iptables save
sudo service iptables restart
ทำให้บริการคงอยู่เมื่อบูตระบบ
sudo chkconfig iptables on
Check whether persistent set for run-levels .
sudo chkconfig --list iptables
แค่นั้นแหละ!. ตอนนี้ถึงเวลากำหนดค่าเครื่องไคลเอนต์ของเราและตรวจสอบชื่อโฮสต์
กำหนดค่าเครื่องไคลเอนต์
ในฝั่งไคลเอ็นต์ เราจำเป็นต้องกำหนดรายการหลัก (192.168.0.200) และ DNS รอง (192.168.0.201) ในการตั้งค่าเครือข่ายเพื่อรับการกำหนดชื่อโฮสต์ โดยให้รันคำสั่งตั้งค่าเพื่อกำหนดรายการเหล่านี้ทั้งหมดตามที่แสดงในภาพ
setup
หรือแก้ไขไฟล์ '/etc/reslov.conf' และเพิ่มรายการต่อไปนี้
vim /etc/resolv.conf
search tecmintlocal.com
nameserver 192.168.0.200
nameserver 192.168.0.201
ตอนนี้ ให้ตรวจสอบการค้นหา IP ชื่อโฮสต์ และเนมเซิร์ฟเวอร์
ifconfig | grep inet
hostname
nslookup tecmintlocal.com
ตอนนี้ให้ตรวจสอบการค้นหา DNS แบบไปข้างหน้าและแบบย้อนกลับโดยใช้
dig masterdns.tecmintlocal.com
dig -x 192.168.0.200
ทำความเข้าใจกับผลลัพธ์การขุด:
- ส่วนหัว – ระบุทุกสิ่งที่เราถามและผลลัพธ์เป็นอย่างไร
- สถานะ – สถานะไม่มีข้อผิดพลาด ซึ่งหมายความว่าคำขอค้นหาใดที่เราส่งไปนั้นสำเร็จโดยไม่มีข้อผิดพลาดใดๆ
- คำถาม – คำถามที่เราสร้างขึ้น ในที่นี้คำถามของฉันคือ masterdns.tecmintlocal.com
- คำตอบ – คำขอค้นหาจะได้รับการแก้ไขหากมีข้อมูลที่มีอยู่
- ผู้มีอำนาจ – การตอบสนองของเนมเซิร์ฟเวอร์สำหรับโดเมนและโซน
- เพิ่มเติม – ข้อมูลเพิ่มเติมเกี่ยวกับเนมเซิร์ฟเวอร์ เช่น ชื่อโฮสต์และที่อยู่ IP
- เวลาสืบค้น – ใช้เวลานานเท่าใดในการแก้ไขชื่อจากเซิร์ฟเวอร์ข้างต้น
สุดท้ายให้ตรวจสอบโหนดของเราและทำการ ping
dig node1.tecmintlocal.com
ping masterdns.tecmintlocal.com -c 2
ping slavedns.tecmintlocal.com -c 2
ping 192.168.0.200 -c 2
ping 192.168.0.201 -c 2
ในที่สุด การตั้งค่าเสร็จสมบูรณ์ เราได้กำหนดค่าเซิร์ฟเวอร์ DNS หลัก (หลัก) และทาส (รอง) เรียบร้อยแล้ว หวังว่าทุกคนจะตั้งค่าได้โดยไม่มีปัญหาใดๆ แสดงความคิดเห็นได้หากคุณประสบปัญหาใดๆ ในขณะติดตั้ง