Bagaimana cara saya memasukkan baris dalam resolv.conf yang tidak akan hilang saat reboot?


173

Saya akhirnya bermigrasi ke 12,04 dari 7.10. Saya memiliki satu bagian terakhir untuk diselesaikan tetapi saya bingung. Saya menggunakan Wayang pada setiap server, dan di masa lalu saya telah memasukkan alamat server nama dan nama domain pencarian untuk puppetmaster di resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

Dalam 12,04 resolv.conf akan ditimpa ketika reboot. Saya tidak dapat menggunakan IP statis untuk ini, jadi menggunakan / etc / network / interfaces untuk membantu saya keluar adalah titik nol.

# 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

Apakah ada cara untuk mendapatkan resolvconf untuk menangani ini baik di kepala, ekor atau pangkalan? Jika ada, apakah ada contoh yang bisa saya gunakan untuk mengubah pada server saya.

Bantuan apa pun sangat kami hargai.


2
resolvconf adalah perangkat lunak yang buruk, hapus saja, dan kelola /etc/resolv.conf dengan cara lama.
pria perunggu

Jawaban:


134

Mungkin lebih baik untuk memiliki server DNS Anda dapat menyelesaikan 'boneka' ke alamat yang benar, dan baik untuk memiliki server DHCP Anda membagikan alamat server nama DNS dan daftar pencarian atau yang lain (jika Anda memiliki alamat IP statis) untuk memiliki sesuatu seperti berikut ini di / etc / network / interfaces.

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10

Tetapi jika Anda ingin melakukannya melalui file konfigurasi resolvconf Anda akan ingin mengedit /etc/resolvconf/resolv.conf.d/base. Dalam file itu, masukkan info Anda seperti yang Anda inginkan resolv.conf.

nameserver 192.168.1.XXX

Kemudian beri tahu resolvconf untuk membuat ulang resolv.conf.

sudo resolvconf -u

13
Meskipun jawaban ini memiliki suara, dan bagian pertama lebih atau kurang benar, bagian kedua dari jawaban itu salah. (1) Apakah tidak menempatkan "search" baris dalam /etc/resolvconf/resolv.conf.d/head. Jika Anda meletakkan baris "search" di sana, baris ini akan diabaikan jika resolvconf menyertakan baris "search" di bagian dinamis dari file resolv.conf. Penyelesai glibc mengabaikan semua kecuali baris "pencarian" atau "domain" terakhir. Lihat resolv.conf (5). (2) Jika konfigurasi resolvconf diubah, Anda tidak harus memulai kembali pekerjaan resolvconf tetapi jalankan pembaruan, "resolvconf -u".
jdthood

1
Saya telah menghapus garis. Pilihan lainnya adalah menggunakan ekor, bukan kepala.
tgm4883

6
@ishma: Hai. Pertama, untuk mencegah kesalahpahaman: tidak ada yang menulis ke file base, head atau tail. Tidak ada yang menulis ke file apa pun di /etc/resolvconf/resolv.conf.d/ saat dijalankan. File-file ini dibaca oleh resolvconf yang merakit konten mereka ke dalam file yang ditulisnya --- /run/resolvconf/resolv.conf --- yang ditunjuk oleh symlink /etc/resolv.conf. Kedua, tentang apa yang harus dilakukan setelah opsi dns- * di / etc / network / interfaces diubah. Jangan tidak menjalankan "/etc/init.d/networking restart"; yang sekarang sudah usang. Sebaliknya ifdown antarmuka yang dimaksud dan buka kembali.
jdthood

4
Dalam 14,04 jawaban ini tidak membantu saya.
Jay Sullivan

2
Jika semuanya gagal .. $ sudo resolveconf -u tampaknya tidak mengubah saya, restart mesin, presto.
MSpreij

35

Saya pikir jawabannya adalah memeriksa Anda /etc/dhcp/dhclient.conf, yaitu jangan meminta dns-nameserversdari klien dhcp Anda .

Kemudian perbarui /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Maka Anda resolv.confakan secara otomatis mengkonfigurasi seperti yang Anda inginkan.

Tambahkan ke dns-searchdan kemudian jalankan a /etc/init.d/networking restart (meskipun skrip ini tidak digunakan lagi, ia masih berfungsi).


5
aturan dhclient atas pengaturan resolvconf jadi ini harus menjadi jawaban terbaik.
Alex R

6
/etc/init.d/networking restarttidak bekerja pada mesin saya, tetapi sudo ifdown -akemudian sudo ifup -aberhasil. (Juga, butuh sedikit waktu untuk menyadari bahwa saya harus mengganti dnsserveripdengan sesuatu seperti 8.8.8.8; Saya merasa agak konyol.)
Jason Gross

cobasystemctl restart networking.service
Pavel Sayekat

20

Ini kemungkinan disebabkan oleh konfigurasi DHCP ketika Anda pertama kali menginstal Ubuntu. Coba proses 3 langkah ini untuk menangani masalah konfigurasi otomatis ini.

Pertama

Edit konfigurasi antarmuka Anda, yang terletak di: /etc/network/interfaces

Tambahkan baris ini di bawah ini iface lo inet loopback:

dns-nameservers yourdns youraltdns

Sebagai contoh untuk Google DNS, Anda mungkin ingin menggunakan ini:

dns-nameservers 8.8.8.8 8.8.4.4

Kedua

Edit file konfigurasi DHCP Anda, yang terletak di:

/etc/dhcp/dhclient.conf

Tandai sintaksis sebagai komentar yang digunakan #pada setiap baris atau cukup hapus setiap server nama permintaan. Di 16.04, Anda mungkin tidak diharuskan untuk membuat perubahan apa pun di sini.

Ketiga

Mulai ulang jaringan Anda dengan menggunakan perintah ini:

/etc/init.d/networking restart

Dalam 16,04:

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restarttidak bekerja pada mesin saya, tetapi sudo ifdown -akemudian sudo ifup -aberhasil.
Jason Gross

Ini sederhana dan berfungsi meskipun agak sedikit macet! Masalah dengan hal-hal seperti ubuntu adalah memiliki 1000 cara untuk melakukan satu hal!
Willa O Ng'wana

Dan kemudian Anda dapat memeriksa bahwa /etc/resolv.conf berisi 2 entri DNS baru pada baris berguna pertama.
ROMANIA_engineer

8

Silakan lihat resolvconfhalaman manual. Anda dapat memaksakan penyertaan pengaturan DNS tertentu dengan membuat misalnya /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Ada file khusus lainnya (kepala dan ekor), ini dapat membantu Anda mencapai apa yang Anda inginkan.


4
Anda dapat menambahkan baris ke /etc/resolvconf/resolv.conf.d/base, tetapi karena setiap server nama dapat diakses melalui antarmuka dan hanya dapat diakses saat antarmuka itu naik, yang terbaik adalah mengaitkan informasi server nama dengan antarmuka itu. Jika antarmuka dikonfigurasikan dengan ifup, ini berarti: letakkan info pada baris "dns-search" dan "dns-nameservers" di / etc / network / interface stanza. Jika antarmuka dikonfigurasi melalui DHCP maka ini berarti: konfigurasikan server DHCP untuk menyediakan nama pencarian dan alamat server nama kepada klien. Dll. Gunakan file "base" hanya sebagai peretasan sementara atau sebagai upaya terakhir.
jdthood

Ya. Saya menambahkan "nameserver 1.2.3.4" di /etc/resolvconf/resolv.conf.d/base
Bastion

8

Karena banyak jawaban lain menyatakan ini ada hubungannya dengan resolvconfdiinstal di sistem Anda.

Jadi cara terbaik untuk menjaga sesuatu resolv.confagar tidak hilang saat reboot adalah memasukkannya dalam file konfigurasi resolvconf yang ada di:

/etc/resolvconf/resolv.conf.d/

Di sana cari headfile. Apa pun yang Anda letakkan di sana akan ditulis di bagian atas/etc/resolv.conf

Jadi semuanya akan seperti ini:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

Inilah jawaban yang benar-benar tepat! Akhirnya!
user77232

6

Bagi saya, jawaban di atas tidak memadai karena alasan berikut:

  • Saya tidak menggunakan resolvconf, hanya polos /etc/resolv.conf.
  • Menggunakan chattr +iuntuk mengunci resolv.confsepertinya terlalu berantakan. Saya membutuhkan Wayang untuk bebas melakukan perubahan saat diperlukan.
  • AFAIK, mengedit /etc/network/interfacestidak mencegah resolv.confditimpa; itu hanya menentukan server nama yang harus ditulis. Bagi saya, menentukan server nama bukan itu intinya. Saya mencoba untuk mengatur options timeout:1dan options attempts:1di resolv.conffile saya .

The solusi terbaik saya menemukan menimpa perilaku default dhclientmenggunakan kait yang didokumentasikan.

Buat file baru di /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatedengan konten berikut:

#!/bin/sh
make_resolv_conf() {
    :
}

Kemudian buat file tersebut dapat dieksekusi:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Sekarang ketika dhclient berjalan - baik saat reboot atau ketika Anda menjalankan secara manual sudo ifdown -a ; sudo ifup -a- ini memuat skrip ini nodnsupdate. Script ini menimpa fungsi internal yang disebut make_resolv_conf()yang biasanya akan menimpa resolv.confdan bukannya tidak melakukan apa pun.

Ini bekerja untuk saya di Ubuntu 12.04.


1
Bekerja dengan baik di Debian 8. Solusi elegan!
Artur Bodera

1
hanya untuk kelengkapan: skrip dhclient- manpage menyimpan informasi tentang skrip konfigurasi jaringan klien DHCP yang disebutkan sebagai jawaban di atas.
hecke

Ini tidak berfungsi pada 16.04, saya menambahkan hal-hal ke /etc/network/interfaces.d juga, tanpa efek, menambahkan override kosong make_resolv_conf yang direkomendasikan di sini, tidak ada efek .... tetapi tidak mengubah / etc / dhcp / dhclient.conf - apakah saya benar-benar perlu memodifikasi file konfigurasi statis untuk memperbaikinya?
silverjam

3

Ini mungkin hanya beberapa kekhasan aneh di mesin saya, tetapi orang lain mungkin memiliki kasus sudut yang sama.

Saya mencoba berbagai cara untuk memasukkan server nama ISP saya di /etc/resolv.conf tanpa hasil:

  • Saya memasukkan mereka ke dalam /etc/network/interfacesdan memulai kembali jaringan. Mereka tidak muncul di /etc/resolv.conf.

  • Saya menempatkan mereka /etc/resolv.confsecara eksplisit, tetapi tentu saja mereka ditimpa. Mereka memang muncul /run/resolvconf/interface/eth0.inet, tetapi tidak pernah berhasil /etc/resolv.conf.

  • Saya mencoba mengonfigurasi resolvconf untuk pembaruan dinamis. Tidak ada perubahan.

Akhirnya saya membaca di suatu tempat bahwa jika mesin lokal (127.0.0.1) muncul di /etc/resolv.confserver nama lain tidak termasuk.

Dalam keputusasaan saya edit /run/resolvconf/interface/lo.named, dihapus hanya baris di dalamnya ( nameserver 127.0.0.1) dan restart: ifdown eth0 && ifup eth0.

/etc/resolv.conf lalu menyertakan server nama ISP saya untuk pertama kalinya! Saya berlari service network-manager restartuntuk melihat apakah itu stabil dan /etc/resolv.confmasih termasuk nameserver ISP saya. Reboot hanya untuk memastikan dan itu masih ada tetapi /run/resolvconf/interface/lo.named mendapat ulang ke: nameserver 127.0.0.1.

Anehnya memulai kembali jaringan masih berfungsi: /etc/resolv.confmasih mengandung server nama ISP saya. Saya tidak bisa menjelaskan ini (bisakah seseorang?) Tetapi ini mungkin membantu seseorang terjebak di tempat yang sama.


Ini mungkin disebabkan oleh dnsmasq. Anda dapat menghapusnya menggunakan apt-get remove dnsmasqatau memperbarui konfigurasi /etc/dnsmasq.conf.
Tombart

2

tambahkan nameserver Anda ke file /etc/resolvconf/resolv.conf.d/head. File berisi pesan yang telah Anda terima:

file itu akan terlihat seperti ini setelah menambahkan 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# 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.8.8

3
Menambahkan baris ke /etc/resolvconf/resolv.conf.d/head adalah solusi yang buruk, bahkan lebih buruk daripada menambahkan baris ke /etc/resolvconf/resolv.conf.d/base. Solusi yang benar untuk antarmuka yang dikonfigurasi menggunakan ifup adalah dengan menambahkan baris "dns-search" dan "dns-nameservers" ke bait di / etc / network / interfaces. Lihat juga komentar saya tentang jawaban lain.
jdthood

3
Ini adalah satu-satunya hal yang benar-benar bekerja untuk saya ... dan tampaknya sulit untuk mengetahui mengapa tidak ada solusi yang "benar" bekerja.
silverjam

1

tambahkan pada baris terakhir misalnya:

nameserver 8.8.8.8

Buka terminal dan ketik

sudo chattr +i /etc/resolv.conf

tanda + i menangani bahwa file tidak akan direset pada boot.

Untuk membatalkan hal di atas

sudo chattr -i /etc/resolv.conf

Untuk lebih

man chattr

1

Solusi lain tidak bekerja untuk saya di sistem Fedora 20 saya. Masalah khusus saya adalah bahwa baris "pencarian" di /etc/resolv.conf sedang ditimpa. Inilah yang diperbaiki. (Ini mengasumsikan bahwa NetworkManager memproduksi baris search rn.yourcompany.com dan Anda ingin memilikinya search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Gunakan perintah "ifconfig" untuk mencari tahu antarmuka apa yang menarik:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. Menjadi root dan ubah ke direktori perangkat jaringan konfigurasi sistem:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Gunakan editor favorit Anda yang tersedia untuk menambahkan Domainbaris dengan domain tambahan untuk mencari:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Simpan, keluar, dan masuk kembali. NetworkManager sekarang harus memiliki baris di \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
Bukan untuk turun hujan di parade Anda, tapi ini Ask Ubuntu, dan Fedora di luar topik.
Flimm

1

Tambahkan entri di /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

dan jalankan perintah berikut

sudo resolvconf -u


0

Jika Anda menggunakan DHCP, edit /etc/dhcp/dhclient.confuntuk menambahkan server DNS tambahan:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Klien DHCP menimpa dns-nameserversin etc/network/interfacesdan saya pikir /etc/resolvconf/resolv.conf.d/basejuga.

Ini bekerja untuk saya di server Ubuntu 14.04.3.

Lihat Wiki Konfigurasi Jaringan Debian untuk detailnya.


0

Cukup cadangkan resol.conf Anda dan hapus resolvconf pacage dan edit file /etc/resolv.conf ke apa pun yang Anda inginkan.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Kita harus memiliki hak untuk memilih untuk tidak menggunakan perangkat lunak yang buruk seperti resolvconf.

Omong-omong, kolom pencarian di /etc/resolv.conf tidak berguna.


0

Menggunakan resolvconfdan menonaktifkan systemd-resolved.service(ini berfungsi untuk saya ubuntu 19.04):

  1. Pasang resolvconf

    sudo apt install resolvconf
    
  2. Menambahkan server nama

    Buka /etc/resolvconf/resolv.conf.d/basedengan editor teks Anda, saya gunakan vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    lalu, tambahkan server nama di dalam file yang dibuka, mis .:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Memperbarui resolv.conf

    sudo resolvconf -u
    
  4. Nonaktifkan systemd-resolved.servicedan mulai ulang. nameserver 127.0.0.53tidak ditulis untuk /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Selesai!

Sumber


Bisakah Anda menentukan untuk versi Ubuntu mana Anda melakukan ini? Pertanyaan aslinya merujuk ke ubuntu 12.04, karena sudah lama ditinggalkan.
Marc Vanhoomissen

0

Saya menemukan ini perbaikan paling sederhana. Jika Anda memiliki resolv.confdan resolvconffile, mereka akan saling menginjak. Anda perlu menghapus resolv.conffile yang mendapatkan dan menimpa setiap kali Anda melakukan reboot.

Letakkan bagian nameserver 1.1.1.1 1.0.0.1bawah file resolvconf lalu jalankan

sudo rm /etc/resolv.conf

Untuk menyingkirkan file tersebut. Kemudian lakukan restart dan semuanya akan berfungsi.


0

Solusi Mi pada 12.04:

Saya perhatikan bahwa jika Anda menambahkan dns-nameserver di antarmuka yang tidak mengambil server resolusi nama

halaman manual resolvconf

Untuk membuat resolv.conf tidak berubah ketika kami mengedit secara manual lakukan ini di terminal:

sudo resolvconf –disable-updates

setelah:

sudo resolvconf -a eth0 # or your network interface

kemudian secara manual mengedit /run/resolvconf/resolv.confmenambahkan maksimal dua server DNS.

Kemudian mulai kembali layanan:

sudo /etc/init.d/networking restart

4
Ini bukan cara yang tepat untuk menyelesaikan masalah.
jdthood

1
@jdthood sebagai orang yang menjelajah ini dapatkah Anda menguraikan MENGAPA ini bukan cara yang benar? Tampaknya logis bagi saya, tetapi saya tidak tahu apa-apa tentang ini.
ErikPerik

-1

Taruh saja

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

perintah pada /etc/network/interfaceskonfigurasi Anda . kemudian restart jaringan Anda.

itu harus bekerja.


-2

Konfigurasi itu dinyatakan dalam /etc/default/bind9

RESOLVCONF=no|yes

tidak = tidak menerapkan ketentuan dalaminit.d bind9

ya , atau nilai lainnya = gantiresolv.conf

Masalah ini bertambah ketika Anda menginstal bind9dan tidak peduli memeriksa semua conf.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.