วิธีการปิดการใช้งาน systemd- แก้ไขและแก้ไข DNS ด้วย dnsmasq?


32

Ubuntu 16.10+ ใช้systemd-resolvedเป็นโปรแกรมแก้ไข DNS

ฉันชอบการตั้งค่าที่ใช้ 16.04 dnsmasqเป็นตัวแก้ไข

ฉันจะทำอย่างนั้นกับ 16.10+ โดยเฉพาะใน 17.04 ได้อย่างไร


บางทีนี่อาจช่วยได้: askubuntu.com/questions/1032450/…
cmak.fr

คำตอบ:


35

dnsmasq แพคเกจยังคงมีอยู่ใน 16.10 และ 17.04

  1. ติดตั้งdnsmasqและการอ้างอิง (หรือดาวน์โหลดแพคเกจอย่างน้อย) ก่อนที่จะปิดการใช้งานsystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. ปิดใช้งานsystemd-resolvedและตรวจสอบว่าdnsmasqกำลังทำงาน:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. ปรุงdnsmasqรส หลังจากใช้การตั้งค่าของคุณให้รีสตาร์ทdnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

หลังจากขั้นตอนที่ 2 คุณอาจไม่มีตัวแก้ไขระบบที่ใช้งานได้จนกว่าขั้นตอนที่ 3 จะเสร็จสมบูรณ์ คุณอาจต้องรีสตาร์ทระบบย่อยการเชื่อมต่อเครือข่าย (หรือเพียงแค่รีบูต) เพื่อให้สามารถdnsmasqทำงานกับการกำหนดค่าเริ่มต้นได้ ในการทดสอบของฉันการเพิ่มเซิร์ฟเวอร์ DNS ที่รู้จัก/etc/dnsmasq.confและเริ่มใหม่dnsmasqก็เพียงพอที่จะทำให้มันทำงานในสภาพแวดล้อม liveCD


คำตอบที่ยอดเยี่ยมและดูเหมือนทางออกเดียวเมื่อปิดใช้งาน NetworkManager ไม่เป็นที่ยอมรับ!
bogl

3
สำหรับฉันนี่เป็นคำตอบที่ดี แต่ยังต้องมีขั้นตอนเพิ่มเติมจากคำตอบของ @ blabla เพิ่มการตั้งค่าdns=dnsmasqไปที่/etc/NetworkManager/NetworkManager.conf
Roberto Tyley

กันที่นี่ หลังจากที่ดิ้นรนกับ systemd ที่ได้รับการแก้ไขและไม่ได้สลับไปยัง dnsmasq ได้ทำเคล็ดลับใน Ubuntu 17.10 ฉันต้องใช้การเพิ่มของ blabla ว่า
Alberto L. Bonfiglio

17

นอกจากคำตอบของ @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
pbhj

1
ขั้นตอนนี้เป็นส่วนเสริมที่จำเป็นสำหรับคำตอบของ @ quixotic สำหรับฉัน (ubuntu 17.04, การติดตั้งแบบเต็มไม่ใช่ LiveCD)
Roberto Tyley

0

ตามคู่มือของsystemd-modified , systemd-modified ให้กับบริการจำแนกชื่อผ่านสามอินเตอร์เฟสที่แตกต่างกัน:

  1. "API ที่มีคุณสมบัติครบถ้วน systemd- แก้ไข exposes บนรถบัส"
  2. "ตัวรับฟัง DNS stub ในเครื่องบนที่อยู่ IP 127.0.0.53 บนอินเทอร์เฟซวนรอบย้อนกลับ"
  3. 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 ชี้ให้เห็นว่าฉันมีอะไรผิดปกติขอบคุณ :))


0

สำหรับ (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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.