Làm cách nào để thêm máy chủ DNS qua độ phân giải?


207

/etc/resolv.confvô dụng trong Ubuntu 12.04 LTS (Pangolin chính xác)?

Tôi thấy rằng thông tin máy chủ DNS được lưu trữ trong NetworkManager ngay bây giờ. Công nmclicụ dòng lệnh có thể liệt kê nó cho bạn.

Nếu tôi muốn thêm một máy chủ DNS nữa , liệu có thêm nó vào /etc/resolv.confbằng cách sử dụng resolvconfgói trợ giúp không?


2
Tôi nghĩ rằng các lệnh được đề cập ở trên nên nm-tool, không nmcli.
Jesse Glick

Câu trả lời:


139

Nếu /etc/resolv.confnameserver 127.0.0.1thì thêm các mục vào /etc/resolvconf/resolv.conf.d/tailsẽ không thực sự làm gì hữu ích.

Nếu bạn đang sử dụng NetworkManager thì thay vào đó, bạn nên thêm địa chỉ máy chủ tên thông qua chỉ báo mạng : Chỉnh sửa kết nối ... | Chỉnh sửa ... | Cài đặt IPv4 | Máy chủ DNS bổ sung .

Nếu bạn thực sự muốn thêm nhiều mục vào /etc/resolv.conf, hãy tạo /etc/resolvconf/resolv.conf.d/tailvà thêm chúng vào đó.

Như với mọi bản phát hành Ubuntu, bạn nên đọc Ghi chú phát hành Ubuntu, có sẵn tại đây:

Phần Máy tính để bàn và Cơ sở hạ tầng chung chứa liên kết đến


1
@stgraber, vui lòng bình luận về phương pháp thay thế mà tôi tìm thấy và đăng dưới đây. Làm thế nào để nó so sánh với việc thêm một /etc/resolvconf/resolv.conf.d/tailtập tin hoặc sử dụng Trình quản lý mạng? Cảm ơn.
Randall Cook

3
@stgraber Bạn khuyên gì cho Ubuntu Server? Tôi đã nhận thấy từ blog của bạn và nhận xét rằng Network-Manger dường như là cách tốt nhất để quản lý việc này, nhưng thực hiện cài đặt trình quản lý mạng trên hệ thống của tôi sẽ cài đặt toàn bộ những thứ tôi không cần (ví dụ: công cụ GUI ).
Avery Chan

1
Thật là một lần thêm các mục vào /etc/resolvconf/resolv.conf.d/head (theo blogpost của bạn)?
sup

3
@AveryChan, sử dụng "cách tiếp cận thứ ba" được đề xuất bởi @ randallcook, chỉ cần thêm dns-nameserversvào phần eth0 của bạn trong /etc/network/interfaces.
mrm

1
/etc/resolvconf/update.d/libctrên máy chủ Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. (đặt nó vào /etc/default/resolvconf, như dòng 23 & 24 của /etc/resolvconf/update.d/libcchương trình.
immeëmosol

134

Tôi đã tìm thấy một cách tiếp cận khác ở đây liên quan đến việc thêm một dòng như dưới đây vào /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Tương tự như vậy, tôi đã tìm thấy một cách tiếp cận thứ ba ở đây liên quan đến việc thêm các dòng vào /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Cập nhật: Đây là tài liệu chính thức cho cách tiếp cận thứ ba.


18
Tôi đã bỏ phiếu cho điều này bởi vì đây third approachlà cách đơn giản nhất để làm điều này.
Billy Moon

1
@billy Tôi không thể làm cho phương thức thứ ba hoạt động được .. chỉ có phương pháp đầu tiên được liệt kê ở đây, chỉnh sửa dclient.conf, làm việc cho tôi.
Jeff Atwood

9
Lưu ý: Chỉnh sửa dhclient.conf chỉ có tác dụng nếu dhclient được sử dụng (và nó được sử dụng bởi cả ifup và NetworkManager!) Chỉnh sửa / etc / network / interface chỉ có tác dụng nếu ifup được sử dụng. Định cấu hình kết nối NetworkManager bằng trình chỉnh sửa kết nối NetworkManager chỉ có tác dụng nếu NetworkManager được sử dụng.
jdthood

1
Nếu tôi không nhầm, cách tiếp cận thứ ba sẽ thêm một máy chủ tên khác SAU những cái được trả về bởi DHCP. Nếu bạn muốn nó đến trước thì một trong những lựa chọn khác phù hợp hơn. Tôi đã sử dụng /etc/resolvconf/resolv.conf.d/head(sau khi khắc phục nhận xét "KHÔNG CHỈNH" sai lệch trong đó :))
starfry

1
@ Mr.Hyde, đó không phải là các dòng lệnh, chúng là các dòng để thêm vào / etc / network / interface.
Randall Cook

90

Có vẻ như bạn đang nói về gói độ phân giải.

Cài đặt resolvconf gói.

Chạy

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Đầu tập tin là một cảnh báo đáng sợ. Tệp /etc/resolv.conf được tạo tự động từ nội dung của tệp này; cảnh báo là có vì vậy nó sẽ được đặt trong /etc/resolv.conf khi /etc/resolv.conf được tạo. Đến cuối tập tin, thêm

nameserver <ip_of_nameserver>

Nhấn Ctrl xvà trả lời có để lưu tệp. Để hoàn tất, hãy tạo lại /etc/resolv.conf để các thay đổi được áp dụng ngay bây giờ:

sudo resolvconf -u

Sau đó kiểm tra nội dung của /etc/resolv.conf để xem dòng bạn đã thêm hiện có. Hơn nữa, nó sẽ vẫn ở đó vào lần tới khi máy của bạn khởi động hoặc dịch vụ mạng của bạn được khởi động lại, tùy theo điều kiện nào đến trước.


Thông tin về cảnh báo tập tin chỉ là những gì tôi cần. Tôi có ấn tượng rằng tôi không nên chỉnh sửa tập tin! Cảm ơn!
Xunnamius

Đây là câu trả lời tốt nhất cho tôi!
Siwei Shen

31

Dưới đây tôi sẽ chỉ cho bạn cách tốt nhất mà tôi đã tìm thấy kể từ khi tôi chạy phiên bản Ubuntu Server và sử dụng ifup thay vì NetworkManager.

Trên thực tế đối với tôi họ đã làm điều này dễ dàng hơn :) bằng cách đưa tất cả vào tệp / etc / network / giao diện. Các cấu hình tương tự mà bạn đã có thể ghi vào giải phápvv bây giờ có thể nằm trong cùng một tệp với các cấu hình bộ điều hợp mạng của bạn như trong ví dụ dưới đây:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Tôi hy vọng điều này sẽ giúp ích và làm cho nó dễ dàng hơn đối với tôi, bây giờ chúng tôi có thể tạo địa chỉ IP tĩnh và thêm tất cả các máy chủ tên miền và dns trong một tệp :)


1
Cảm ơn bạn. Điều này đã trở thành phương pháp yêu thích của tôi là tốt. Một lưu ý ngoài chủ đề: không cần thiết phải chỉ định địa chỉ 'mạng' và 'quảng bá' vì chúng được tự động tính toán từ 'địa chỉ' và 'netmask'. Tất cả những gì bạn thực sự cần là 'địa chỉ', 'netmask' và 'gateway'.
Martijn Heemels

Đây là câu trả lời sạch nhất. Chỉ cần đảm bảo đánh vần đúng các từ khóa dns- *. Lỗi chính tả "dns-nameervers" là vấn đề thực sự của tôi.
John McGehee

18

Của tôi đang chạy Ubuntu Server 12.04. Tôi đã thực hiện các thay đổi sau và khởi động lại máy chủ (thông thường có thể được thực hiện bằng cách chỉ đưa xuống giao diện mạng, nghĩa là, ifdown eth0hoặc ifup eth0).

Trong tập tin /etc/resolvconf/resolv.conf.d/basetôi đã thêm các mục sau:

nameserver 8.8.8.8
nameserver 8.8.4.4

Tôi mong muốn có sự trợ giúp của phía trên!


12

Bạn có thể sử dụng Trình quản lý mạng như đã nêu trong câu trả lời của Frank, nhưng nếu bạn muốn chỉnh sửa thủ công /etc/resolv.conf, bạn có thể làm như vậy bằng cách xóa nó (thực ra là một liên kết tượng trưng) và sau đó tạo một tệp đơn giản mới với nội dung bạn muốn. Các resolvconftiện ích chỉ bao giờ ghi vào tập tin /run/resolvconf/resolv.conf.


9

Lưu ý: Câu trả lời này dành cho một phiên bản Câu hỏi hợp nhất khá khác nhau, chỉ tập trung vào việc chờ xử lý trước một máy chủ tên mong muốn.

Điều này hoạt động trước ngày 12.04:

Chỉnh sửa /etc/dhcp3/dhclient.confvà thêm:
prepend domain-name-servers 127.0.0.1;

(Trên thực tế, dòng này đã có sẵn; tất cả những gì bạn cần làm là bỏ bình luận.)


Điều này có hoạt động nếu bạn không có bất kỳ địa chỉ nào được gán bởi DHCP không?
Azendale

Nếu bạn muốn tìm hiểu thêm về cấu hình dhclient, bạn có thể thực hiện man dhclient.confđể truy cập trang man dhclient. (Đây không phải là câu trả lời cho câu hỏi của Azendale.)
Christian Skjødt

Câu trả lời này là hoàn toàn sai. Trước hết, người gửi câu hỏi muốn thêm địa chỉ của một máy chủ tên bên ngoài, không phải địa chỉ 127.0.0.1. Trình cấu hình giao diện cho giao diện bên ngoài không phải là nơi để thêm địa chỉ cho máy chủ tên nội bộ. Thứ hai, tập tin nằm ở / etc / dhcp, không phải ở / etc / dhcp3. Thứ ba, vì Ubuntu 12.04 những thứ như vậy được cấu hình bằng cách sử dụng độ phân giải.
jdthood

1
Trước hết - câu hỏi ban đầu đã được thay đổi đáng kể bằng cách hợp nhất người điều hành, vì vậy câu trả lời của tôi tất nhiên có vẻ lạ. Tệp dhcp3 là vị trí khi tôi trả lời điều này vào năm 2011 và ngay cả khi nó không lý tưởng, nó vẫn hoạt động. Tôi đã sử dụng giải pháp này trên nhiều máy. Rõ ràng, bạn sẽ thay đổi địa chỉ loopback thành địa chỉ bạn muốn trả trước. Tôi cho rằng hầu hết mọi người đều biết loopback là gì, ngay cả khi họ chưa đọc RFC6890.
belacqua

@jdthood Tại sao không thêm câu trả lời của riêng bạn? Cá nhân, tôi không quen với cách làm việc bsd-ish decvconf. Tôi thích cách tiếp cận /etc/resolv.conf trực tiếp và tôi không chắc lợi thế của hệ thống Rube Goldberg mới là gì. (Tương tự như vậy với / etc / motd).
belacqua

7

resolvconflà vô dụng Tôi đang ở trên máy chủ Linux và địa chỉ IP của tôi là tĩnh và máy chủ DNS của tôi là tĩnh. Tôi không cần resolvconfhoặc NetworkManager .

Giữ cho nó đơn giản là chính sách của tôi khi làm việc trên một máy chủ. Càng ít phức tạp, càng dễ quản lý / sửa chữa khi mọi thứ bị hỏng.

Vì vậy, tôi đã làm aptitude purge resolvconfvà tự làm chắc chắn rằng đó /etc/resolv.confkhông phải là một liên kết tượng trưng và chỉ tạo một tệp tĩnh. Chỉ trong trường hợp một chương trình cố gắng thay đổi tập tin, tôi đã làm chattr +i(không thay đổi) để /etc/resolv.confđề phòng.


4
Vì độ phân giải là một phần của hệ thống cơ sở, bằng cách xóa nó, bạn sẽ gặp rắc rối trong tương lai, tại thời điểm nâng cấp.
jdthood

3
Tôi đồng ý với cả nhận xét và câu trả lời: xem xét có bao nhiêu vấn đề đã gây ra và bao nhiêu giờ hỗ trợ đã khắc phục "vấn đề" này và bao nhiêu nhân viên CNTT đã dành thời gian để tìm câu trả lời. Đơn giản là tốt nhất - Tôi không cần máy chủ của mình thay đổi DNS thành thứ tôi không muốn.
Mei

6

Hầu hết các giả định ở trên đều cho rằng bạn có một hệ thống nguyên sơ, nhưng thực tế thường là bạn đã cài đặt các máy khách dhcp khác nhau, vô hiệu hóa trình quản lý mạng trong một số phiên bản trước của Ubuntu, v.v. Tôi đã sử dụng dnsmasq một thời gian, nhưng đã cài đặt lại nó. Hiện tại hệ thống của tôi có các nội dung sau /etc/resolv.conf(là liên kết tượng trưng đến /run/resolvconf/resolv.conftrên hệ thống của tôi):

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

Nó không quan trọng bao lâu thì tôi chạy sudo resolvconf -uhay sudo dpkg-reconfigure resolvconf, nó đã không cập nhật các máy chủ tên để những cái tôi thiết lập trong NetworkManager. Thông tin giải quyết được sử dụng từ Trình quản lý mạng đã có mặt:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Tuy nhiên, hóa ra là trường hợp nếu có nhiều tệp trong thư mục này, thì tệp này có thể không được sử dụng. Thủ phạm là một tập tin không được gỡ bỏ với việc cài đặt dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Chỉ cần xóa tệp này (và chạy sudo resolvconf -usau đó) đã giải quyết rắc rối dns của tôi:

cat /etc/resolv.conf                        
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 8.8.8.8 

Tôi hy vọng điều này sẽ giúp những người khác gỡ lỗi (các tương tác phức tạp giữa tất cả các công cụ mạng khác nhau này). Nếu bạn sử dụng resolvconfhãy chắc chắn chạy ls /run/resolvconf/interfacesđể xem những gì ở đó.


1
Cảm ơn bạn, điều này rất hữu ích. Tôi đã thử các câu trả lời được bình chọn cao hơn trước và dường như không có câu trả lời nào. Tôi không có bất kỳ tập tin bổ sung nào trong /run/resolvconf/interface/thư mục, nhưng NetworkManagertập tin của tôi cần một số tình yêu. Câu trả lời của bạn đã giúp giải quyết vấn đề này cho tôi.
mason81

4

Tôi vừa xóa một liên kết trong /etc/resolv.confvà tạo một tệp quy định với các địa chỉ của máy chủ tên. Nó hoạt động và tôi không thấy bất kỳ lý do nào để sử dụng cấu trúc khá kỳ lạ mà các nhà phát triển Ubuntu đã tạo ra.


1
Vâng, tôi không phải là một fan hâm mộ của loại thay đổi này ảnh hưởng đến máy chủ, làm tăng thêm độ phức tạp và độ mờ đục. Đây là hành vi cốt lõi không nên thay đổi từ phát hành sang phát hành.
belacqua

Câu trả lời này là 5 tuổi và IMHO vẫn là câu trả lời hay nhất trong số những câu được liệt kê. Nó là đơn giản, nhanh chóng và hiệu quả. Có bất kỳ nhược điểm?
Craig S. Anderson

3

Bạn có thể chỉnh sửa kết nối "AUTO ETH0" hoặc bất cứ tên nào bạn sử dụng để kết nối trong NM. Bạn có thể làm điều này bằng cách nhấp chuột phải vào NM và chọn "Chỉnh sửa kết nối ...". Trên tab IPv4, bạn có thể chọn "Chỉ địa chỉ tự động (DHCP)" vì "Phương thức" và NM sẽ cho phép bạn đặt (các) địa chỉ máy chủ tên theo cách thủ công ngay cả địa chỉ được gửi qua DHCP.


3

Thêm bit của tôi vào danh sách đã dài, đây là một cách khác (được thử nghiệm vào ngày 12.04):

Chỉnh sửa /run/resolvconf/interface/NetworkManagerđể phù hợp với nhu cầu của bạn. Đây là một ví dụ:

search foobar.com example.com
nameserver 192.168.1.1

Sau đó, như đã nêu cho hầu hết các ví dụ khác, làm a sudo resolvconf -u. Bây giờ bạn sẽ thấy bạn resolv.conftrông như thế này:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Tôi vẫn không thích cách nó được triển khai bây giờ (có vẻ như Ubuntu cần một dịch vụ cho mọi foo mà nó tạo ra) và chắc chắn sẽ thích một cách đơn giản hơn resolv.conf. Nhưng cách tiếp cận này dường như là sự thỏa hiệp tốt nhất cho tôi cho đến nay. "Localhost-NS" được thêm vào không nên làm tổn thương quá nhiều.


2

Tôi đã sửa lỗi này bằng cách thay đổi thứ tự các nguồn. Tôi đã chuyển dnsnguồn trước khi mdnsvào /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Bạn có thể giữ cài đặt của mình và vẫn sử dụng máy chủ bộ đệm ẩn cục bộ theo cách này.


thay vì thêm các mục, sửa lỗi hệ thống bị hỏng và cung cấp cho bạn thông tin bạn thực sự muốn. +1.
nelaaro

2

Làm thế nào về:

sudo dpkg-cấu hình lại độ phân giải

Trước đó, sử dụng Trình quản lý mạng để thay đổi địa chỉ DNS và thay đổi Phương thức thành

Địa chỉ tự động (DHPC)

Sau đó chạy lệnh trên và khởi động lại. Đó là giải pháp cho tôi.


2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp

2

Đây là một câu hỏi rất phổ biến, với một tập hợp các câu trả lời tiêu chuẩn có thể, tất cả trong số đó, IMO, đều khá hack. Đối với một người luôn gặp phải vấn đề khiến Ubuntu phải tôn trọng các cài đặt DNS mà tôi đã thiết lập trong NetworkManager - đặc biệt là cài đặt các máy chủ DNS tĩnh chỉ có địa chỉ "Tự động (DHCP)" - và hôm nay tôi đã tìm ra cái gì HOÀN TOÀN SAU.

Vấn đề là ở sự tương tác giữa độ phân giải và NetworkManager. Nghị quyết có tập tin này được gọi là /etc/resolvconf/interface-order. Ít nhất là trên các hệ thống của tôi, NetworkManager hoàn toàn không có trong tệp này (ngoại trừ việc nó được bao phủ bởi thẻ * wild ở cuối). Vì vậy, những gì xảy ra là, báo cáo gần đây nhất của dhclient về độ phân giải được ưu tiên hơn bất cứ điều gì NetworkManager nói.

Vì vậy, ít nhất trong trường hợp của tôi, câu trả lời thực tế là thêm

NetworkManager

ở hoặc gần đỉnh của /etc/resolvconf/interface-order.

(Vâng, tôi biết nhiều người chỉ nói "gỡ cài đặt giải pháp", có vẻ như đó là một ý tưởng tồi đối với tôi. -minimal phụ thuộc vào nó], vì vậy sẽ rất khó để giữ cho hệ thống của bạn ở trạng thái nhất quán, được cập nhật mà không có độ phân giải.)

Theo yêu cầu tôi có thể cung cấp thêm chi tiết về cách tôi tìm ra điều này. ( EDIT : rõ ràng là tôi đã không làm như vậy khi được yêu cầu, xin lỗi. Tại thời điểm này tôi không nhớ nhiều chi tiết hơn những gì tôi nói tiếp theo :) Tóm lại, tôi đã thay thế độ phân giải có thể thực thi bằng trình bao bọc xung quanh nó trong đó đổ các đối số, đầu vào, đầu ra và thiết bị lỗi chuẩn của nó vào các tệp; và thêm set -x vào tập lệnh cập nhật của decvconf.

( EDIT : Tôi có thể nói rằng điều tôi muốn nói ở phần đầu tiên là tôi đã sử dụng sudo để di chuyển thực thi độ phân giải thực tế, có thể được tìm thấy bằng cách sử dụng lệnh which hoặc lệnh type. Sau đó, tạo một kịch bản shell mà cuối cùng chỉ thực hiện di chuyển Nghị quyết, nhưng cũng lặp lại các đối số cho một số tệp và sử dụng chuyển hướng shell để gửi stdin, stdout và stderr đến các tệp khác. Tôi không nhớ là "tập lệnh cập nhật của giải pháp" và hiện không thể dễ dàng kiểm tra. nhiều chuyên viên máy tính Linux có thể hiểu ý tôi muốn nói, có lẽ một số người samaritan giỏi sẽ cung cấp nhiều chi tiết hơn trong một bình luận.)


Vui lòng " cung cấp thêm chi tiết về cách bạn tìm ra điều này "
Pierre.Vriens


1

Để thay đổi DNS, hãy làm theo hướng dẫn trong: https://developers.google.com/speed/public-dns/docs/USE

  1. Truy cập mạng

  2. Chọn kết nối mà bạn muốn định cấu hình DNS.

  3. Để thay đổi cài đặt cho kết nối không dây, chọn tab Không dây, sau đó chọn mạng không dây phù hợp.

  4. Nhấp vào mũi tên (phải) và trong cửa sổ xuất hiện, chọn tab Cài đặt IPv4 hoặc Cài đặt IPv6.

  5. Nếu phương thức được chọn là Tự động (DHCP), hãy mở danh sách thả xuống và chỉ chọn địa chỉ Tự động (DHCP). Nếu phương thức được đặt thành một cái gì đó khác, đừng thay đổi nó.

  6. Trong trường máy chủ DNS, nhập địa chỉ IP DNS, được phân tách bằng dấu phẩy


0

0.Thêm DNS tạm thời. Chỉnh sửa /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Cài đặt hoặc cập nhật độ phân giải.

root@ubuntu:~# apt-get install resolvconf -y

2.Thêm máy chủ tên của bạn vào /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3.Reboot máy của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.