/ Etc / network / interfaces işlevini değiştirdikten sonra resolv.conf dosyasını nasıl yeniden düzenlerim?


92

/etc/network/interfacesAşağıdakine çok benzer bir şeyle güncelledikten sonra nasıl /etc/resolv.confgüncellerim? Denedim (root olarak) resolver -u, service networking restartama işe yaramadı. Ayrıca sembolik bağlantıyı düzelttim resolv.confve resolver -utekrar denedim . Sonunda hayal kırıklığı içinde yeniden inşa, sorunu yeniden düzelttim /etc/resolv.conf.

Ubuntu 12.04, 64bit server, yüklü olan tüm en son yamaları.

Örnek /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


Resolv.conf'un senin yapmasını engellediği o şeyi yapmaya çalışıyordun?
kingmilo

Yanıtlar:


106

service networking restart her zaman tüm arayüzleri aşağı indirmenin güvenilir bir yolu değildir.

resolvconf -uKomut sadece güncellemeler resolv.confresolvconf kendi veritabanından. Veritabanını güncellemeniz gerekiyor.

Veritabanını güncellemek için -aveya -dseçeneğiyle resolvconf'u çağırmanız gerekir . İfup veya ifdown çalıştırdığınızda bu sahne arkası olur. Normalde, başka herhangi bir /etc/network/interfacesdeğişiklikte olduğu gibi, dns- * seçeneklerinde yapılan değişiklikleri etkinleştirmek için, söz konusu arayüzü ifdown etmek ve tekrar ifup etmek zorundasınız. Veya yeniden başlatabilirsiniz.

Eğer arayüzü açmadan bir arayüzde değişiklikler yapmak istiyorsanız (belki de makineyi uzaktan yönettiğinizden ve bu arayüz üzerinden bağlanmış olduğunuzdan, natch), aynı sonucu resolvconf komutunu doğrudan komut satırından çalıştırarak elde edebilirsiniz. Bu, resolvconf'un semantiği hakkında biraz daha fazla bilgi gerektirir. İlgili varsayalım / e / n / i stanza

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

burada FFFF bir adres ailesidir ("giriş" veya "giriş6").

Bu dns- * seçeneklerini etkinleştirmek için resolvconf komutunu aşağıdaki gibi çalıştırırsınız (evet, resolvconf'a aktarılan dizgideki yeni satırlarla).

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

Soruda verilen stanza için bu şöyle olacaktır.

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

Daha fazla bilgi için resolvconf (8) kılavuz sayfasına ve resolvconf paket README dosyasına (/usr/share/doc/resolvconf/README.gz) danışın.


"Yapmayın" servis ağı yeniden başlatılıyor "; bu, tüm arayüzleri aşağı indirmenin güvenilir bir yolu değil." Benim için iyi çalışıyor. Yine de yapmanın temiz yolunu bilmek güzel.
Aki,

11
"Servis ağı yeniden başlatmayı" yapmamalısınız, bu sorunun ilk satırına girmemenizi önerebilir miyim? Aceleyle bir çözüm ararken ilk yaptığım ilk şey kopyalayıp yapıştırmak oldu.
Robin Winslow

4
Günümü yapmak için @RobinWinslow +1
Pete,

8
Bu cevap geliştirmiş olan kişiden geliyor resolvconf :)
heemayl

2
Yeniden başlatmak / yeniden okumak /etc/network/interfacesiçin şunu yapabilirsiniz ifdown eth0 && ifup eth0:; uzak bir ssh oturumunda bile çalışır.
Pierre-Damien,


5

Sunucularınızı uzaktan yönetenler için şunları yapabilirsiniz:

  1. içindeki dns-nameserverssatırı güncelle/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Bunun bölünmüş bir satırda olması gerektiğine dikkat edin; (linux komut satırı ayırıcısı). Mevcut bağlantınızı bile kaybetmemelisiniz. Bunun istisnası, arabirimler dosyasında bir yazım hatası yapmaktır. Bu olursa ifupbaşarısız olur ve fiziksel olarak veya başka bir ethxxbağlantıya sahip olmanız gerekir .


2

service resolvconf restart/etc/resolv.conffazla telaşa neden olmadan dosya yeniden oluşturacak .


2
AnladımFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital

komut tamamlandı ancak /etc/resolv.confubuntu sunucusunda yenilenmedi
14.04

1

Bu cevap yukarıdaki soruya benzer ancak soruyu cevaplamak için sorulardaki örnek yapılandırma bilgilerini kullanır. Ayrıca bu, her iki komutun neden gerekli olduğunu açıklar.

Düzenle /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

Yapılandırma dosyasını yeniden başlatmadan veya yeniden yüklemediğiniz sürece bu değişiklikler yapılmayacaktır:

Arayüzler dosyasını canlı olarak güncellemek için aşağıdaki komutu çalıştırmak gerekir:

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

Bu, yeniden başlatma veya yeniden yükleme olmadan arayüzde güncelleme yapılmasına izin verir.

Ancak, yukarıdaki değişiklikler, yapılan değişiklikler yapılmazsa, yeniden başlatma sonrasında kaybolacaktır /etc/network/interfaces.

Bu arada BDenis'in bu listedeki son cevabı, /etc/network/interfacesdosyayı ayrıştırıp bu satırları komuta pipetleyerek son komutun yerine çalışır. sudo resolvconf -a eth0 Bu aslında cevabın yarısıdır ve gerçekten iyi bir satır içi ayrıştırma örneğidir. Bunun nasıl yapıldığını görmek istiyorsanız sadece komutun ilk bölümünü çalıştırın ve /etc/network/interfacesdosyanın ayrıştırılmasını izleyin ve sudo resolvconf -a eth0komutu çalıştırmak için gereken tüm bilgileri tükürün :

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

Bunun komutla aynı şekilde üretileceğine dikkat edin:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

/etc/network/interfacesDosyanın bu bilgilerle yapılandırılması şartıyla :

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

Ne yazık ki bunu kullanamazsınız. Arayüzüm ağ yöneticisi ve DHCP tarafından yönetiliyor, bu nedenle eklenmesi /etc/network/interfacesbu durumda geçerli bir seçenek değil. (Ubuntu 14.04)
Tino,

1

Basit cevap:

Sadece resolvconf'u kurun. apt install resolvconf

Bundan sonra, içindeki çizgiye göre ifup eth0dns'i günceller .etc/resolv.confdns-nameservers/etc/network/interfaces


bilinmeyen arayüz. Herkes buradaki ayrıntıları nasıl engelleyeceğini gerçekten biliyor ... Tüm komutları yerine getirmeyi hedeflemeliyiz bence. Her biri için tam komut dosyası, nesir yok.
matthick

1

18.04'te, aşağıdakiler güvenilir şekilde çalışır (root olarak çalıştırılır):

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

Önemli: Paketin resolvconfkurulu olduğundan emin olun .
Varsayılan olarak görünmüyor ve onsuz bazı (!) Değişiklikler /etc/network/interfacessessizce göz ardı ediliyor (örn. dns-*).


0

Bu benim için çalıştı:

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

Buna göre ayarlamak.


0

Hizmet bulunmadığı networkingve resolvconfvarsayılan olarak yüklenmediği Ubuntu 18.04'ün masaüstü sürümünde, resolv.confyeniden başlatarak yeniden üretmeyi başardım network-manager:

sudo service network-manager restart

-3

Ayrıca bu komutu deneyebilirsiniz:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
Bu komutun neden çalışması gerektiğini açıklayabilir misiniz?
α Octsнιη

1
Satırda birden fazla ad sunucusu IP varsa, bu düzgün çalışmaz dns-nameserver IP1 IP2. Satır daha sonra tekrar edilmelidir resolv.conf, ancak değil.
Tino

Üstelik, /etc/network/interfaceskullanımları dns-nameservers( ssonunda işaret) resolvconfkullanır nameserver. Komut bununla ilgilenmiyor. Her şey doğru olsa bile, boru hattı sed | grep | sedkesinlikle en verimli yol olmazdı.
Melebius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.