วิธีเพิ่ม dnsmasq และแก้ไข systemd (18.04)


10

ฉันต้องการได้รับความละเอียด dns ที่รวดเร็วด้วย dnsmasq และแก้ไข systemd-default ที่เป็นค่าเริ่มต้น

กำลังมองหาวิธีที่สง่างามในการทำสิ่งนี้


คุณทราบหรือไม่ว่า systemd แก้ไขแล้วยังแคชการค้นหา DNS คุณไม่จำเป็นต้องใช้ dnsmasq บนระบบที่มีการแก้ไข systemd คุณควรอ่านการแก้ไข systemd มีประโยชน์หรือไม่
Aeyoun

ฉันรู้ - แต่มี 'รายละเอียด' ที่สำคัญมาก ... - dnsmasq เป็นแคช dns ขนาดใหญ่ - แคช dns ของ systemd ที่แก้ไขแล้วมีขนาดเล็กมากและไม่สามารถปรับได้ - ความเร็วความละเอียด dns จะดีขึ้นมากเนื่องจากแคชขนาดใหญ่ จาก dnsmasq ได้รับการเติมเต็มโดยการร้องขอ
cmak.fr

แคชที่ไม่ได้กำหนดค่าเริ่มต้นใน systemd- modified มีขนาดใหญ่กว่า dnsmasq
Aeyoun

ที่จริงแล้ว dnsmasq ทำอะไรได้มากกว่าระบบที่แก้ไขแล้ว ดูgist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666และgist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-shแต่ไม่กี่ข้อ ..
Julius

@Aeyoun: โดยการอ่านซอร์สโค้ดที่ได้รับการแก้ไขแล้ว systemd คุณจะเห็นว่าขีด จำกัด แคช dns ของ 4096 เป็นไบต์ไม่ใช่รายการ dnsmasq มีขนาดแคชที่ใหญ่ขึ้นและที่กำหนดค่าได้
cmak.fr

คำตอบ:


10

ฉันต้องการได้รับความละเอียด dns ที่รวดเร็วด้วย dnsmasq และให้การตั้งค่าเริ่มต้น systemd-แก้ไข / NetworkManager การตั้งค่ามิได้ถูกแตะต้องสำหรับการใช้ในอนาคต ใช่แคช DNS ขนาดใหญ่ของ dnsmasq สามารถปรับปรุงความเร็วในการเรียกดูได้ ใช่เป้าหมายคือเพื่อให้การตั้งค่า dns แนะนำเริ่มต้นเป็น 18.04

  1. ติดตั้ง dnmasq
  2. กำหนดค่า (ฟังที่อยู่และเซิร์ฟเวอร์ DNS)
  3. กำหนดค่า NetWorkManager สำหรับที่อยู่เซิร์ฟเวอร์ dns ด้วยตนเอง
  4. ตรวจสอบการยืนยัน

1 - ด้วย sudo

apt-get -y install dnsmasq

2 - ด้วย sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - ด้วย USER ให้กำหนดค่า NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - ตรวจสอบการตรวจสอบ

  • ระบบแก้ไขได้ฟัง 127.0.0.53 ตามควรโดยค่าเริ่มต้น
  • dnsmasq ฟัง 127.0.0.1 ตามที่กำหนดไว้ใน / etc / dnsmasq
  • แก้ไข systemd เอา 127.0.0.1 จาก NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1

1

ฉันพยายามหาวิธีแก้ปัญหาที่สมเหตุสมผลและดูเหมือนว่ามีวิธีการต่างกัน

ฉันต้องการที่จะอยู่ในรูปแบบการกระจายมากที่สุดโดยรักษาความต้องการทางธุรกิจทั้งหมดให้สมบูรณ์ นี่คือสิ่งที่ฉันรวบรวมและทดสอบเพื่อทำความสะอาดอูบุนตู 18.04 และ KDE Neon รสชาติ:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(โปรดทราบว่าข้อแตกต่างทั่วไปกับคำตอบข้างต้นคือ NetworkManager จัดการการมอบหมายเซิร์ฟเวอร์ DNS DNS โดยอัตโนมัติ


ทำงานได้ แต่จะเกิดอะไรขึ้นเมื่อผู้ดูแลเครือข่ายได้รับการอัพเกรดด้วย apt-get --upgrade
cmak.fr

บอกตามตรงฉันไม่รู้ มันขึ้นอยู่กับสิ่งที่ผู้ดูแลของ Ubuntu 18.04 ตัดสินใจ หากเขา / เธอทำให้บริการที่แก้ไขโดย systemd ถูกปิดใช้งานและจะไม่แก้ไข NetworkManager.conf (ซึ่งโดยค่าเริ่มต้นได้รับการแก้ไขในกรณีที่มีข้อขัดแย้ง) จากนั้นก็สามารถอยู่รอดได้จนถึง Ubuntu 20.04 ซึ่งจะได้รับการแก้ไขโดยหวังว่า
Venca B สแปม

0

อย่างที่คุณทราบแล้วDockerคัดลอกไฟล์โฮสต์ /etc/resolv.confไปยังคอนเทนเนอร์ แต่จะลบเนมเซิร์ฟเวอร์ภายใน

ทางออกของฉันในการแก้ไขปัญหานี้คือการให้ใช้systemd-resolvdและNetworkManagerแต่เพิ่มdnsmasqและใช้มันเพื่อ "ไปข้างหน้า" หางภาชนะDNSแบบสอบถามเพื่อsystemd-resolvd

คู่มือทีละขั้นตอน:

  • ทำให้/etc/resolv.confเป็นไฟล์ "ของจริง" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • สร้างไฟล์/etc/NetworkManager/conf.d/systemd-resolved-for-docker.confเพื่อบอกNetworkManagerเพื่อแจ้งให้systemd-resolvd ทราบแต่จะไม่แตะที่/etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • ติดตั้งdnsmasq sudo apt-get -y install dnsmasq
  • กำหนดค่าdnsmasqใน/etc/dnsmasq.confเพื่อฟังการสืบค้นDNS ที่มาจากDockerและใช้เซิร์ฟเวอร์ชื่อ systemd-resolvd # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • แก้ไข/etc/resolv.confเพื่อใช้เนมเซิร์ฟเวอร์systemd-resolvd (127.0.0.53) และโฮสต์IP (172.17.0.1) ในเครือข่าย Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • เริ่มบริการใหม่ sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

สำหรับข้อมูลเพิ่มเติมดูโพสต์ของฉัน (เป็นภาษาสเปน) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/


-1

Ubuntu 18.10

IMHO หากคุณกำลังจะใช้งาน dnsmasq คุณควรกำหนดที่อยู่ IP ของคุณแบบคงที่แทนที่จะรับจาก dhcp วิธีนี้คุณสามารถปิดการใช้งานระบบที่แก้ไขทั้งหมดพร้อมกันได้

  1. sudo apt-get install dnsmasq

  2. sudo systemctl ปิดการใช้งาน systemd- แก้ไข

  3. sudo systemctl หยุด systemd แก้ไข

  4. กำหนดที่อยู่ IP ของคุณด้วยตนเองเกตเวย์และกำหนดที่อยู่ IP ให้กับเครื่องของคุณเป็น DNS

  5. กำหนดค่า /etc/dnsmasq.conf (จริงๆ ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl เปิดใช้งาน dnsmasq

  7. รีบูต
  8. sudo systemctl status dnsmasq

  9. ชี้ dhcp บนเซิร์ฟเวอร์ dhcp ของคุณไปยังเซิร์ฟเวอร์ dnsmasq ใหม่ของคุณ (.. หาก yumpto)


ฉันจะไม่ใช้สิ่งที่คุณอธิบาย ฉันต้องการให้ระบบเริ่มต้นที่เหลืออยู่ไม่ได้ถูกแตะต้องสำหรับการใช้งาน NetworkManager ในอนาคต
cmak.fr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.