กำหนดค่า dnsmasq ของ NetworkManager ให้ใช้ / etc / hosts


22

ฉันได้ติดตั้ง DNSMASQ แล้ว แต่ไม่ได้เริ่มต้นเนื่องจากพอร์ต 53 ไม่ว่าง

ฉันพบว่าอูบุนตูมีแพ็คเกจ dnsmasq แล้วและมันใช้งานได้

ตอนนี้ปัญหาคือ ... ฉันแค่ต้องการที่จะแก้ไขโฮสต์ของฉันใน / etc / hosts ผ่านมัน

เช่น: nslookup somehostonlan localhost ได้รับการแก้ไขไปยัง IP ที่นำมาจากไฟล์ / etc / hosts

แต่สิ่งนี้ไม่ได้เกิดขึ้น

ทำไม? BTW เนื่องจากเซิร์ฟเวอร์แคช DNS นั้นทำงานได้ดี ฉันแค่อยากให้มันแก้ไขโฮสต์จากไฟล์ / etc / hosts นั่นคือทั้งหมด

คำตอบ:


22

เพื่อเพิ่มความเร็วอินเทอร์เน็ต ubuntu 12.04 ได้เพิ่มปลั๊กอินไปยัง NetworkManager เพื่อเริ่ม dnsmasq เซิร์ฟเวอร์ DNS ภายในเครื่องที่แคชรายการ dns ปัญหาคือปลั๊กอินมีการเข้ารหัสฮาร์ดคอร์ --no-hosts string

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

sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.bak | sed -e "s/^\(dns=dnsmasq\)$/#\1/" > /etc/NetworkManager/NetworkManager.conf'
sudo restart network-manager

โซลูชันอื่นคือการตัด dnsmasq เพื่อกรองอาร์กิวเมนต์ที่ไม่ต้องการ:

sudo mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bin
sudo bash -c 'cat > /usr/sbin/dnsmasq' << EOF
#!/bin/sh
dnsmasq=/usr/sbin/dnsmasq.bin

exec $dnsmasq `echo $@ | sed -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

โปรดทำเครื่องหมายข้อผิดพลาดว่าส่งผลกระทบต่อคุณ

โซลูชันอื่นที่ไม่มีไฟล์ระบบปะ

cat /etc/NetworkManager/dnsmasq.d/hosts.conf 

addn-hosts=/etc/hosts

7

ข้อผิดพลาดนี้ยังส่งผลกระทบต่อฉันแม้ตอนนี้ (Ubuntu 14.04)

ในที่สุดฉันก็พบทางออกที่เพียงเพิ่มบรรทัดนี้ 'addn-hosts = / etc / hosts' ไปยังไฟล์การกำหนดค่า dnsmasq ของแพ็คเกจ Newworkmanager

echo 'addn-hosts=/etc/hosts' > /etc/NetworkManager/dnsmasq.d/etc-hosts
service network-manager restart

แนวคิดคือเรากำลังเพิ่ม / etc / hosts เป็นไฟล์โฮสต์เพิ่มเติม

แม้ว่าฉันจะสามารถหาวิธีแก้ปัญหาตัวเลือกฮาร์ดโค้ด '- ไม่มีโฮสต์' ในไฟล์ไบนารี / usr / sbin / NetworkManager ทำให้ฉันผิดหวัง


7

เมื่อเดือนสิงหาคม 2558 คำตอบอื่น ๆ นั้นล้าสมัยแล้ว

คำตอบง่ายๆ

  1. สร้าง /etc/NetworkManager/dnsmasq.d/hosts.confสร้าง
  2. ใส่สายเหมือนaddress=/whatever/1.2.3.4ในนั้น ดูเอกสาร (ค้นหา--address) address/.whatever./1.2.3.4สัญลักษณ์แทนเป็นไปได้:
  3. ฆ่าdnsmasq( บั๊ก )
  4. รีสตาร์ทมัน: $ service network-manager restart.

1

dnsmasq ควรใช้/etc/hostsไฟล์โดยอัตโนมัติ สิ่งนี้สามารถปิดการใช้งานโดย-hตัวเลือกบรรทัดคำสั่งหรือno-hostsตัวเลือกการกำหนดค่า ฉันไม่คาดหวังว่าจะถูกตั้งค่าในการกำหนดค่าเริ่มต้น

ลองบังคับให้ dnsmasq โหลดไฟล์โฮสต์อีกครั้ง (การเปลี่ยนแปลงไฟล์การกำหนดค่าต้องเริ่มต้นใหม่) คำสั่งเหล่านี้ควรทำงานได้

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

หากคุณกำลังทำงานกับระบบที่no-hostsระบุไว้คุณควรจะสามารถใช้addn-hostsตัวเลือกเพื่อแทนที่มัน โดยปกติจะใช้เพื่ออ่านไฟล์เพิ่มเติมใน/etc/hostsรูปแบบ สามารถใช้เพื่อระบุข้อมูลโฮสต์เพิ่มเติมที่คุณต้องการให้ DNS ระบุ แต่ไม่ต้องการใน/etc/hostsไฟล์ของคุณ สิ่งนี้สามารถใช้เพื่ออนุญาตให้ผู้จัดการแพคเกจและเครื่องมือที่เกี่ยวข้องในการจัดการ/etc/hostsในขณะที่ข้อมูลโฮสต์เพิ่มเติมมีให้ในไฟล์ทางเลือก


/etc/dnsmasq.conf มีตัวเลือกทั้งหมดที่แสดงความคิดเห็น โหลด
ซ้ำ

ฉันไม่รู้ว่าฉันทำอะไร ดูเหมือนว่าจะใช้งานได้ในขณะนี้
bakytn

3
ทำไมคุณต้องตอบคำถามนี้เมื่อคุณไม่รู้คำตอบจริง ๆ ? ความจริงที่ว่าคุณ "ไม่คาดหวังว่าจะถูกตั้งค่าในการกำหนดค่าเริ่มต้น" ไม่ได้ทำให้เป็นกรณีที่มันถูกตั้งค่าจริงและฮาร์ดโค้ดลงใน dnsmasq ใน NetworkManger
Justin Buser

dnsmasq จะต้องเริ่มต้นใหม่เพื่อที่จะโหลดการเปลี่ยนแปลงในไฟล์การตั้งค่า
txwikinger

@txwikinger ไฟล์ตัวเลือกมากมายจะอ่านซ้ำเมื่อdnsmasqได้รับHUPสัญญาณ ซึ่งรวมถึงทั้งไฟล์/etc/hostsและ /etc/ethersเวลารีสตาร์ทเร็วพอที่จะทำให้ลูกค้าไม่ได้รับคำตอบ
BillThor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.