วิธีการตั้งค่าเซิร์ฟเวอร์ DNS ด้วยการผูกโดยใช้เซิร์ฟเวอร์ Linux

DNS เซิร์ฟเวอร์ (ระบบชื่อโดเมน) ช่วยให้เราเข้าถึงที่อยู่ IP เฉพาะจากชื่อโดเมน ด้วยวิธีนี้ เราสามารถเข้าถึงเว็บไซต์ต่างๆ ได้โดยใส่ชื่อโดเมนของคุณลงในแถบที่อยู่ของเว็บเบราว์เซอร์โดยตรง นอกจากนี้เรายังมีความเป็นไปได้ในการตั้งค่าเซิร์ฟเวอร์ DNS ในบ้านหรือเครือข่ายท้องถิ่นระดับมืออาชีพ เพื่อเข้าถึงคอมพิวเตอร์เครื่องต่างๆ ในเครือข่ายท้องถิ่นผ่านชื่อโดเมนเฉพาะ โดยไม่ต้องจำที่อยู่ IP ส่วนตัวเสมอไป วันนี้ในบทความนี้เราจะแสดงให้คุณเห็นว่าเราสามารถกำหนดค่าเซิร์ฟเวอร์ DNS บน a . ได้อย่างไร ลินุกซ์ เซิร์ฟเวอร์ที่ใช้ Bind9 ซึ่งเป็นเซิร์ฟเวอร์ DNS ที่ได้รับความนิยมและใช้มากที่สุด

ตั้งค่าเซิร์ฟเวอร์ DNS พร้อมผูกโดยใช้เซิร์ฟเวอร์ Linux

ผูกคืออะไร?

Bind หรือที่เรียกว่า Berkeley Internet Name Domain เป็นซอฟต์แวร์ที่รับผิดชอบในการปฏิบัติงานของเซิร์ฟเวอร์ DNS Bind เป็นมาตรฐานในปัจจุบันและมีการใช้กันอย่างแพร่หลายในระบบปฏิบัติการ Linux และ Unix ดังนั้นหากคุณมีเซิร์ฟเวอร์ที่ใช้ Linux หรือ Unix และคุณต้องการเซิร์ฟเวอร์ DNS เพื่อจัดการการสืบค้นจากเครือข่ายท้องถิ่น Bind จะเป็น สิ่งที่คุณต้องใช้ Bind เวอร์ชันปัจจุบันคือเวอร์ชัน Bind9 และเป็นเวอร์ชันที่ใช้กันทั่วไปในเซิร์ฟเวอร์ทั้งหมด เวอร์ชันก่อนหน้าถือว่าไม่ปลอดภัยและ "เลิกใช้แล้ว" จึงไม่แนะนำให้ใช้

Bind ไม่ได้แทนที่เซิร์ฟเวอร์ DNS เช่นเดียวกับที่เราสามารถใช้ได้จาก Google (8.8.8.8), Cloudflare (1.1.1.1) หรืออื่น ๆ แต่ช่วยเสริมให้สมบูรณ์ ลูกค้าของเครือข่ายท้องถิ่นจะมีเซิร์ฟเวอร์ Bind เป็นเซิร์ฟเวอร์ DNS ที่เรากำหนดค่าในเซิร์ฟเวอร์ Linux ในภายหลังใน Bind นี้ เราจะสามารถกำหนดค่ากฎต่างๆ เพื่อเข้าถึงคอมพิวเตอร์ในพื้นที่ผ่านที่อยู่ IP ส่วนตัวของพวกเขา หากไคลเอนต์ในเครือข่ายท้องถิ่นส่งคำขอ DNS ไปยังเว็บไซต์อินเทอร์เน็ต ตามหลักเหตุผลแล้ว เซิร์ฟเวอร์ DNS จะไม่มีที่อยู่ IP อินเทอร์เน็ตทั้งหมดในฐานข้อมูล ในกรณีนี้ เซิร์ฟเวอร์ DNS สาธารณะจะได้รับการกำหนดค่าให้จัดการกับคำขอเหล่านี้ โดยการส่งต่อ เซิร์ฟเวอร์ที่มีการผูกคำขอและเราจะส่งคืนโดยอัตโนมัติไปยังไคลเอนต์ที่ส่งคำขอ

DNS ของ Windows

เวอร์ชันที่ใช้อยู่ในปัจจุบันคือ Bind 9 ซึ่งเขียนขึ้นตั้งแต่ต้นเพื่อหลีกเลี่ยงปัญหาของเวอร์ชันก่อนๆ นอกจากนี้ยังมีฟีเจอร์ที่สำคัญมาก เช่น DNSSEC ในการมอบความปลอดภัยให้กับโดเมนโดยใช้การเข้ารหัส รวมถึงการปรับปรุงการประมวลผลแบบขนานของต่างๆ การสืบค้น DNS การสนับสนุนอย่างเต็มที่สำหรับเครือข่าย IPv6 และอีกมากมาย แน่นอนว่า Bind เวอร์ชันล่าสุดนี้มีการปรับปรุงด้านความปลอดภัยที่สำคัญมาก ด้วยวิธีนี้ เราจะได้รับการป้องกันจากการโจมตีที่อาจเกิดขึ้นในเวอร์ชันก่อนหน้า

ข้อกำหนดเบื้องต้นก่อนการติดตั้ง Bind

ก่อนที่จะเริ่มต้นด้วยการกำหนดค่าเซิร์ฟเวอร์ DNS ที่มี Bind9 ในระบบปฏิบัติการของเรา ขอแนะนำให้ใส่ IP แบบคงที่บนเซิร์ฟเวอร์ของเรา มิฉะนั้น หากเซิร์ฟเวอร์ DHCP เปลี่ยนที่อยู่ IP ของเรา ลูกค้าของเครือข่ายท้องถิ่นจะสูญเสียการเข้าถึงของเรา เซิร์ฟเวอร์ DNS เพราะจะไม่ "ชี้" ไปยังที่อยู่ IP ส่วนตัวของเรา ในการใส่ IP คงที่ เรามีความเป็นไปได้สองประการ:

  • กำหนดค่า Static DHCP ในเราเตอร์ / ไฟร์วอลล์ที่เรามี โดยใส่ที่อยู่ MAC ของการ์ดเครือข่ายและที่อยู่ IP ที่เราต้องการให้ได้รับเสมอ
  • กำหนดค่าเซิร์ฟเวอร์ Linux ของเราแบบคงที่ ในกรณีนี้ เซิร์ฟเวอร์ DHCP ของเราเตอร์ / ไฟร์วอลล์ควรมีช่วง DHCP ที่อยู่นอกที่อยู่ IP ส่วนตัวที่เราตั้งไว้

ในการกำหนดค่าที่อยู่ IP แบบคงที่ใน Linux เราต้องแก้ไขไฟล์การกำหนดค่า “/ etc / network / interfaces” และใส่ข้อมูลต่อไปนี้:

auto lo
iface lo inet loopback

รถ ens33
iface eth0 inet static
ที่อยู่ 192.168.1.2
255.255.255.0 netmask
192.168.1.1 เกตเวย์
dns-nameservers 192.168.1.2

ต่อไป เราต้องเริ่มบริการใหม่เพื่อใช้การเปลี่ยนแปลงอย่างถูกต้อง (หากเราเปลี่ยน IP ที่เรามีในปัจจุบัน):

sudo service networking restart

เมื่อแก้ไขที่อยู่ IP ของเครือข่ายท้องถิ่นแล้ว เราก็สามารถติดตั้ง Bind ได้

ผูกการติดตั้งบน Linux และการเริ่มต้นระบบ

สิ่งแรกที่เราต้องทำเพื่อกำหนดค่าเซิร์ฟเวอร์ DNS (ผูก) ใน Linux คือการติดตั้งจากที่เก็บ เราจะติดตั้งทั้งเซิร์ฟเวอร์ Bind9 DNS เช่นเดียวกับแพ็คเกจที่แนะนำโดยระบบปฏิบัติการ Debian ดังนั้นเรา ต้องวางไว้ในคอนโซลต่อไป:

sudo apt install bind9 bind9-doc resolvconf python-ply-doc

เมื่อเราติดตั้งแพ็คเกจก่อนหน้าทั้งหมดแล้ว เราต้องไปที่ไดเร็กทอรีของโปรแกรม ซึ่งเป็นที่ที่เราจะต้องเริ่มกำหนดค่าไฟล์ที่จำเป็น:

cd /etc/bind/

ขอแนะนำให้ เข้าถึงไดเร็กทอรีนี้เป็นรูท (sudo su) เพื่อหลีกเลี่ยงปัญหาการอนุญาตถูกปฏิเสธเมื่อคัดลอกไฟล์หรือแก้ไขไฟล์ที่มีอยู่ หากเราทำ “ls -l” เพื่อแสดงรายการไฟล์ทั้งหมดที่เรามีที่นี่ เราจะเห็นสิ่งต่อไปนี้:

อย่างที่คุณเห็น เรามีไฟล์คอนฟิกูเรชันที่แตกต่างกันจำนวนมาก โดยแต่ละไฟล์นั้นเน้นไปที่งานโดยเฉพาะ ในเอกสารทางการของ Bind9 คุณจะพบว่าแต่ละไฟล์มีไว้เพื่ออะไร สมมติว่าต่อจากนี้ไปคุณจะอยู่ในโหมดผู้ใช้ขั้นสูง (รูท) เพื่อแก้ไขหรือคัดลอกไฟล์โดยไม่มีข้อจำกัด

กำหนดค่า Bind forwarders โดยใช้เซิร์ฟเวอร์ DNS สาธารณะ

สิ่งแรกที่เราจะทำคือกำหนดค่าการส่งต่อเซิร์ฟเวอร์ DNS นั่นคือเซิร์ฟเวอร์ DNS สาธารณะเพื่อส่งต่อการสืบค้นไปยังอินเทอร์เน็ต ไฟล์คอนฟิกูเรชันที่รับผิดชอบงานนี้คือ “named.conf.options” สิ่งแรกที่เราทำคือสร้างสำเนาสำรองของไฟล์ ในกรณีที่เราแก้ไขผิดและทุกอย่างหยุดทำงาน:

cp /etc/bind/named.conf.options /etc/bind/named.conf.options.copia

ตอนนี้เราแก้ไขไฟล์โดยเพิ่มเซิร์ฟเวอร์ DNS ในส่วนผู้ส่งต่อ ดังที่คุณเห็นที่นี่:

forwarders {
8.8.8.8;
1.1.1.1;
};

มันจะเป็นดังนี้:

เมื่อเราแก้ไขแล้ว เราจะเริ่มบริการ Bind9 ใหม่เพื่อตรวจสอบว่าทุกอย่างทำงานอย่างถูกต้องและไม่ส่งคืนข้อผิดพลาดใดๆ:

sudo service bind9 restart

ตอนนี้เราจะตรวจสอบว่าทำงานอย่างถูกต้องหรือไม่ ในการดำเนินการนี้ เราดำเนินการคำสั่ง nslookup และเราควรเห็นว่าเซิร์ฟเวอร์ DNS ของเราแก้ไขโดเมนได้อย่างถูกต้อง ในกรณีของเรา ที่อยู่ IP ของเซิร์ฟเวอร์คือ 192.168.231.130:

เมื่อเรากำหนดค่า Bind เพื่อส่งต่อความละเอียดของเว็บไซต์อินเทอร์เน็ตไปยัง DNS สาธารณะ เราจะไปดูวิธีกำหนดค่าเพื่อแก้ไขโดเมนภายใน

กำหนดค่า Bind สำหรับความละเอียดในเครื่อง

ไฟล์คอนฟิกูเรชันที่เราต้องกำหนดค่าตอนนี้คือ named.conf.local ขอแนะนำให้ทำสำเนาสำรองในกรณีที่มีสิ่งผิดปกติเกิดขึ้นขณะกำหนดค่า สำหรับสิ่งนี้เราดำเนินการ:

cp /etc/bind/named.conf.local /etc/bind/named.conf.local.copia

เมื่อเราสำรองข้อมูลเสร็จแล้ว เราจะต้องแก้ไขไฟล์การกำหนดค่า named.conf.local เพื่อดำเนินการกำหนดค่าต่อไป ในไฟล์คอนฟิกูเรชันนี้ เราจะต้องใส่โซนที่เราอ้างถึง และไฟล์คอนฟิกูเรชันการโยงที่มีคอนฟิกูเรชันทั้งหมด ดังนั้น เราสามารถปล่อยให้มันเป็นดังนี้:

zone "redlocal.com" {
type master;
file "/etc/bind/db.redlocal";
};

เป็นสิ่งสำคัญที่ “ไฟล์” หมายถึงไฟล์การกำหนดค่าที่เรานำเข้าและเรากำลังจะกำหนดค่าในขณะนี้

ตอนนี้เราต้องคัดลอกฐานข้อมูลที่เรามีใน "db.local" ให้ชื่อ " db.redlocal ” ที่เราได้กำหนดไว้ในไฟล์ที่แล้ว

cp /etc/bind/db.local /etc/bind/db.redlocal

ตอนนี้เราแก้ไขไฟล์การกำหนดค่าที่มาพร้อมกับข้อมูลจำนวนมากโดยค่าเริ่มต้น และปรับให้เข้ากับความสนใจของเรา

สิ่งแรกที่เราต้องทำคือแก้ไข SOA ที่มาในส่วนบนด้วยชื่อโดเมนที่เราเลือกไว้ในเครื่อง ในกรณีนี้ จะเป็น "red.redlocal.com" จากนั้นเราจะแก้ไขไฟล์ configuration ทั่วไป กับโดเมนและโดเมนย่อยที่เราต้องการ ไฟล์การกำหนดค่าของเราจะเป็นดังนี้:

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.redlocal.com. root.red.redlocal.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;

@ ใน NS ns1.redlocal.com
@ ใน 192.168.231.130
ns1 ใน 192.168.231.130
เราเตอร์ใน A 10.11.1.1
pc1 ใน 10.11.1.2

เมื่อเราบันทึกไฟล์การกำหนดค่าแล้ว เราจะตรวจสอบไวยากรณ์ด้วยคำสั่งต่อไปนี้:

named-checkzone redlocal.com /etc/bind/db.redlocal

ตอนนี้เราเริ่มกระบวนการผูกใหม่ด้วยคำสั่งต่อไปนี้:

sudo service bind9 restart

เรามีทุกอย่างพร้อมสำหรับการทดสอบแบตเตอรีและตรวจสอบว่าเราได้ทำทุกอย่างถูกต้องแล้ว เพื่อตรวจสอบว่าทุกอย่างทำงานได้ดี เราต้องรันคำสั่งต่อไปนี้:

host router.redlocal.com

มันจะแสดงให้เราเห็นต่อไปนี้ที่อยู่ IP ของเราเตอร์:

root@bron-debian:/etc/bind# host router.redlocal.com
router.redlocal.com has address 10.11.1.1

เราสามารถทำเช่นเดียวกันกับ PC1:

host pc1.redlocal.com

เราจะเห็นสิ่งนี้:

root@bron-debian:/etc/bind# host pc1.redlocal.com
pc1.redlocal.com has address 10.11.1.2

เมื่อเราจัดการแก้ไขโดเมนภายในอย่างถูกต้องแล้ว โดยส่งคืนที่อยู่ IP ที่เกี่ยวข้อง เราสามารถ ping ผ่านโดเมนได้โดยไม่มีปัญหา:

root@bron-debian:/etc/bind# ping router.redlocal.com
PING router.redlocal.com (10.11.1.1) 56(84) bytes of data.
64 bytes from 10.11.1.1 (10.11.1.1): icmp_seq=1 ttl=128 time=0.413 ms
64 bytes from 10.11.1.1 (10.11.1.1): icmp_seq=2 ttl=128 time=0.401 ms
^C
--- router.redlocal.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 28ms
rtt min/avg/max/mdev = 0.401/0.407/0.413/0.006 ms

ตอนนี้เรากำลังจะกำหนดค่าความละเอียดย้อนกลับของโดเมน

การแก้ปัญหาโดเมนย้อนกลับ

ตอนนี้ เราจะกำหนดค่าเซิร์ฟเวอร์ DNS เพื่อแก้ไขโดเมนแบบย้อนกลับ ใส่ที่อยู่ IP และบอกเราว่าที่อยู่ IP นั้นเป็นของโดเมนใด เพื่อให้บรรลุเป้าหมายของเรา เราต้องเพิ่ม บรรทัดต่อไปนี้ไปยังไฟล์ /etc/bind/named.conf.local ที่เราใช้ก่อนหน้านี้:

zone "192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};

เรายังต้องคัดลอกไฟล์การกำหนดค่าเริ่มต้นเพื่อแก้ไข จากไฟล์ db.127 เราสร้าง db.192:

cp /etc/bind/db.127 /etc/bind/db.192

เมื่อเราสร้างเสร็จแล้ว ให้แก้ไขด้วยข้อมูลต่อไปนี้:

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.redlocal.com. root.red.redlocal.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.redlocal.com.
ns1 IN A 192.168.231.130
130.231.168 IN PTR redlocal.com

เมื่อเราบันทึกไฟล์การกำหนดค่าแล้ว เราจะตรวจสอบไวยากรณ์ด้วยคำสั่งต่อไปนี้:

named-checkzone 192.168.231.130 /etc/bind/db.192

เราควรจะได้รับสิ่งนี้:

named-checkzone 168.192.in-addr.arpa db.192
zone 168.192.in-addr.arpa/IN: loaded serial 1
OK

ตอนนี้เราเริ่มกระบวนการผูกใหม่ด้วยคำสั่งต่อไปนี้:

sudo service bind9 restart

และเราตรวจสอบว่าทำงานอย่างถูกต้อง:

host 192.168.231.130

เราหวังว่าบทแนะนำ Bind ฉบับสมบูรณ์นี้จะช่วยให้คุณตั้งค่าเซิร์ฟเวอร์ DNS ของคุณเองในเครื่องได้