กำหนดค่า DNS ภายใต้ Linux
การใช้ DNS บน linux เสร็จสิ้นผ่านชุดของรูทีนในไลบรารี C ที่ให้การเข้าถึงระบบชื่อโดเมนอินเทอร์เน็ต (DNS) ไฟล์กำหนดค่าตัวแก้ไข ( resolv.conf
) มีข้อมูลที่รูทีนตัวอ่านจะถูกอ่านในครั้งแรกที่กระบวนการถูกเรียกใช้โดยกระบวนการ กล่าวโดยสรุปกระบวนการที่ขอ DNS จะอ่าน/etc/resolv.conf
ผ่านห้องสมุด เอ็นเอส/etc/nsswitch.conf
เป็นชั้นบนนี้และจะเป็นผู้กำหนด
การกำหนดค่า Linux DNSอยู่ในไฟล์/etc/resolv.conf
แต่มีหลายโปรแกรม / บริการที่ต้องการจัดการและจัดการไฟล์การกำหนดค่า DNS ที่/etc/resolv.conf
โดยอัตโนมัติ ในบางสถานการณ์คุณอาจต้องการจัดการไฟล์นี้ด้วยตนเอง แต่ละโปรแกรม / บริการที่จัดการ DNS มีไฟล์การกำหนดค่าของตัวเองเช่น/etc/dnsmasq.conf
(สำหรับบริการ dnsmasq) และผนวกการกำหนดค่า DNS ที่การเปลี่ยนแปลงการเชื่อมต่อและ / หรือในกิจกรรมอื่น ๆ ... วิธีแก้ปัญหาอย่างรวดเร็วคือการล็อคไฟล์ DNS ด้วยchattr +i /etc/resolv.conf
แต่ไม่แนะนำ ในบางกรณีทางออกที่ดีกว่าคือการตั้งค่าอย่างถูกต้องทุกโปรแกรม / บริการโดยใช้ DNS เช่น (dnsmasq / network-manager / resolvconf / etc)
การกลับมาควบคุม DNS
นี่คือรายการการตั้งค่าที่ละเอียดถี่ถ้วนเพื่อเรียกคืนการควบคุมของ resolv.confและหลีกเลี่ยงการเขียนทับ ( วิธีปิดใช้งาน / ตั้งค่า DNS จากตำแหน่งอื่นนอกเหนือจาก resolv.conf ) หมายเหตุที่ resolvconf เป็นโปรแกรมอิสระจาก resolv.conf เช่นกัน ขึ้นอยู่กับระบบ / การตั้งค่าของคุณคุณอาจไม่มีหนึ่งหรือหลายโปรแกรมที่แสดงไว้ที่นี่
1. Resolvconf:
กำหนดค่าไฟล์
cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4
อัปเดตการกำหนดค่า
sudo resolvconf -u
ปิดใช้งาน resolvconf
systemctl disable --now resolvconf.service
2. บริการ Dnsmasq:
กำหนดค่าไฟล์
cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4
อัปเดตการกำหนดค่า
sudo systemctl restart dnsmasq.service
3. ผู้จัดการเครือข่าย:
กำหนดค่าไฟล์
/etc/NetworkManager/*
ปิดการใช้งาน DNS
$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none
เปิดใช้งาน DNS
$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default
[global-dns]
searches=example.com
[global-dns-domain-*]
ใช้บริการที่ได้รับการแก้ไข
$ cat /usr/lib/NetworkManager/conf.d/resolved.conf
[main]
dns=systemd-resolved
ใช้ resolvconf
$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf
[main]
rc-manager=resolvconf
อัปเดตการกำหนดค่า
systemctl restart NetworkManager.service
4. การเชื่อมต่อเครือข่าย:
กำหนดค่าไฟล์
$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y
dns-nameservers 4.4.4.4 8.8.8.8
อัปเดตการกำหนดค่า
reboot
5. ไคลเอ็นต์ DHCP:
กำหนดค่าไฟล์
$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
อัปเดตการกำหนดค่า
reboot
6. บริการ Rdnssd:
ปิดการใช้งาน rdnssd
systemctl disable --now rdnssd.service
7. บริการที่แก้ไข:
ปิดใช้งานการแก้ไข
systemctl disable --now systemd-resolved.service
8. Netconfig:
กำหนดค่าไฟล์
/etc/sysconfig/network/config
ปิดการใช้งาน netconfig
cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
อัปเดตการกำหนดค่า
reboot
การตั้งค่าเซิร์ฟเวอร์ DNS
ตัวอย่างของการ/etc/resolv.conf
กำหนดค่า
#Cloudflare
nameserver 1.0.0.1
#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4
#Cloudflare
#nameserver 1.1.1.1
#Classic Config
#nameserver 192.168.1.1
#search lan