Ubuntu 16.10+ ใช้systemd-resolved
เป็นโปรแกรมแก้ไข DNS
ฉันชอบการตั้งค่าที่ใช้ 16.04 dnsmasq
เป็นตัวแก้ไข
ฉันจะทำอย่างนั้นกับ 16.10+ โดยเฉพาะใน 17.04 ได้อย่างไร
Ubuntu 16.10+ ใช้systemd-resolved
เป็นโปรแกรมแก้ไข DNS
ฉันชอบการตั้งค่าที่ใช้ 16.04 dnsmasq
เป็นตัวแก้ไข
ฉันจะทำอย่างนั้นกับ 16.10+ โดยเฉพาะใน 17.04 ได้อย่างไร
คำตอบ:
dnsmasq
แพคเกจยังคงมีอยู่ใน 16.10 และ 17.04
ติดตั้งdnsmasq
และการอ้างอิง (หรือดาวน์โหลดแพคเกจอย่างน้อย) ก่อนที่จะปิดการใช้งานsystemd-resolved
:
sudo apt-get install dnsmasq
ปิดใช้งานsystemd-resolved
และตรวจสอบว่าdnsmasq
กำลังทำงาน:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
ปรุงdnsmasq
รส หลังจากใช้การตั้งค่าของคุณให้รีสตาร์ทdnsmasq
:
sudo systemctl stop dnsmasq
sudo systemctl start dnsmasq
หลังจากขั้นตอนที่ 2 คุณอาจไม่มีตัวแก้ไขระบบที่ใช้งานได้จนกว่าขั้นตอนที่ 3 จะเสร็จสมบูรณ์ คุณอาจต้องรีสตาร์ทระบบย่อยการเชื่อมต่อเครือข่าย (หรือเพียงแค่รีบูต) เพื่อให้สามารถdnsmasq
ทำงานกับการกำหนดค่าเริ่มต้นได้ ในการทดสอบของฉันการเพิ่มเซิร์ฟเวอร์ DNS ที่รู้จัก/etc/dnsmasq.conf
และเริ่มใหม่dnsmasq
ก็เพียงพอที่จะทำให้มันทำงานในสภาพแวดล้อม liveCD
dns=dnsmasq
ไปที่/etc/NetworkManager/NetworkManager.conf
นอกจากคำตอบของ @quixotic:
ตรวจสอบให้แน่ใจว่าคุณมี /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
หากคุณต้องการเพิ่มรีสตาร์ท NetworkManager ดังนี้:
sudo systemctl restart NetworkManager
และ/etc/resolv.conf
ความต้องการที่จะเป็น symlink /var/run/NetworkManager/resolv.conf
ไป สามารถทำได้เช่นนี้
sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
dns=default
และทำงานได้ดีเพราะฉันมีชื่อเซิร์ฟเวอร์ที่กำหนดโดย NetworkManager แทนการกำหนดไว้ใน dnsmasq; สิ่งนี้ใช้ได้กับฉัน - NM ได้รับเนมเซิร์ฟเวอร์จากการตั้งค่าที่ทำในการกำหนดค่า NM ของ KDE ผ่านซิสเต็มเทรย์ ฉันใช้ IP คงที่ในเครือข่ายในบ้านของฉัน FWIW
ตามคู่มือของsystemd-modified , systemd-modified ให้กับบริการจำแนกชื่อผ่านสามอินเตอร์เฟสที่แตกต่างกัน:
glibc getaddrinfo (3) API ตามที่กำหนดโดย RFC3493 และฟังก์ชั่นตัวแก้ไขที่เกี่ยวข้องรวมถึง gethostbyname (3) API นี้ได้รับการสนับสนุนอย่างกว้างขวางรวมถึงนอกเหนือจากแพลตฟอร์ม Linux ในรูปแบบปัจจุบันจะไม่เปิดเผยข้อมูลสถานะการตรวจสอบความถูกต้อง DNSSEC และเป็นแบบซิงโครนัสเท่านั้น API นี้ได้รับการสนับสนุนโดย glibc Name Service Switch (nss (5)) การใช้งานโมดูล glibc NSS จำเป็นต้องมีการแก้ไข nss (8) เพื่อให้ฟังก์ชันตัวแก้ไข NSS ของ glibc สามารถแก้ไขชื่อโฮสต์ผ่านระบบที่แก้ไขแล้ว
ดูเหมือนว่าอินเทอร์เฟซสองรายการแรกจะไม่รบกวนการแก้ไข DNS ปกติและสำหรับฉันปัญหาน่าจะอยู่ที่สาม
ในคู่มือการแก้ไข nss :
ในการเปิดใช้งานโมดูล NSS ให้เพิ่ม "แก้ไข" ไปยังบรรทัดที่ขึ้นต้นด้วย "hosts:" ใน /etc/nsswitch.conf ขอแนะนำให้วาง "แก้ไข" ก่อนเวลาใน /etc/nsswitch.conf ของ "โฮสต์:" บรรทัด (แต่หลังจากรายการ "ไฟล์" หรือ "mymachines") ก่อนหน้ารายการ "dns" หากมีอยู่แล้วตามด้วย "[! UNAVAIL = return]" เพื่อให้แน่ใจว่ามีการส่งการสอบถาม DNS ผ่านการแก้ไขระบบเสมอ (8) ถ้ามันกำลังทำงานอยู่ แต่จะถูกส่งไปยัง nss-dns หากบริการนี้ไม่พร้อมใช้งาน
ดังนั้นสิ่งที่เป็นสิ่งจำเป็นที่จะทำให้ "DNS" แจ๋ว "แก้ไข" ใน "เจ้าภาพ" สายของ/etc/nsswitch.conf และจากนั้นก็getaddrinfo
ควรที่จะปฏิบัติตามเพียง/etc/resolv.conf
โซลูชันนี้ป้องกันระบบที่แก้ไขไม่ได้จากการจัดการการร้องขอการแก้ไข DNS ทั้งหมดและไม่ได้ จำกัด อยู่ที่ผู้จัดการเครือข่ายเฉพาะ และยังทำให้แน่ใจว่าบริการ LLMNR และ mDNS ทำงานตามปกติ
(ฉันไม่คุ้นเคยกับการแก้ปัญหาชื่อภายใต้ Linux และยังไม่แน่ใจเกี่ยวกับสิ่งที่ฉันเข้าใจจากคู่มือเหล่านี้ Pleaes ชี้ให้เห็นว่าฉันมีอะไรผิดปกติขอบคุณ :))
สำหรับ (X) Ubuntu 18.04 (ดูคำตอบของฉันที่ stackexchange )
นี่คือสำเนาของมัน (ฉันควรทำสำเนาหรือไม่)
นี่คือวิธีแก้ปัญหาสำหรับ (X) Ubuntu 18.04 Bionic
ติดตั้ง dnsmasq
sudo apt install dnsmasq
ปิดการใช้ฟังตัวแก้ไข systemd ที่พอร์ต 53 (อย่าแตะ /etc/systemd/resolved.conf เนื่องจากอาจถูกเขียนทับเมื่ออัพเกรด):
$ cat /etc/systemd/resolved.conf.d/noresolved.conf
[Resolve]
DNSStubListener=no
และเริ่มต้นใหม่
$ sudo systemctl restart systemd-resolved
(หรือปิดใช้งานอย่างสมบูรณ์โดย $ sudo systemctl disable systemd-resolved.service
)
ลบ /etc/resolv.conf และสร้างอีกครั้ง สิ่งนี้มีความสำคัญเนื่องจาก resolv.conf เป็นลิงก์สัญลักษณ์ไปยัง /run/systemd/resolve/stub-resolv.conf ตามค่าเริ่มต้น หากคุณจะไม่ลบลิงก์สัญลักษณ์ไฟล์จะถูกเขียนทับโดย systemd เมื่อรีบูตเครื่อง (แม้ว่าเราจะปิดการใช้งาน systemd- แก้ไขแล้ว!) NetworkManager (NM) จะตรวจสอบว่าเป็นลิงค์สัญลักษณ์เพื่อตรวจสอบการกำหนดค่าที่ระบบแก้ไขหรือไม่
$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf
ปิดใช้งานการเขียนทับของ /etc/resolv.conf โดย NM (นอกจากนี้ยังมีตัวเลือก rc-manager แต่มันไม่ทำงานแม้ว่ามันจะอธิบายไว้ในคู่มือ):
$ cat /etc/NetworkManager/conf.d/disableresolv.conf
[main]
dns=none
และรีสตาร์ทมัน:
$ sudo systemctl restart NetworkManager
บอก dnsmasq ให้ใช้ resolv.conf จาก NM:
$ cat /etc/dnsmasq.d/nmresolv.conf
resolv-file=/var/run/NetworkManager/resolv.conf
และรีสตาร์ทมัน:
$ sudo systemctl restart dnsmasq
ใช้ dnsmasq สำหรับการแก้ปัญหา:
$ cat /etc/resolv.conf
# Use local dnsmasq for resolving
nameserver 127.0.0.1