Apa yang menimpa /etc/resolv.conf pada setiap boot?

23

Saya diberi file untuk mini linux, yang langsung masuk firefox. Ini berfungsi untuk semua yang seharusnya dilakukan, hanya saja saya tidak mendapatkan koneksi internet.

Kami memiliki 3 server DNS di jaringan, yang semuanya berfungsi. Saya bisa ping mereka juga. Tetapi ketika mencoba ping google.deatau wget google.desaya mendapatkan bad addresskesalahan.

nslookup google.de bekerja karena suatu alasan.

Saya melacak masalah ke saya resolv.confpada sistem boot tidak memiliki konten yang sama dengan resolv.confyang saya masukkan ke .isofile.

Saya mencoba memahami semua faktor yang digunakan untuk membuat dan memodifikasi resolv.conf. Saya tidak yakin saya mendapatkan semuanya, tetapi saya pasti tidak menemukan solusi di sana.

Jadi sebagai upaya terakhir, saya mencoba membuat resolv.conffile tetap menggunakan

:~# chattr +i /etc/resolv.conf

Ketika membangun kembali dan mem-boot kembali ke kejutan saya file saya diganti namanya resolv.conf~dan di tempatnya adalah file standar yang sama yang telah menghantui saya.

Isi file membuat saya percaya mendapat informasi dari jaringan itu sendiri. Ketika memulai .isodi Virtualbox tanpa akses internet, file saya disimpan apa adanya.

Saya mencoba mengubah /etc/dhcp/dhclient.confuntuk tidak mendapatkan informasi dari internet, dengan menghapus domain-name-serverdan domain-name-searchdari requestbagian file.

Sayangnya tidak berhasil.

Saya tidak menginstal NetworkManager. Iso didasarkan pada Ubuntu 14.04.

Mungkin ada informasi penting yang hilang. Saya senang menyediakannya.

MEMPERBARUI:

Saya rasa saya menemukan file yang membersihkan resolv.conf.

Sepertinya begitu /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

Itu bagian dari udhcpcprogram. Klien dhcp kecil, itu bagian daribusybox

Akan menyelidiki lebih lanjut.


UPDATE2 DAN SOLUSI:

Saya berkomentar bagian keluar (# Mulai ke #End), yang tampaknya menimpa /etc/resolv.conffile dan cukup yakin. Itulah pelakunya. Jadi naskah yang tidak jelas menyebabkan semua masalah ini.

Saya mengubah pertanyaan untuk mencerminkan, apa yang sebenarnya perlu diketahui untuk menyelesaikan masalah saya, sehingga akan lebih mudah ditemukan bagi orang-orang dengan masalah yang sama dan agar saya dapat menerima jawaban.

Terima kasih atas bantuannya dalam mencari tahu semuanya.

Minix
sumber
1
Mengatur flag immutable pada resolv.conf tidak berfungsi seperti yang Anda harapkan karena file tidak diubah. Entri direktori di / etc telah diubah ketika file diubah namanya. Anda harus mengatur / etc agar tidak berubah - sesuatu yang Anda benar-benar tidak ingin lakukan.
selesai24
@ DougO'Neal saya mengerti. Terimakasih atas peringatannya.
Minix

Jawaban:

24

1) Anda seharusnya tidak memperbarui resolv.conf secara manual, karena semua perubahan akan ditimpa oleh data yang disediakan oleh server DHCP lokal Anda. Jika Anda menginginkannya statis, jalankan sudo dpkg-reconfigure resolvconfdan jawab "tidak" untuk pembaruan dinamis. Jika Anda ingin menambahkan entri baru di sana, edit /etc/resolvconf/resolv.conf.d/basedan jalankan sudo resolvconf -u, itu akan menambahkan entri Anda dan entri server DHCP.

2) Cobalah untuk mengedit / etc / network / interfaces Anda dan tambahkan entri Anda di sana, seperti

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

dan kemudian restart /etc/init.d/networking restartatau sudo ifdown -adansudo ifup -a

3) Sistem Anda menggunakan udhcp yang merupakan program klien DHCP yang sangat kecil. Klien udhcp menegosiasikan sewa dengan server DHCP dan memberi tahu sekumpulan skrip ketika sebuah leasing diperoleh atau hilang. Anda dapat membaca tentang penggunaannya di sini atau hanya mengedit skrip ini (seperti yang Anda lakukan).

Kirill-a
sumber
1
Saya memang menambahkan entri ke /etc/resolvconf/resolv.conf.d/basedan berlari resolvconf -u. Sayangnya, itu tidak berhasil.
Minix
Sudahkah Anda mencoba menjalankan sudo dpkg-mengkonfigurasi resolvconf? Setelah menjalankan resolvconf -u, entri Anda tidak ada di file hasil? Bagaimana Anda menambahkannya, seperti "nameserver 127.0.0.1" atau "search google.com"?
kirill-a
Saya memang lari dpkg-reconfigure resolvconf. Entri tidak ada di sana. Dan saya punya entri dengan keduanya nameserver ipdan search domain.
Minix
Tidak, menjalankan dpkg-reconfigure resolvconftidak akan menambah entri, tetapi Anda dapat menonaktifkan pembaruan otomatis. Jika Anda menonaktifkan pembaruan, Anda dapat mengedit resolv.conf secara manual dan itu tidak boleh ditimpa.
kirill-a
Buruk saya karena mengutarakannya dengan kikuk, saya menjawab kalimat komentar Anda dengan kalimat. Setelah menjalankan resolvconf -uentri tidak ditambahkan.
Minix
4

Saya juga mengalami hal ini. Mengomentari domain-name-serverjuga tidak memperbaikinya.

Juga, saya tidak menggunakan resolvconf, cukup sederhana /etc/resolv.conf.

Saya tidak mencoba menggunakan chattr +iuntuk mengunci resolv.confkarena sepertinya terlalu berantakan. Juga, saya ingin Wayang dapat memodifikasi resolv.confbila perlu.

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.

richardkmiller
sumber
Tidak berfungsi di Ubuntu 18.04 :( /etc/resolv.confditimpa setelah reboot.
Dan Dascalescu
3

Ubuntu 16.04 Jika antarmuka jaringan untuk instance server Anda dikendalikan oleh DHCP, program dhclient akan menimpa /etc/resolv.conffile Anda setiap kali layanan jaringan dihidupkan ulang.

Anda dapat memperbaiki masalah dengan mengedit /etc/dhcp/dhclient.conffile dan menambahkan pernyataan "menggantikan" untuk nama domain , pencarian domain dan server nama domain sebagai berikut:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

Dalam kasus khusus ini server nama terletak di "192.168.56.103" dan nama domainnya adalah "local.com"

Perhatikan bahwa setiap baris diakhiri dengan titik koma dan nama domain dilampirkan dalam tanda kutip ganda.

Sand1512
sumber
Sayangnya ini tidak berfungsi di Ubuntu 18.04. Setelah reboot, /etc/resolv.confditimpa dengan 127.0.0.53.
Dan Dascalescu
Mungkin Anda dapat mencoba ini askubuntu.com/questions/1031279/…
Sand1512
Periksa juga apakah Anda menjalankandnsmasq
Sand1512
0

buka direktori ini:

  cd /etc/resolvconf/resolv.conf.d

Buka file bernama kepala dan letakkan IP DNS atau nama di sana. Buka file bernama tail dan letakkan domain di sana. Mulai ulang.

pengguna245423
sumber
Direktori itu tidak ada secara default di Ubuntu 18.04. Apakah Anda perlu menginstal layanan yang membuatnya?
Dan Dascalescu
0

Di Azure VMs /etc/resolv.conf tidak dapat diedit secara langsung.

Coba tambahkan entiries DNS di file konfigurasi jaringan Anda / etc / sysconfig / network-scripts / ifcfg-eth0 dan seterusnya seperti di bawah ini:

DOMAIN = example.com

DNS1 = 10. . . *
DNS2 = 10. . . *
DNS3 = 10. . . *

dan restart layanan jaringan setelah menyimpan file. Anda akan melihat konfigurasi kemudian akan ditambahkan ke resol.conf juga.

Krishan
sumber
0

Untuk membuat perubahan terkait DNS di resolv.confpermanen, Anda perlu mengubah file konfigurasi DHCP bernama dhclient.conf. Anda dapat menemukan file di /etc/dhcp/dhclient.conf .

Buka file untuk diedit (jangan lupa untuk menggunakan sudo). Anda akan melihat baris seperti ini:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

Hapus "#" sebelumnya dan gunakan nama domain dan / atau domain-nama-server yang Anda inginkan. Simpan itu. Sekarang perubahan terkait DNS akan menjadi permanen.

Kredit masuk ke: https://itsfoss.com/resolvconf-permanent-ubuntu/

MAChitgarha
sumber
Jawaban ini sudah diberikan 2 tahun sebelumnya .
Dan Dascalescu
0

Gunakan perintah di bawah ini untuk mencegah resolv.conf atau file apa pun dari menimpa setelah reboot

chattr -V + i namafile misalnya chattr -V + i /etc/resolv.conf

Untuk mengembalikan kembali perubahan, gunakan perintah di bawah ini:

chattr -i nama file - untuk mengaktifkan kembali masukkan ke file

chattr (Change Attribute) adalah utilitas baris perintah Linux yang digunakan untuk mengatur / menghapus atribut tertentu ke file di sistem Linux untuk mengamankan penghapusan tidak disengaja atau modifikasi file dan folder penting, meskipun Anda login sebagai pengguna root.

Ashish Jain
sumber
Saya percaya bahwa pengguna dalam pertanyaan itu benar-benar mencoba chattr, tetapi menyadari bahwa ini tidak berpengaruh.
Kusalananda
Ini pasti akan berhasil, Opsi yang dicoba pengguna adalah untuk mengedit file bukan untuk membuatnya tidak berubah
Ashish Jain
Silakan jalankan perintah dengan sudo chattr -V + i nama file mis. Sudo chattr -V + i /etc/resolv.conf
Ashish Jain
-1

Di ubuntu 18.04 menggunakan NetworkManager. Anda perlu menghapus file 'resolv.conf' dan biarkan NetworkManager membuatkannya untuk Anda.

Untuk menghapus file dalam tipe terminal sudo rm -f /etc/resolv.conf; ini akan menghapus file untuk Anda.

Reboot sistem dan NetworkManager akan menghasilkan file resolv.conf untuk Anda.

mabvutosicho
sumber