Bagaimana cara menambahkan server DNS melalui resolv.conf?

207

Apakah /etc/resolv.conftidak berguna di Ubuntu 12,04 LTS (Precise Pangolin)?

Saya melihat bahwa informasi server DNS disimpan di NetworkManager sekarang. The nmclialat baris perintah bisa daftar itu untuk Anda.

Jika saya ingin menambahkan satu lagi server DNS , apakah akan menambahkannya /etc/resolv.confdengan menggunakan resolvconfbantuan paket?

PnotNP
sumber
2
Saya pikir perintah yang disebutkan di atas seharusnya nm-tool, bukan nmcli.
Jesse Glick

Jawaban:

139

Jika /etc/resolv.confmengandung nameserver 127.0.0.1kemudian menambahkan entri ke /etc/resolvconf/resolv.conf.d/tailtidak akan benar-benar melakukan sesuatu yang bermanfaat.

Jika Anda menggunakan NetworkManager maka Anda harus bukannya statis menambahkan alamat nameserver melalui indikator jaringan : Mengedit Koneksi ... | Edit ... | Pengaturan IPv4 | Server DNS tambahan .

Jika Anda benar - benar ingin menambahkan lebih banyak entri /etc/resolv.conf, buat /etc/resolvconf/resolv.conf.d/taildan tambahkan di sana.

Seperti setiap rilis Ubuntu, disarankan untuk membaca Catatan Rilis Ubuntu, tersedia di sini:

Bagian Desktop dan Infrastruktur Umum berisi tautan ke

stgraber
sumber
1
@stgraber, berikan komentar tentang pendekatan alternatif yang saya temukan dan posting di bawah ini. Bagaimana cara membandingkannya dengan menambahkan /etc/resolvconf/resolv.conf.d/tailfile atau menggunakan Network Manager? Terima kasih.
Randall Cook
3
@stgraber Apa yang Anda rekomendasikan untuk Ubuntu Server? Saya perhatikan dari blog Anda dan berkomentar bahwa Network-Manger tampaknya menjadi cara terbaik untuk mengelola ini, tetapi melakukan instalasi manajer jaringan di sistem saya akan menginstal banyak hal yang tidak saya butuhkan (yaitu hal-hal GUI ).
Avery Chan
1
Apa gunanya menambahkan entri ke /etc/resolvconf/resolv.conf.d/head (sesuai posting blog Anda)?
sup
3
@AveryChan, gunakan "pendekatan ketiga" yang disarankan oleh @ randallcook — cukup tambahkan dns-nameserverske bagian eth0 Anda di /etc/network/interfaces.
mrm
1
/etc/resolvconf/update.d/libcpada server 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. (atur sesuai keinginan /etc/default/resolvconf, sebagai /etc/resolvconf/update.d/libcpertunjukan baris 23 & 24
immeëmosol
134

Saya menemukan pendekatan lain di sini yang melibatkan penambahan baris seperti di bawah ini ke /etc/dhcp/dhclient.conf:

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

Demikian juga, saya menemukan pendekatan ketiga di sini yang melibatkan penambahan baris ke /etc/network/interfaces:

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

Pembaruan: Ini adalah dokumentasi resmi untuk pendekatan ketiga.

Randall Cook
sumber
18
Saya memilih ini karena third approachsejauh ini merupakan cara paling sederhana untuk melakukan ini.
Billy Moon
1
@illy saya tidak bisa mendapatkan metode ketiga untuk bekerja sama sekali .. hanya yang pertama yang tercantum di sini, mengedit dclient.conf, bekerja untuk saya.
Jeff Atwood
9
Catatan: Mengedit dhclient.conf hanya memiliki efek jika dhclient digunakan (dan digunakan oleh ifup dan NetworkManager!) Mengedit / etc / network / interfaces hanya memiliki efek jika ifup digunakan. Mengkonfigurasi koneksi NetworkManager menggunakan editor koneksi NetworkManager hanya memiliki efek jika NetworkManager digunakan.
jdthood
1
Jika saya tidak salah, pendekatan ketiga menambahkan nameserver lain SETELAH yang dikembalikan oleh DHCP. Jika Anda ingin yang lebih dulu maka salah satu opsi lain lebih tepat. Saya menggunakan /etc/resolvconf/resolv.conf.d/head(setelah mengatasi komentar "JANGAN EDIT" yang menyesatkan di sana :))
starfry
1
@ Mr.Hyde, itu bukan perintah baris perintah, itu adalah baris untuk ditambahkan ke / etc / network / interfaces.
Randall Cook
91

Sepertinya Anda berbicara tentang paket resolvconf.

Instal paket resolvconf .

Lari

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

Bagian atas file adalah peringatan yang menakutkan. File /etc/resolv.conf di-autogenerasi dari konten file ini; peringatan ada di sana sehingga akan dimasukkan ke /etc/resolv.conf ketika /etc/resolv.conf dibuat. Di akhir file, tambahkan

nameserver <ip_of_nameserver>

Tekan Ctrl xdan jawab ya untuk menyimpan file. Untuk menyelesaikan, regenerasi /etc/resolv.conf agar perubahan diterapkan sekarang:

sudo resolvconf -u

Kemudian periksa isi /etc/resolv.conf untuk melihat baris yang Anda tambahkan sekarang ada di sana. Lebih lanjut, itu masih akan ada di sana saat mesin Anda dinyalakan atau layanan jaringan Anda dihidupkan ulang, mana yang lebih dulu.

Azendale
sumber
Informasi tentang peringatan file hanya yang saya butuhkan. Saya mendapat kesan bahwa saya seharusnya tidak mengedit file! Terima kasih!
Xunnamius
Ini jawaban terbaik untukku!
Siwei Shen 申思维
31

Di bawah ini saya akan menunjukkan kepada Anda cara terbaik yang saya temukan sejak saya menjalankan edisi Ubuntu Server dan menggunakan ifup daripada NetworkManager.

Sebenarnya bagi saya mereka membuat ini lebih mudah :) dengan memasukkan semuanya ke file / etc / network / interfaces. Konfigurasi yang sama yang akan Anda tulis ke resolv.conf sekarang dapat berada di file yang sama dengan konfigurasi adaptor jaringan Anda seperti dalam contoh di bawah ini:

# 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

Saya harap ini membantu dan membuatnya lebih mudah seperti bagi saya, sekarang kita dapat membuat alamat IP statis dan menambahkan nameserver dan domain dns semua dalam satu file :)

Joseph Mituzas
sumber
1
Terima kasih. Ini telah menjadi metode favorit saya juga. Catatan di luar topik: tidak perlu menentukan alamat 'jaringan' dan 'siaran' karena mereka secara otomatis dihitung dari 'alamat' dan 'netmask'. Yang Anda butuhkan hanyalah 'address', 'netmask' dan 'gateway'.
Martijn Heemels
Ini jawaban terbersih. Pastikan untuk mengeja kata kunci dns- * dengan benar. Salah eja "dns-nameserver" adalah masalah saya yang sebenarnya.
John McGehee
18

Milik saya menjalankan Ubuntu Server 12.04. Saya telah membuat perubahan berikut dan me-reboot server (biasanya ini bisa dilakukan dengan hanya menjatuhkan antarmuka jaringan, yaitu, ifdown eth0atau ifup eth0).

Dalam file /etc/resolvconf/resolv.conf.d/basesaya menambahkan entri berikut:

nameserver 8.8.8.8
nameserver 8.8.4.4

Saya harap bantuan di atas!

Don Chai
sumber
12

Anda dapat menggunakan NetworkManager sebagaimana dinyatakan dalam jawaban Frank, tetapi jika Anda lebih suka mengedit secara manual /etc/resolv.conf, Anda dapat melakukannya dengan menghapusnya (itu sebenarnya symlink) dan kemudian membuat file polos baru dengan konten yang Anda inginkan. The resolvconfutilitas hanya pernah menulis ke file /run/resolvconf/resolv.conf.

Jase
sumber
9

Catatan: Jawaban ini untuk versi Pertanyaan awal yang agak berbeda, dengan fokus hanya pada pra-pending server nama yang diinginkan.

Ini berfungsi sebelum 12.04:

Edit /etc/dhcp3/dhclient.confdan tambahkan:
prepend domain-name-servers 127.0.0.1;

(Sebenarnya, baris ini sudah ada; yang perlu Anda lakukan adalah jangan berkomentar.)

belacqua
sumber
Apakah ini berfungsi jika Anda tidak memiliki alamat yang ditetapkan oleh DHCP?
Azendale
Jika Anda ingin mempelajari lebih lanjut tentang konfigurasi dhclient, Anda dapat melakukan a man dhclient.confuntuk mengakses halaman manual dhclient. (Ini bukan jawaban untuk pertanyaan Azendale.)
Christian Skjødt
Jawaban ini sepenuhnya salah. Pertama-tama, pengirim pertanyaan ingin menambahkan alamat server eksternal, bukan alamat 127.0.0.1. Konfigurasi antarmuka untuk antarmuka eksternal bukanlah tempat untuk menambahkan alamat untuk server nama internal. Kedua, file di / etc / dhcp, bukan di / etc / dhcp3. Ketiga, sejak Ubuntu 12.04 hal-hal seperti itu dikonfigurasi menggunakan resolvconf.
jdthood
1
Pertama-tama - pertanyaan awal diubah secara dramatis oleh penggabungan moderator, jadi jawaban saya tentu saja terlihat aneh. File dhcp3 adalah lokasi ketika saya menjawab ini pada 2011 , dan bahkan jika itu tidak ideal, itu berhasil. Saya telah menggunakan solusi ini pada banyak mesin. Jelas, Anda akan mengubah alamat loopback ke alamat yang ingin Anda tambahkan sebelumnya. Saya berasumsi kebanyakan orang tahu apa itu loopback, bahkan jika mereka belum membaca RFC6890.
belacqua
@ jdthood Mengapa tidak menambahkan jawaban Anda sendiri? Secara pribadi, saya tidak terbiasa dengan cara resolvconf bsd-ish dalam melakukan sesuatu. Saya lebih suka pendekatan /etc/resolv.conf langsung, dan saya tidak yakin apa keuntungan dari sistem Rube Goldberg yang baru. (Demikian juga dengan / etc / motd).
belacqua
7

resolvconftidak berguna. Saya berada di server Linux dan alamat IP saya statis dan server DNS saya statis. Saya tidak perlu resolvconfatau NetworkManager .

Menjaga agar tetap sederhana adalah kebijakan saya ketika bekerja di server. Semakin sedikit kerumitan, semakin mudah untuk mengelola / memperbaiki ketika hal-hal rusak.

Jadi saya lakukan aptitude purge resolvconfdan secara manual memastikan /etc/resolv.confbukan symlink dan baru saja membuat file statis. Kalau-kalau suatu program mencoba untuk mengubah file, saya lakukan chattr +i( tidak berubah) /etc/resolv.confsebagai tindakan pencegahan.

Menandai
sumber
4
Karena resolvconf adalah bagian dari sistem dasar, dengan menghapusnya Anda akan mendapatkan masalah di masa depan, pada waktu peningkatan.
jdthood
3
Saya setuju dengan komentar dan jawabannya: pertimbangkan berapa banyak masalah yang disebabkannya, dan berapa banyak jam dukungan untuk memperbaiki "masalah" ini, dan berapa banyak staf TI yang menghabiskan waktu mencari jawaban. Sederhana adalah yang terbaik - Saya tidak perlu server saya mengubah DNS menjadi sesuatu yang tidak saya inginkan.
Mei
6

Sebagian besar di atas menganggap Anda memiliki sistem yang masih asli, tetapi kenyataannya sering kali Anda telah menginstal klien dhcp yang berbeda, menonaktifkan manajer jaringan di versi Ubuntu tertentu sebelumnya, dll. Mungkin bermanfaat untuk mengetahui hal berikut. Saya telah menggunakan dnsmasq untuk sementara waktu, tetapi menghapusnya. Saat ini sistem saya memiliki konten berikut /etc/resolv.conf(yang merupakan tautan simbolis ke /run/resolvconf/resolv.confsistem saya):

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

Tidak masalah seberapa sering saya menjalankan sudo resolvconf -uatau sudo dpkg-reconfigure resolvconf, itu tidak memperbarui server nama dengan yang saya atur di NetworkManager. Informasi resolvconf yang digunakan dari NetworkManager hadir:

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

Namun, ternyata menjadi kasus bahwa jika ada beberapa file dalam direktori ini, file ini mungkin tidak digunakan sama sekali. Pelakunya adalah file yang tidak dihapus dengan deinstallation dari dnsmasq:

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

Hanya menghapus file ini (dan menjalankannya sudo resolvconf -usetelah itu) memecahkan masalah dns saya:

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 

Saya harap ini membantu orang lain dengan debugging (interaksi kompleks antara semua alat jaringan yang berbeda ini) juga. Jika Anda menggunakan resolvconfpastikan untuk lari ls /run/resolvconf/interfacesuntuk melihat apa yang ada di sana.

Anne van Rossum
sumber
1
Terima kasih, ini sangat membantu. Saya mencoba jawaban yang lebih tinggi dan tidak ada yang melakukan trik. Saya tidak memiliki file tambahan dalam /run/resolvconf/interface/direktori, tetapi NetworkManagerfile saya membutuhkan beberapa cinta. Jawaban Anda membantu menyelesaikan masalah ini untuk saya.
mason81
4

Saya baru saja menghapus tautan /etc/resolv.confdan membuat file reguler dengan alamat server nama. Ini berfungsi, dan saya tidak melihat alasan untuk menggunakan konstruksi yang agak aneh yang telah dibuat oleh pengembang Ubuntu.

Ivan
sumber
1
Ya, saya bukan penggemar perubahan seperti ini yang memengaruhi server, menambah kompleksitas dan opacity. Ini adalah perilaku inti yang seharusnya tidak berubah dari rilis ke rilis.
belacqua
Jawaban ini berusia 5 tahun, dan IMHO masih yang terbaik dari semua yang terdaftar. Sederhana, cepat dan efektif. Apakah ada kekurangan?
Craig S. Anderson
3

Anda dapat mengedit koneksi "AUTO ETH0" atau apa pun namanya yang Anda gunakan untuk terhubung di NM. Anda dapat melakukan ini dengan mengklik kanan pada NM dan memilih "Edit Koneksi ...". Pada tab IPv4 Anda dapat memilih "Otomatis (DHCP) hanya" sebagai "Metode" dan NM akan memungkinkan Anda untuk mengatur alamat server nama secara manual bahkan alamat dikirim melalui DHCP.

Frank Barcenas
sumber
3

Menambahkan bit saya ke daftar yang sudah lama, inilah cara lain (diuji pada 12.04):

Sunting /run/resolvconf/interface/NetworkManageragar sesuai dengan kebutuhan Anda. Ini sebuah contoh:

search foobar.com example.com
nameserver 192.168.1.1

Kemudian, sebagaimana dinyatakan untuk sebagian besar contoh lainnya, lakukan a sudo resolvconf -u. Sekarang Anda akan menemukan resolv.confpenampilan Anda seperti ini:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Saya masih tidak suka cara itu diterapkan sekarang (tampaknya Ubuntu membutuhkan layanan untuk setiap foo yang dibuatnya), dan pasti lebih memilih yang jelas resolv.conf. Namun pendekatan ini tampaknya merupakan kompromi terbaik bagi saya sejauh ini. "Localhost-NS" yang ditambahkan seharusnya tidak terlalu menyakitkan.

Izzy
sumber
2

Saya memperbaikinya dengan mengubah urutan sumber. Saya memindahkan dnssumber sebelumnya mdnsdi /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Anda dapat menyimpan pengaturan Anda dan masih menggunakan server caching lokal dengan cara ini.

Dan B
sumber
alih-alih menambahkan entri, perbaiki sistem yang rusak dan memberi Anda info yang sebenarnya Anda inginkan. +1.
nelaaro
2

Bagaimana tentang:

sudo dpkg-konfigurasikan resolvconf

Sebelum itu, gunakan Network Manager untuk mengubah alamat DNS dan ubah Metode ke

Alamat otomatis (DHPC) saja

Kemudian jalankan perintah di atas dan reboot. Itu solusi bagi saya.

Adige72
sumber
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
Roy Rogers
sumber
2

Ini adalah pertanyaan yang sangat populer, dengan sekumpulan jawaban standar yang mungkin, yang semuanya, IMO, cukup simpel. I untuk satu selalu memiliki masalah untuk mendapatkan Ubuntu untuk menghormati pengaturan DNS yang saya atur di NetworkManager - khususnya pengaturan server DNS statis dengan "Otomatis (DHCP) hanya alamat" - dan hari ini saya akhirnya menemukan apa yang SANGAT SALAH.

Masalahnya adalah dalam interaksi antara resolvconf dan NetworkManager. resolvconf membuat file ini dipanggil /etc/resolvconf/interface-order. Setidaknya pada sistem saya, NetworkManager sama sekali tidak ada dalam file ini (kecuali bahwa itu ditutupi oleh * wild card di akhir). Jadi yang terjadi adalah, laporan terbaru dhclient ke resolvconf lebih diutamakan daripada apa yang dikatakan NetworkManager.

Jadi, setidaknya dalam kasus saya, jawaban sebenarnya adalah menambahkan

NetworkManager

di atau dekat bagian atas /etc/resolvconf/interface-order.

(Ya, saya tahu banyak orang hanya mengatakan "uninstall resolvconf", yang sepertinya merupakan ide yang buruk, bagi saya. Tetapi lebih dari itu, setidaknya cerdik dan ramah menganggap resolvconf bagian penting dari sistem [yaitu, ubuntu -minimal tergantung padanya], jadi akan sulit untuk menjaga sistem Anda dalam keadaan yang konsisten dan diperbarui tanpa resolvconf.)

Atas permintaan saya dapat memberikan detail lebih lanjut tentang bagaimana saya menemukan ini. ( EDIT : ternyata saya tidak melakukannya ketika diminta, maaf. Pada titik ini saya tidak ingat lebih detail dari apa yang saya katakan selanjutnya :) Singkatnya, saya mengganti resolvconf yang dapat dieksekusi dengan pembungkus shell di sekitarnya yang membuang argumen, input, output dan stderr ke file; dan menambahkan set -x ke skrip pembaruan resolvconf.

( EDIT : Saya dapat mengatakan bahwa apa yang saya maksud dengan bagian pertama adalah bahwa saya menggunakan sudo untuk memindahkan resolvconf aktual yang dapat dieksekusi, yang dapat ditemukan menggunakan perintah yang mana atau jenis perintah. Kemudian buat skrip shell yang pada akhirnya hanya menjalankan perintah yang dipindahkan resolvconf, tetapi juga menggemakan argumen ke beberapa file, dan menggunakan pengalihan shell untuk mengirim stdin, stdout, dan stderr ke berbagai file lainnya. Saya tidak ingat di mana "skrip pembaruan resolvconf" adalah dan saat ini tidak dapat dengan mudah memeriksa. banyak Geeks Linux yang bisa mengerti apa yang saya maksud; mungkin beberapa samaritan yang baik akan memberikan lebih detail dalam komentar.)

Steven Collins
sumber
Tolong " berikan lebih banyak detail tentang bagaimana Anda mengetahuinya "
Pierre.Vriens
1

Untuk mengubah DNS, ikuti instruksi di: https://developers.google.com/speed/public-dns/docs/using

  1. Pergi ke Jaringan

  2. Pilih koneksi yang Anda inginkan untuk mengkonfigurasi DNS.

  3. Untuk mengubah pengaturan koneksi nirkabel, pilih tab Wireless, lalu pilih jaringan nirkabel yang sesuai.

  4. Klik panah (kanan), dan di jendela yang muncul, pilih tab Pengaturan IPv4 atau Pengaturan IPv6.

  5. Jika metode yang dipilih adalah Otomatis (DHCP), buka dropdown dan pilih alamat Otomatis (DHCP) saja. Jika metode ini diatur ke sesuatu yang lain, jangan mengubahnya.

  6. Di bidang Server DNS, masukkan alamat IP DNS, dipisahkan dengan koma

Ferroao
sumber
0

0.Tambahkan DNS sementara. Edit /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1. Instal atau perbarui resolvconf.

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

2. Tambahkan nameserver Anda ke /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Boot ulang mesin Anda.

xiaoliuzi
sumber