Vraag Waarom zou 127.0.0.1 in resolv.conf problemen veroorzaken bij DNS-resolutie?


[update en update II: bekijk mijn onhandige en juiste oplossingen aan het einde van de vraag, op basis van een van de antwoorden]

Ik heb een extreem trage DNS-lookup wanneer mijn resolv.conf-bestand het 127.0.0.1 IP-adres bevat, eigenlijk worden veel namen helemaal niet opgelost, omdat het (zeker) time-outs krijgt.

Ik heb één vraag gevonden met wat hier als een geldig antwoord lijkt:

Extreem trage DNS-lookup

behalve dat ik kan zien dat het hulpprogramma dnsmasq wordt uitgevoerd voor het IP-bereik 192.168.122.2 tot 192.168.122.254. Dit lijkt op de IP's die worden gebruikt door VirtualBox en qemu, dus ik zou denken dat als ik dnsmasq uitschakel, de toegang tot internet vanaf een virtueel systeem zal mislukken!

Zou er nog een reden zijn voor de traagheid en / of time-out? (merk op dat het probleem prominenter is met specifieke systemen zoals de gebruikersfoto's op alle stackoverflow-websites, inclusief askubuntu, wanneer het probleem optreedt.)

Op dit punt verwijder ik het IP-adres van het resolv.conf-bestand en dat omzeilt het probleem tijdens het browsen, maar ik denk niet dat dit de beste oplossing is (en natuurlijk wordt die IP daar bij elke reboot opnieuw geïnstalleerd!) I ' ik hou van een meer permanente oplossing voor dit probleem dat me nog steeds in staat stelt om de virtuele systemen zoals verwacht uit te voeren.

Postscriptum Ik voer de netwerkbeheerder niet uit.


Inhoud van / etc / network / interfaces

Merk op dat ik het probleem had voor het toevoegen van het tweede IP op ethl (dat wil zeggen eth1: 0).

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet static
    address 162.226.130.121
    netmask 255.255.255.248
    network 162.226.130.120
    broadcast 162.226.130.127
    gateway 162.226.130.126

auto eth1:0
iface eth1:0 inet static
    name Local network
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.254

# bridge for virtual box
auto br0
iface br0 inet static
    address 192.168.2.1
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255
    bridge_ports    eth3
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

Inhoud van de /etc/resolv.conf (die nog steeds een zachte link is zoals verwacht) na een boot:

# 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
search m2osw.com
nameserver 192.168.122.1
nameserver 206.13.31.12
nameserver 206.13.28.12

Bijwerken:

Ik schrijf zelf geen antwoord omdat ik hier heel erg een ander antwoord heb gebruikt om mijn probleem op te lossen, hoewel het echt niet is wat ik wilde doen, het is de eenvoudigste oplossing op dit punt. De bug waarnaar wordt verwezen door de onderstaande resolvconf-auteur, vindt u hier:

https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723

geeft duidelijk aan dat als je bind9 wilt gebruiken, je de namespace 127.0.0.1 in je resolv.conf-bestand krijgt. Geen keuze. (RESOLVCONF = nee lijkt niets te doen, hoewel ik misschien een verrassing heb na een herstart die ik zeer binnenkort zal doen!)

Als een kanttekening: als ik de /etc/resolvconf/resolv.conf.d/tail softlink naar / dev / null (zoals hieronder vermeld) wijs dan krijg ik een resolv.conf dat er zo uitziet:

# 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

Met andere woorden, ik krijg nog steeds de 127.0.0.1 die de boosdoener is op dit punt. Maar ook ik verlies de andere twee nameservers volledig, ook al zijn ze duidelijk gespecificeerd in mijn eth1-interface. Dit gezegd zijnde, kijkend in de / run / resolvconf / interface / directory, zie ik een eth1.net en lo.named bestanden. De lo.named wordt gekopieerd naar het resolv.conf, maar niet naar eth1.net. Ik heb geen idee hoe deze bestanden worden gemaakt en vervolgens gekopieerd naar resolv.conf maar dat is de dynamiek die wordt gebruikt door resolvconf ...

Hoe dan ook, er zijn twee oplossingen genoemd in de bug:

(1) Verwijder de softlink /etc/resolv.conf en vervang deze door een gewoon bestand met precies wat u zoekt. Dit kan voor u werken, maar ik dacht dat het het beste zou zijn om het standaard dynamische bestand te behouden.

(2) Wijzig uw bind9-instellingen, zodat BIND kan reageren op die lokale DNS-verzoeken. Het interessante hiervan is dat namen nu in de cache worden opgeslagen op uw computer. Dus het is niet allemaal slecht. Dit gezegd hebbende, was ik niet zo geïnteresseerd in het openen van mijn nameserver voor alle domeinnamen ... Maar dit werkt en ik hoef het dynamische resolv.conf niet te vernietigen.

Voor het geval dat er een voorbeeld setup is voor de bind om dat te laten werken:

options {
    [...]
    forwarders {
          // Google DNSes
          8.8.8.8;
          8.8.4.4;
    };
    [...]
};

Update II:

Oke! De herstart deed het bestand lo.named verdwijnen in de directory / run / resolvconf / interface. Dat moet zo zijn want bind weet het te maken als RESOLVCONF = ja, maar het verwijdert het niet als RESOLVCONF = nee. Een herstart zorgt hier echter voor omdat de directory / run een RAM-schijf is.

Zonder dat bestand in de weg, is de /etc/resolv.conf ingesteld met precies wat ik zou verwachten, dat is de lijst van nameservers zoals gedefinieerd in mijn eth1-definitie gevonden in / etc / network / interface zoals eerder getoond.

Dus ... het is een grote puinhoop omdat er veel factoren zijn en in sommige gevallen is een herstart vereist!


4
2017-08-01 18:56


oorsprong


Bewerk alstublieft uw vraag om toe te voegen: cat / etc / network / interfaces - chili555
Ik heb ook mijn resolv.conf-bestand toegevoegd. Merk op dat deze inhoud die begint met het zoeken afkomstig is van het bestand /etc/resolvconf/resolv.conf.d/original. - Alexis Wilke
Ongeacht wat in verschillende bestanden wordt weergegeven, nu u DNS-naamservers hebt opgegeven, is de DNS-lookup zoals verwacht of niet normaal? - chili555
Het bestand /etc/resolvconf/resolv.conf.d/original wordt alleen verondersteld een back-up te zijn van uw statische /etc/resolv.conf-configuratie op het moment dat de resolvconf-service is geïnstalleerd - daarna mag hij niet wennen. Ook als je iets in /etc/resolvconf/resolv.conf.d/tail hebt, zou je dat waarschijnlijk moeten verwijderen - zie de gedetailleerde uitleg van jtdhood hier -> ubuntuforums.org/... - steeldriver


antwoorden:


1: toevoegen dns-nameservers  en  dns-search opties voor / etc / network / interfaces.

auto eth1
iface eth1 inet static
    address 162.226.130.121
    netmask 255.255.255.0
    gateway 162.226.130.126
    dns-nameservers 8.8.8.8 162.226.130.126
    dns-search m2osw.com

2: Alles verwijderen dns- opties van bestanden in /etc/resolvconf/resolv.conf.d/. Dat resolv.conf bevat nameserver opties na nameserver 127.0.0.1 geeft aan dat dergelijke cruft aanwezig is. Als /etc/resolvconf/resolv.conf.d/tail een symbolische link is, maak er dan een symbolische link van naar /dev/null.

3: Downup eth1.

sudo ifdown eth1
sudo ifup eth1

4: Kijk in /etc/resolv.conf. is nameserver 127.0.0.1 zijn er nog steeds en antwoorden op DNS-zoekopdrachten nog steeds vertraagd? Zo ja, zoek dan uit waar het nameserver 127.0.0.1 regel komt uit. Iets registreert het luisteradres 127.0.0.1 zonder een lokale nameserver te starten op 127.0.0.1. (i) Een mogelijkheid is het bind9-pakket. Als u geen lokale BIND-naamserver gebruikt, reinigt u het bind9-pakket (sudo apt-get purge bind9). Als u een BIND-naamserver gebruikt die geen algemene internetnaamservice biedt, bewerkt u / etc / default / bind9 en stelt u deze in RESOLVCONF=no, herstart dan de nameserver. Zien: https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/933723 (ii) Een andere mogelijkheid is dat je resten van dnsmasq of een soortgelijk pakket op het systeem hebt. Purgeer dat pakket. Reinig ook de netwerkbeheerder omdat u hem niet gebruikt.

5: Start opnieuw op en kijk of de zaken zijn verbeterd en meld het hier opnieuw.


4
2017-08-12 11:58



Met betrekking tot punt 4 voer ik een lokale bind9 uit, een tweede DNS voor een andere server. Binding zelf lijkt goed te werken, maar ik weet niet helemaal zeker hoe ik moet testen met 127.0.0.1. Wat betreft waar de 127.0.0.1 vandaan komt, was er een afkomstig van het back-upbestand waar de staart naar leende (zoals ik ergens anders heb genoemd) en de andere van ... ergens, ik denk dat, omdat je het hebt genoemd, waarschijnlijk binden, maar niet de map resolv.conf.d. - Alexis Wilke
OK, ervan uitgaande dat de lokale naam BIND niet is ingesteld om algemene internet-naamservice te bieden, stop dan BIND van het registreren van 127.0.0.1 als een nameserver-adres: stel deze in RESOLVCONF=no in / etc / default / bind9 en herstart. Als de lokale binding wordt genoemd is instellen om algemene internet-naamservice te bieden en vervolgens te verlaten RESOLVCONF=yes en configureren met de naam om te luisteren op 127.0.0.1. - jdthood
Nou ... zoals vermeld in de bug waarin je een link hebt geplaatst, is het probleem nog steeds aanwezig (aangezien ik 13.10 heb en het probleem had.) Ik moet bind9 uitvoeren. Hoewel ik probeerde alle andere software die je hier noemde te verwijderen, geen verschil. Totdat ik besloot om instellen als een expediteur in te stellen, bleef het falen. Dat wil zeggen dat ik nu nameserver 127.0.0.1 krijg in mijn resolv.conf-bestand en bind9 de vragen beantwoordt. Niet wat ik in gedachten had, maar wel ... andersom werkt het toch niet. - Alexis Wilke
Oke, ik stel voor dat je duidelijk specificeert dat bind9 op dit moment niet slim genoeg is om het lo.named bestand te verwijderen en daarom is een herstart vereist nadat je RESOLVCONF hebt gewijzigd naar RESOLVCONF=no. Zonder de reboot blijft de 127.0.0.1 daar. - Alexis Wilke
Als een kanttekening, heb ik ook al die andere software (netwerk-manager en dnsmasq-base) gedeïnstalleerd maar dat maakte geen verschil, omdat de boosdoener sowieso bond. - Alexis Wilke


Het gebruik van een dns-server met een loopback-adres (bijvoorbeeld 127.0.0.1) veroorzaakt problemen:

Alle andere dns-servers met een lagere prioriteit worden genegeerd door resolvconf.

De prioriteit van dns-servers wordt bepaald door de netwerkinterfaces waarmee de dns-server is gedefinieerd.

Zien /etc/resolvconf/interface-order en man 5 interface-order.

Gelukkig is er een omgevingsvariabele om dit gedrag te veranderen:

TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS

Zien man 8 resolvconf

Indien geplaatst

TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no

in /etc/default/resolvconf en herstart de resolvconf service zal alle andere dns-servers verschijnen /etc/resolv.conf.


2
2017-10-07 11:33



Ah! Die variabele klinkt een beetje als een hack, maar het is goed om te weten wat het prioriteitsschema is. Mijn systeem werkt nu, dus ik zal niets aanraken, maar de volgende keer zal ik daar misschien nader op ingaan. - Alexis Wilke


Als u / etc / network / interfaces bestuurt met een statische IP-declaratie, bent u ook verantwoordelijk voor het declareren van DNS-naamserveradressen. Ik stel voor:

auto eth1
iface eth1 inet static
address 162.226.130.121
netmask 255.255.255.0
gateway 162.226.130.126 #Isn't the gateway actually xx.1??
dns-nameservers 8.8.8.8 162.226.130.126 #or any others you prefer.

Ik denk dat je resolv.conf alleen kunt verlaten om zo nodig door het systeem herschreven te worden.


0
2017-08-02 14:40



Ja, de gateway is .126. Dat is hoe netwerken worden opgezet door grote bedrijven met statische IP's zoals AT & T. Een vraag: enig idee hoe de regeneratie van het resolv.conf-bestand te starten zonder opnieuw op te starten of ifup / ifdown een interface? - Alexis Wilke
De enige manier waarop ik weet dat het systeem de wijzigingen moet herlezen en gebruiken is: sudo ifdown eth0 && sudo ifup eth0. resolv.conf zou dan de gedeclareerde DNS-naamservers moeten gebruiken. - chili555
Hmm ... ik heb deze pagina ook gevonden askubuntu.com/questions/224966/... maar op dit punt wordt het resolv.conf-bestand niet correct bijgewerkt. Ik kan de dns-nameservers zien die zijn gedefinieerd in het interfacebestand, maar dat is alleen in /var/run/resolvconf/interface/eth1.inet en niet in het resolv.conf-bestand. Ik heb geprobeerd (voor het geval dat) ze niet in beide bestanden te hebben, maar dat hielp helemaal niet ... (dit wil zeggen dat het eth1.inet-bestand genegeerd wordt tijdens het oplossen.) - Alexis Wilke
Nadat je eth0 hebt verlaagd / verhoogd, veranderde resolv.conf al? - chili555
Ja. De standaardinstellingen verschenen daar, maar de lijst eth1 dns-nameservers heeft het niet gehaald ... - Alexis Wilke