Bagaimana saya mendapatkan resolvconf untuk membuat ulang resolv.conf setelah saya mengubah / etc / network / interfaces?

92

Setelah memperbarui /etc/network/interfacesdengan sesuatu yang sangat mirip dengan di bawah ini, bagaimana saya bisa /etc/resolv.confmemperbarui? Saya mencoba (sebagai root) resolver -u, service networking restarttetapi mereka tidak berhasil. Saya juga memperbaiki symlink untuk resolv.confdan mencoba resolver -ulagi. Akhirnya dengan frustrasi saya reboot, yang memang memperbaiki masalah dengan membangun kembali /etc/resolv.conf.

Ubuntu 12.04, server 64bit, semua tambalan terbaru diinstal.

Contoh /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
nslntmnx
sumber
Apa yang Anda coba lakukan dengan resolv.conf yang mencegah Anda melakukannya?
kingmilo

Jawaban:

106

service networking restart tidak selalu merupakan cara yang dapat diandalkan untuk menurunkan semua antarmuka.

The resolvconf -uperintah saja update resolv.confdari database resolvconf sendiri. Anda perlu memperbarui basis data.

Untuk memperbarui database Anda harus memanggil resolvconf dengan opsi -aatau -d. Itu terjadi di belakang layar ketika Anda menjalankan ifup atau ifdown. Jadi, biasanya, seperti halnya dengan perubahan lain ke /etc/network/interfaces, untuk mengaktifkan perubahan pada opsi dns- * Anda harus membongkar antarmuka yang dimaksud dan membukanya kembali. Atau Anda bisa reboot.

Jika Anda ingin membuat perubahan pada antarmuka tanpa ifupupup (mungkin karena Anda mengelola mesin dari jarak jauh dan kebetulan terhubung melalui antarmuka itu, natch) maka Anda dapat mencapai hasil yang sama dengan menjalankan resolvconf langsung dari baris perintah. Ini membutuhkan sedikit lebih banyak pengetahuan tentang semantik resolvconf. Asumsikan bait / e / n / i yang relevan adalah

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

di mana FFFF adalah keluarga alamat ("inet" atau "inet6").

Untuk mengaktifkan opsi dns- * ini, Anda menjalankan resolvconf sebagai berikut (ya, dengan baris baru di string yang disalurkan ke resolvconf).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Untuk bait yang diberikan dalam pertanyaan ini adalah yang berikut.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Lihat halaman manual resolvconf (8) dan file README paket resolvconf (/usr/share/doc/resolvconf/README.gz) untuk informasi lebih lanjut.

jdthood
sumber
"Jangan lakukan" restart jaringan layanan "; itu bukan cara yang dapat diandalkan untuk menurunkan semua antarmuka." Bekerja dengan baik untuk saya. Baik untuk mengetahui cara bersih melakukannya.
Aki
11
Jika Anda tidak melakukan "restart jaringan layanan", bisakah saya menyarankan Anda untuk tidak meletakkannya di baris pertama pertanyaan ini? Ketika buru-buru mencari solusi, hal pertama yang saya lakukan adalah menyalin dan menempelkan perintah pertama yang saya lihat.
Robin Winslow
4
@RobinWinslow +1 untuk membuat hari saya
Pete
8
Jawaban ini berasal dari orang yang telah mengembangkan resolvconf :)
heemayl
2
Untuk memulai ulang / membaca ulang /etc/network/interfaces, Anda dapat melakukannya ifdown eth0 && ifup eth0:; ia bekerja bahkan dalam sesi ssh jarak jauh.
Pierre-Damien
5

Bagi Anda yang mengelola server Anda dari jarak jauh, Anda dapat:

  1. perbarui dns-nameserversbaris/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Perhatikan bahwa ini harus dibagi dalam satu baris; (pemisah baris perintah linux). Anda seharusnya tidak kehilangan koneksi Anda saat ini. Pengecualian adalah membuat kesalahan ketik pada file antarmuka. Jika ini terjadi ifupakan gagal dan Anda harus memiliki akses fisik atau ethxxkoneksi lain .

berkilau
sumber
2

service resolvconf restartakan membuat ulang /etc/resolv.conffile tanpa banyak keributan.

Kamran
sumber
2
Saya mendapatkanFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital
perintah selesai namun tidak dibuat ulang /etc/resolv.confdi server ubuntu 14.04
Jossef Harush
1

Jawaban ini mirip dengan yang di atas tetapi menggunakan konfigurasi contoh pertanyaan untuk menjawab pertanyaan. Plus ini menjelaskan mengapa kedua perintah itu diperlukan.

Edit /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-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Perubahan ini tidak akan terjadi kecuali Anda me-reboot atau memuat ulang file konfigurasi:

Untuk memperbarui file antarmuka secara langsung, Anda perlu menjalankan perintah berikut:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Ini memungkinkan pembaruan ke antarmuka tanpa reboot atau memuat ulang.

Namun, perubahan perintah di atas akan hilang setelah reboot jika perubahan dalam /etc/network/interfacestidak dilakukan.

Ngomong-ngomong, jawaban terakhir dari BDenis dalam daftar ini benar-benar berfungsi menggantikan perintah terakhir dengan mem-parsing /etc/network/interfacesfile dan menyalurkan baris-baris tersebut ke dalam perintah. sudo resolvconf -a eth0 Sebenarnya ini adalah setengah dari jawaban dan contoh yang sangat bagus dari penguraian sed inline. Jika Anda ingin melihat bagaimana ini dilakukan, jalankan saja bagian pertama dari perintah dan saksikan parsing /etc/network/interfacesfile dan keluarkan semua informasi yang diperlukan Anda perlu menjalankan sudo resolvconf -a eth0perintah:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Perhatikan ini akan menghasilkan keluaran yang sama seperti perintah:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

Asalkan /etc/network/interfacesfile tersebut dikonfigurasi dengan informasi ini:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10
pengguna3199107
sumber
Sayangnya tidak bisa menggunakannya. Antarmuka saya dikelola oleh manajer jaringan dan DHCP, jadi menambahkannya /etc/network/interfacesbukan pilihan yang valid dalam kasus itu. (Ubuntu 14.04)
Tino
1

Jawaban sederhana:

Cukup instal resolvconf. apt install resolvconf

Setelah itu, ifup eth0perbarui dns dalam etc/resolv.conf, sesuai dengan dns-nameserversbaris dalam /etc/network/interfaces.

trogne
sumber
antarmuka tidak dikenal. Semua orang benar-benar tahu cara mengaburkan detail di sini ... Saya pikir kita harus bertujuan untuk menampung semua perintah. Script lengkap untuk masing-masing, tidak ada prosa.
mathtick
1

Pada 18.04, berikut ini berfungsi dengan baik (dijalankan sebagai root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Penting: Pastikan Anda telah resolvconfmenginstal paket .
Tampaknya tidak secara default, dan tanpa itu beberapa (!) Perubahan dari /etc/network/interfacesdiabaikan secara diam-diam (misalnya dns-*).

Raphael
sumber
0

Ini bekerja untuk saya:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Sesuaikan dengan itu.

jbgeek
sumber
0

Pada versi desktop Ubuntu 18.04, di mana tidak ada layanan networking, dan resolvconftidak diinstal secara default, saya telah berhasil melakukan regenerasi resolv.confdengan memulai ulang network-manager:

sudo service network-manager restart
Ruslan
sumber
-3

Anda juga dapat mencoba perintah ini:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
BDenis
sumber
3
Bisakah Anda jelaskan mengapa perintah ini harus bekerja?
αғsнιη
1
Ini tidak berfungsi dengan benar jika Anda memiliki lebih dari satu IP server nama pada baris tersebut dns-nameserver IP1 IP2. Baris kemudian harus diulangi resolv.conf, tetapi tidak.
Tino
Selain itu, /etc/network/interfacesgunakan dns-nameservers(perhatikan sdi akhir) saat resolvconfmenggunakan nameserver. Perintah itu tidak menghadapinya. Dan bahkan jika semuanya benar, saluran pipa sed | grep | sedpasti tidak akan menjadi cara yang paling efisien.
Melebius