จะทราบได้อย่างไรว่า DNS กำลังใช้งานอะไรใน Ubuntu ตั้งแต่ 14.04 เป็นต้นไป


14

(ติดตามคำถามที่คล้ายกันสำหรับ 12.04 )

ก่อนที่จะมี Ubuntu 12.04 คุณอาจเห็น DNS /etc/resolv.confที่ใช้งานอยู่ใน ใน Ubuntu 12.04, NetworkManager ไม่สามารถทำงานกับไฟล์ได้อีกต่อไป คุณต้องปรึกษาเครื่องมือบรรทัดคำสั่งnm-toolโดยตรง

ที่น่าสนใจnm-toolไม่ได้ติดตั้งตามค่าเริ่มต้นใน 14.04 และใหม่กว่า แม้ว่าคุณอาจจะยังคงติดตั้งผ่านapt-get installแต่คุณก็ไม่สามารถคาดเดาได้ว่าอูบุนตูทุกคนต้องใช้มันนอกกรอบ

ดังนั้นคำถามยังคงอยู่ คุณจะทราบได้อย่างไรว่าการติดตั้งเริ่มต้น DNS ที่คุณใช้โดยบรรทัดคำสั่ง

คำตอบ:


30

คำตอบที่รวดเร็ว

เครื่องมือ NetworkManager ใหม่nmcliจะถูกติดตั้งเป็นค่าเริ่มต้นทันที เครื่องมือบรรทัดคำสั่งมีประสิทธิภาพมาก แต่เรียนรู้ได้ยากขึ้นเล็กน้อย ทำตามคำถามของเราคำตอบสั้น ๆ คือ:

nmcli dev show | grep DNS

หรือเพื่อให้ได้ผลลัพธ์ที่สะอาดขึ้น

nmcli dev show | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2


อธิบาย

หากคุณมีเวลาฉันสามารถอธิบายจัมโบ้พึมพำข้างต้น:

  1. nmcli dev show

    ทำงานเล็กน้อยเช่นnm-toolคำสั่งเก่า มันซับซ้อนข้อมูลเครือข่ายปัจจุบัน

    นอกจากนี้คุณยังสามารถเรียนรู้การตั้งค่าอินเทอร์เฟซบางอย่างได้โดยเพิ่มชื่ออินเตอร์เฟส ตัวอย่างเช่นในการเรียนรู้ข้อมูลของคุณอาจใช้eth0nmcli dev show eth0

  2. grep DNS

    เห็นได้ชัดว่า grep เฉพาะบรรทัดที่มีข้อความ "DNS" อยู่ในนั้น

  3. sed 's/\s\s*/\t/g' | cut -f 2

    นี่เป็นเพียงการล้างเอาต์พุต cutอาจเลือกเอาท์พุทจากคอลัมน์ แต่มันใช้เวลาเพียง 1 เป็นตัวคั่น (ในขณะที่nmcliพื้นที่การใช้งานอีกมากมาย) การsedเปลี่ยนช่องว่างในเอาต์พุตดั้งเดิมให้เป็น TAB


7
+1 ไม่ทราบเกี่ยวกับยูทิลิตี้นี้ แต่ผมใช้อูบุนตู 14.04 nmcli d listและคำสั่งของฉันคือ นอกจากนั้นสิ่งที่ดีที่นี่!
Terrance

1
sed มีแฟr+rr*
ล็ก

1
คำตอบนี้ขึ้นอยู่กับเวอร์ชันใด ในรุ่น nmcli Trusty ของฉัน0.9.8.8 nmcli dev showพ่นข้อความแสดงข้อผิดพลาดขนาดใหญ่ออกมา
Oli

5
@Oli nmcli dev showเป็นของ nmcli เมื่อ 15.04 ด้วยเหตุผลบางอย่าง nmcli เก่าก็ไม่เสถียรดังนั้น . . ตอนนี้พวกเขาใช้nmcliที่มีธงเช่นเดียวกับ Fedora อาจเป็นเพราะสวิตช์เป็น systemd และเนื่องจากคำตอบนี้เหมาะสำหรับ 15.04 แต่ไม่ใช่ 14.04 ฉันจึงถูกล่อลวงให้ลงคะแนนอย่างมาก
Sergiy Kolodyazhnyy

1
ฉันต้องการที่จะสะท้อนความคิดเห็นข้างต้นนี้อาจถูกต้องสำหรับ 15.04 แต่ไม่ถูกต้องสำหรับ 14.04 ซึ่งเป็นคำถาม
อเล็กซ์

4

การวิเคราะห์แพ็คเก็ตจะเป็นวิธีทางเลือกที่ทำงานโดยไม่คำนึงถึง NetworkManager หรือเครื่องมือเชื่อมต่อเครือข่ายอื่น ๆ ที่คุณใช้ แนวคิดพื้นฐานคือการส่งแบบสอบถาม dns ด้วยnslookupและในการตรวจสอบสถานีที่สองที่แพ็คเก็ตไป

เพื่อที่เราจะต้องเชื่อมต่อกับเครือข่ายเป็นครั้งแรกเพื่อที่จะได้ไม่ต้องวุ่นวายกับการเชื่อมต่อและเรียกใช้คำสั่งต่อไปนี้:

sudo tcpdump -vv -i wlan0 -W 1200 | grep google.com  

ในการรันเทอร์มินัลสำรอง:

nslookup google.com 

เมื่อคุณได้รับรายชื่อแพ็คเก็ตจากtcpdumpตรวจสอบพวกเขาไปจากที่อยู่ IP ของคุณ

ตัวอย่างเช่น,

$ sudo tcpdump -vv -i wlan0 -W 1200 | grep google.com                            
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
    eagle.29862 > b.resolvers.Level3.net.domain: [udp sum ok] 64057+ [1au] A? google.com. ar: . OPT UDPsize=4096 (39)
    b.resolvers.Level3.net.domain > eagle.29862: [udp sum ok] 64057 q: A? google.com. 11/0/0 google.com. A 173.194.115.64, google.com. A 173.194.115.65, google.com. A 173.194.115.72, google.com. A 173.194.115.66, google.com. A 173.194.115.69, google.com. A 173.194.115.78, google.com. A 173.194.115.70, google.com. A 173.194.115.71, google.com. A 173.194.115.68, google.com. A 173.194.115.67, google.com. A 173.194.115.73 (204)
    eagle.16429 > b.resolvers.Level3.net.domain: [udp sum ok] 38822+ A? google.com. (28)

ที่คุณสามารถดูแล็ปท็อปของฉันeagleส่งแพ็กเก็ต DNS b.resolvers.Level3.net.domainมหาวิทยาลัยของฉัน หากคุณต้องการที่จะเห็นที่อยู่ IP, คุณสามารถใช้ธง-ntcpdump

ตัวอย่างเช่น:

$ sudo tcpdump -n -vv -i wlan0 -W 1200 | grep google.com                         
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
    10.10.87.145.56474 > 4.2.2.2.53: [udp sum ok] 15606+ A? google.com. (28)

2

ตรวจสอบการเชื่อมต่อเครือข่ายของคุณ:

ls /etc/NetworkManager/system-connections/

และเลือกการเชื่อมต่อที่คุณต้องการกำหนดค่า

 sudo cat /etc/NetworkManager/system-connections/Internet | grep dns

แทนที่ "อินเทอร์เน็ต" โดยไม่มีชื่อการเชื่อมต่อของคุณ


การใช้ยังสามารถใช้nm-tool:

nm-tool | grep DNS

ติดตั้งสำหรับ U14.04 และใหม่กว่าโดยใช้

sudo apt-get install nm-tool

ตัวอย่าง:

nm-tool | grep DNS
    DNS:             192.168.1.1
    DNS:             192.168.10.1
    DNS:             192.168.11.1

1

โดยค่าเริ่มต้นจะยังคงมีอยู่ในเวอร์ชัน 14.04 เนื่องจากมีการรวมอยู่กับตัวจัดการเครือข่าย มันถูกปล่อยออกมาจาก network-manager (เวอร์ชัน 15.04 และใหม่กว่า) และไม่สามารถใช้งานได้ผ่าน apt-get

สำหรับตอนนี้ในเวอร์ชั่น 15.04 คุณสามารถดาวน์โหลดและแตกไฟล์ nm-tool ออกจากแพ็คเกจเก่าได้ด้วยตนเอง รันคำสั่งต่อไปนี้

ก่อนอื่นให้สร้างไดเรกทอรีชั่วคราวเพื่อทำงานใน:

cd
mkdir APTGET;cd APTGET

จากนั้นดาวน์โหลดเวอร์ชันเก่าและแตกไฟล์:

wget 'http://us.archive.ubuntu.com/ubuntu/pool/main/n/network-manager/network-manager_0.9.8.8-0ubuntu7.1_amd64.deb'
ar xvf *
tar xvf dat*

สร้างไดเรกทอรีใหม่:

mkdir ~/bin

(ถ้ามันบอกว่าfile already existsเพียงละเว้นข้อความและดำเนินการต่อ)

คัดลอกไฟล์ไปยังไดเรกทอรีใหม่:

cp ./usr/bin/nm-tool ~/bin

กลับไปที่โฮมไดเร็กทอรีและลบไดเร็กทอรีชั่วคราว:

cd ..
rm -R APTGET

ตอนนี้ตั้งค่านามแฝงสำหรับเครื่องมือนาโน:

cp ~/.bashrc ~/.bashback
echo 'alias nm-tool="~/bin/nm-tool"' | tee -a ~/.bashrc;. ~/.bashrc

ผู้ใช้ปัจจุบันควรสามารถเรียกใช้ nm-tool จากเทอร์มินัลได้แล้ว


นอกจากนี้สิ่งนี้อาจยังไม่ถูกต้องให้ตัวแก้ไข DNS จริงทั้งหมดที่คุณใช้

คุณสามารถไปที่DNSleaktest.comเพื่อรับรายงานฉบับเต็ม คลิกที่Extended Testเพื่อรับรายงานฉบับเต็ม


1

/etc/resolv.confอันที่จริงไม่ใช้ NetworkManager อย่างไรก็ตามในการตั้งค่าเริ่มต้นเซิร์ฟเวอร์ DNS ที่ระบุไว้ในresolv.confนั้นเป็น127.0.0.1เพราะ NetworkManager ใช้บริการ DNS ภายในของตัวเองด้วยเหตุผลทางเทคนิคที่ไม่ชัดเจนซึ่งไม่เกี่ยวข้องกับคนจำนวนมาก นี่คือเหตุผลที่คุณต้องใช้nmcliเพื่อดูว่าเซิร์ฟเวอร์ DNS ใด NetworkManager ใช้ภายใน

แต่ก็ยังเป็นไปได้ที่จะปิดการใช้งานลักษณะการทำงานนี้และกลับไปที่เก่าที่เซิร์ฟเวอร์ DNS resolv.confที่เกิดขึ้นจริงในการใช้งานที่ระบุไว้ใน หากต้องการทำสิ่งนี้เพียงแค่ใส่เครื่องหมายdns=dnsmasqในบรรทัด/etc/NetworkManager/NetworkManager.confและรีบูต สำหรับคนส่วนใหญ่สิ่งนี้ไม่ควรสร้างความแตกต่างไปจากความจริงที่ว่าตอนนี้เซิร์ฟเวอร์ DNS ที่แท้จริงจะปรากฏresolv.confขึ้น หากคุณอยู่ในมุมกรณีที่มีการเปลี่ยนแปลงเกิดขึ้นสิ่งนี้ควรปรากฏอย่างรวดเร็วและคุณสามารถเปลี่ยนกลับไปใช้พฤติกรรมเริ่มต้นได้โดยไม่ใส่เครื่องหมายความคิดเห็นอีกครั้ง


1

รายการ dev nmcli grep DNS

มันจะออกผลลัพธ์เช่น;
IP4.DNS[1]: 8.8.8.8 IP4.DNS[1]: 8.8.8.8 IP4.DNS[2]: 8.8.4.4

คำสั่งดังกล่าวใช้งานได้ก่อน Ubuntu 16.04
สำหรับ Ubuntu 16.04 ให้ใช้:
nmcli dev show | grep DNS


คุณอาจจะหมายถึงnmcli dev showไม่nmcli dev list?
holmb

ฉันขุดบ้างดูเหมือนว่าพวกเขาเปลี่ยน CLI ระหว่าง Ubuntu 14.04 และ 16.04 เห็นได้ชัดว่าใช้nmcli dev listงานได้ใน 14.04 แต่ไม่ใช่ใน 16.04
holmb

1

หากใครบางคนมีคำถามเดียวกันกับฉันสำหรับ Ubuntu 18.04LTS:

รายการอุปกรณ์เครือข่ายทั้งหมดที่จัดการผ่าน network-manager:

networkctl list

แสดงการกำหนดค่าของอุปกรณ์เฉพาะ:

networkctl status eth0

แทนที่จะเป็น eth0 คุณต้องป้อนชื่ออุปกรณ์เครือข่ายที่แสดงในรายการก่อน หากไม่มีรายการ DNS การ์ดของคุณไม่มีเนมเซิร์ฟเวอร์ที่กำหนดค่า

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