ฉันจะตั้งค่าความละเอียดของโดเมนไวด์การ์ดในท้องถิ่น (127.0.0.1) ในวันที่ 18.04 ได้อย่างไร


18

ใน Ubuntu 14.04 ฉันใช้ dnsmasq เพื่อแก้ไขโดเมน wild.com example.com เป็นเครื่องท้องถิ่น (คอมพิวเตอร์เดสก์ท็อปที่บ้าน)

หลังจากที่ได้อ่านหนังสือมากมายรอบตัวฉันก็ไม่สามารถใช้ชีวิตของฉันได้เหมือนกันในการติดตั้งที่สะอาด 18.04

ทั้งหมดที่ฉันต้องการบรรลุในขณะนี้คือ:

  • สำหรับping example.com การ ping 127.0.0.1 และไม่ใช่ 93.184.216.34;
  • สำหรับping anysubdomain.example.com การ ping ยัง 127.0.0.1;
  • และสำหรับping google.com การ ping google.com จริงผ่านเราเตอร์ / IP DNS

แน่นอนว่ามันต้องเรียบง่าย

แต่ฉันก็นิ่งงัน ฉันได้รับการแก้ไขของ example.com แต่มีค่าใช้จ่ายในการทำลายทุกอย่างอื่น

ฉันจะทำสิ่งนี้ได้อย่างไร


1
ทำไมไม่ติดตั้ง dnsmasq อย่างที่คุณทำใน 14.04?
vidarlo

1
@ vidarlo แน่นอนว่าเป็นสิ่งแรกที่ฉันทำตามที่ระบุไว้ในคำถามของฉัน แต่แตกต่างจาก 14.04 ที่ส่งผลให้เกิดข้อผิดพลาด "ล้มเหลวในการสร้างซ็อกเก็ตฟังสำหรับพอร์ต 53: ที่อยู่ใช้งานแล้ว" ข้อผิดพลาด คำตอบที่ฉันยอมรับก็ใช้ได้ดีโดยไม่ต้องติดตั้ง dnsmasq อย่างชัดเจน
นิคไรซ์

คำตอบ:


30

นี่คือขั้นตอนสำหรับ Ubuntu 18.04 มันนิด ๆ หน่อย ๆ ความยาวตั้งแต่systemd-resolvedไม่เล่นเป็นอย่างดีกับเมื่อกำหนดค่าด้วยNetworkManagerdnsmasq

แต่ฉันยังคงแนะนำให้เริ่มต้นdnsmasqจากNetworkManagerเพราะการเปลี่ยนแปลงการเชื่อมต่อเครือข่าย (WIFI, สาย, ... ) จะถูกจัดการอย่างโปร่งใส

เปิดใช้งาน dnsmasq ใน NetworkManager

แก้ไขไฟล์/etc/NetworkManager/NetworkManager.confและเพิ่มบรรทัดdns=dnsmasqใน[main]ส่วนมันจะมีลักษณะดังนี้:

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

ให้ NetworkManager จัดการ /etc/resolv.conf

sudo rm /etc/resolv.conf ; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

กำหนดค่า example.com

echo 'address=/.example.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/example.com-wildcard.conf

โหลดซ้ำNetworkManagerและทดสอบ

NetworkManager ควรได้รับการโหลดใหม่เพื่อให้การเปลี่ยนแปลงมีผล

sudo systemctl reload NetworkManager

จากนั้นเราสามารถยืนยันได้ว่าเราสามารถเข้าถึงไซต์ปกติ:

dig askubuntu.com +short
151.101.129.69
151.101.65.69
151.101.1.69
151.101.193.69

และสุดท้ายตรวจสอบว่าexample.comและโดเมนย่อยได้รับการแก้ไขเป็น127.0.0.1:

dig example.com askubuntu.example.com a.b.c.d.example.com +short
127.0.0.1
127.0.0.1
127.0.0.1

คุณหมายความว่าอย่างไรกับ "systemd-แก้ปัญหาเล่นได้ไม่ดีกับ NetworkManager"?
เซบาสเตียนสตาร์

1
เมื่อ NetworkManager ใช้ dns = dnsmasq ควรบอก systemd- แก้ไขให้ใช้ dnsmasq อาจเป็นไปโดยอัตโนมัติ
pim

1
ขอบคุณมันทำงานได้อย่างสมบูรณ์แบบ! ดูเหมือนว่าฉันจะไม่ให้รางวัลแก่คุณอีกหนึ่งชั่วโมงและเพราะมันหายไปหนึ่งในตอนเช้าที่นี่ฉันออกไปนอนแล้วและจะทำอย่างนั้นเมื่อฉันสลับกลับในวันพรุ่งนี้
นิคไรซ์

2
น่ากลัว ฉันอ่านเทคนิคต่าง ๆ มากมาย นี่คือสิ่งที่ใช้งานได้ในที่สุด
Redsandro

3
สำหรับผู้ที่ต้องการเปลี่ยนกลับเป็นระบบที่แก้ไขแล้วให้/etc/resolv.confชี้ไปที่/run/systemd/resolve/stub-resolv.confค่าเริ่มต้น
Pothi Kalimuthu

2

ก่อนอื่นตรวจสอบให้แน่ใจว่าใน/etc/NetworkManager/NetworkManager.confบรรทัดต่อไปนี้ไม่มีอยู่หรือแสดงความคิดเห็น:

dns=dnsmasq

รีสตาร์ท NetworkManager:

sudo systemctl restart NetworkManager

ตรวจสอบให้แน่ใจว่า dnsmasq ที่ควบคุมโดย NetworkManager ไม่ทำงานอีกต่อไปไม่ว่าจะด้วยการฆ่ากระบวนการหรือการรีบูตระบบของคุณ

จากนั้นติดตั้ง dnsmasq:

sudo apt install dnsmasq

เพิ่มรายการต่อไปนี้ใน/etc/dnsmasq.d/example.com:

address=/example.com/127.0.0.1

รีสตาร์ท dnsmasq:

sudo systemctl restart dnsmasq

ตอนนี้คุณควรมีการแทนที่ไวด์การ์ด dns สำหรับ example.com


1
ฉันทำงานนี้ไม่ได้ ทันทีหลังจากการติดตั้งขั้นต่ำที่สะอาดหมดจด (ด้วยตัวเลือก "ลบดิสก์") sudo apt install dnsmasqแสดงว่า "ไม่สามารถสร้างซ็อคเก็ตการฟังสำหรับพอร์ต 53: ที่อยู่ใช้งานไม่ได้" ฉันยังคงดำเนินต่อไปจนจบในกรณีที่ขั้นตอนต่อมาแก้ไขได้ แต่มันไม่ได้และสิ่งนี้ไม่ได้ผล
นิคไรซ์

จากนั้น dnsmasq ที่เริ่มต้นโดย NetworkManager ยังคงทำงานอยู่ ดังนั้นจึงควรปิดการใช้งานในที่สุดก็ฆ่าในที่สุดและจากนั้นควรจะติดตั้งแพคเกจ dnsmasq
เซบาสเตียนสตาร์

ขอบคุณเซบาสเตียน อย่างไรก็ตามฉันยอมรับคำตอบของพิมที่ทำงานได้อย่างไร้ที่ติดังนั้นฉันสามารถเดินหน้าต่อไปได้โดยไม่ต้องเล่นอีกต่อไป
นิคไรซ์

@NickRice ไม่มีปัญหากับสิ่งนี้ แต่คนอื่นอาจต้องการลอง
Sebastian Stark

ใช่แน่นอนเซบาสเตียน ฉันลองคำตอบของคุณก่อนเพราะมันเป็นสิ่งที่ง่ายที่สุดและถ้าทั้งหมดที่จำเป็นคือขั้นตอนเริ่มต้นที่เพิ่มเข้ามามันก็ดีมาก
นิคไรซ์

0

สิ่งนี้จะไม่ง่ายเหมือนการแก้ไขไฟล์โฮสต์ คุณมีตัวเลือกสองทาง:

python DNS proxyนี้จะจัดการกับ wildcard ใน / etc / hosts

ใช้ DNSmasq


ขอบคุณ ลิงก์ของคุณไปยังคำถาม DNSmasq คือสิ่งที่ฉันทำใน 14.04 เพียงทำเช่นเดียวกันในการติดตั้ง 18.04 ใหม่ไม่ทำงานเนื่องจากข้อขัดแย้งของพอร์ต ดังนั้นนอกกรอบสิ่งอื่นที่ต้องทำเปรียบเทียบกับสิ่งนั้น ดูรหัสทั้งหมดที่จำเป็นสำหรับพร็อกซี DNS python ฉันไม่อยากเชื่อทุกสิ่งที่จำเป็น มันไม่ใช่ก่อนหน้านี้ยกเว้นฉันคิดว่าสำหรับผู้ที่ยืนยันในการใช้ / etc / hosts
นิคไรซ์

คุณสามารถnetstat -tulpnตรวจสอบสิ่งที่ใช้พอร์ตได้หรือไม่? แก้ไข: ไม่เป็นไรเห็นคำตอบที่ยอมรับ ปัญหาคือ systemd- แก้ไข
Harikrishnan R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.