Hur ställer jag in min DNS när resolv.conf skrivs över?

Det mesta av den information jag ser online säger att redigera /etc/resolv.conf, men alla ändringar jag gör där blir bara åsidosatta .

$ cat /etc/resolv.conf # 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.1.1 

Det verkar som att 127.0.1.1 är en lokal instans av dnsmasq. dnsmasq docs säger att redigera /etc/resolv.conf. Jag försökte sätta anpassade namnservrar i /etc/resolv.conf.d/base, men ändringarna visade sig inte i /etc/resolv.conf efter att ha kört sudo resolvconf -u.

FYI, jag vill inte ändra DNS per anslutningsbasis, jag vill ställa in standard DNS-inställningar som ska användas för alla anslutningar om inte annat anges.

UPPDATERING:

Jag svarade själv på den här frågan: https://unix.stackexchange.com/a/163506/67024

Jag tycker att det är den bästa lösningen sedan:

  1. Det fungerar.
  2. Det kräver minst möjliga ändringar och
  3. Det fungerar fortfarande i kombination med dnsmasqs DNS-cache snarare än att kringgå det.

Kommentarer

  • Bättre svara på din fråga istället för att uppdatera din fråga tror jag … blir lättare att hitta rätt svar du gav på ditt problem
  • Det verkar som om de flesta svaren är Ubuntu-orienterade och alltför komplicerade. En universell lösning för NetworkManager-användare är att helt enkelt lägga till dns=none i /etc/NetworkManager/NetworkManager.conf (se detaljer i mitt svar nedan).
  • Jag tror att detta svar klargör varför resolution.conf skrivs över, så vet du hur du konfigurerar det.

Svar

Jag tror att om du vill åsidosätta DNS-namnservern lägger du bara till en rad liknande den i din base fil under resolv.conf.d.

Exempel

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

Sätt sedan din namnserverlista i så:

nameserver 8.8.8.8 nameserver 8.8.4.4 

Slutligen uppdatera resolvconf:

$ sudo resolvconf -u 

Om du tittar på mansidan för resolvconf beskriver den de olika filerna under /etc/resolvconf/resolv.conf.d/.

 /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. /etc/resolvconf/resolv.conf.d/head File to be prepended to the dynamically generated resolver configuration file. Normally this is just a comment line. /etc/resolvconf/resolv.conf.d/tail File to be appended to the dynamically generated resolver configuration file. To append nothing, make this an empty file. This file is a good place to put a resolver options line if one is needed, e.g., options inet6 

Även om det finns en varning högst upp i head -filen:

denna varning finns där så att när dessa filer konstrueras kommer varningen i slutändan att fungera in i den resulterande resolv.conf -filen som dessa filer kommer att användas för att göra. Så du kunde lika gärna ha lagt till nameserver -raderna som beskrivs ovan för base -filen till head -fil också.

Referenser

Kommentarer

  • Ubuntu 14.04 – när jag lägger namnservrarna i base och kör resolvconf -u var namnservrarna inte sätts i resolv.conf – när jag satte namnservrarna i head var de
  • Ubuntu 14.04 – fick också kommentera konfigurationsuppsättning i /run/resolvconf/interface/NetworkManager
  • typ nslookup google.com och den första IP-adressen i listan ska vara din nya namnserver, om inte , du gjorde det fel
  • Ubuntu 16.04: Fungerade om det bara var /etc/resolvconf/resolv.conf.d/head, inte med base. Bekräftad med nslookup google.com.
  • Ursprungligen måste du ha resolvconf. Du kan installera det genom att göra sudo apt-get install resolvconf.

Svar

Jag är också intresserad av den här frågan och jag försökte den föreslagna lösningen @sim.

För att testa den sätter jag

nameserver 8.8.8.8 

i /etc/resolvconf/resolv.conf.d/base och

nameserver 8.8.4.4 

i /etc/resolvconf/resolv.conf.d/head

Sedan startade jag om nätverket med

sudo service network-manager restart 

Resultatet är att /etc/resolv.conf ser ut som

# 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.4.4 nameserver 127.0.1.1 

och nm-tool anger att dnsservern är

DNS: 208.67.222.222 DNS: 208.67.220.220 

vilka är de som tillhandahålls av min router. Å andra sidan gräver en adress säger att

;; Query time: 28 msec ;; SERVER: 8.8.4.4#53(8.8.4.4) 

Om jag har rätt, drar jag av allt detta att

  1. bara ”head” -delen läses av resolvonf: ”base” -delen styrs på något sätt av dnsmasq
  2. dnsserver tvingas faktiskt till 8.8.4.4 oavsett vilken server som tillhandahålls av dhcp, MEN du förlorar den caching av dnsmasq, eftersom begäran alltid skickas till 8.8.4.4
  3. dnsmasq använder fortfarande ENDAST den dnsserver som tillhandahålls av dhcp.

Allt som allt fungerar det men jag tror inte att det är det önskade resultatet.En mer nära lösning tror jag är följande. Redigera

sudo vim /etc/dhcp/dhclient.conf 

lägg sedan till

supersede domain-name-servers 8.8.8.8; 

Resultatet är följande: resolv.conf innehåller endast 127.0.0.1, vilket innebär att dnsmasq-cache anropas och nm-tool säger

DNS: 8.8.8.8 

vilket innebär att om det sökte namnet inte finns i cachen , efterfrågas det vid 8.8.8.8 och inte på servern som tillhandahålls av dhcp.

Ett annat (kanske bättre) alternativ är att använda ”prepend” istället för ”supersede”: på detta sätt, om namnet löses inte av 8.8.8.8, då faller begäran tillbaka på den andra servern. I själva verket säger nm-tool

DNS: 8.8.8.8 DNS: 208.67.222.222 DNS: 208.67.220.220 

Kommentarer

  • Ett mycket bättre svar än att hacka in i NS konfigurerar. Speciellt alternativet att förbereda en server framför de dhcp som tillhandahålls. Verkar som den perfekta balansen för att lösa problemet utan att skapa nya!
  • Det ’ är värt att notera att nm-tool har ersatts med nmcli

Svar

Jag fick reda på att du kan ändra namnservrarna som dnsmasq använder genom att lägga till följande rader i /etc/dnsmasq.conf:

server=8.8.8.8 server=8.8.4.4 

Jag hade inte /etc/dnsmasq.conf -fil, eftersom den installeras av dnsmasq-paketet, men Ubuntu levereras bara med dnsmasq-base. Jag sprang sudo apt-get install dnsmasq, redigerade sedan /etc/dnsmasq.conf, sedan sudo service dnsmasq restart och sudo service network-manager restart.

Jag sprang sudo tail -n 200 /var/log/syslog för att kontrollera min syslog och verifiera att dnsmasq använde namnservrar som jag angav:

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53 Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53 

Kommentarer

  • Det finns en anledning till att detta är markerat som det bästa svara … för det är verkligen! tack så mycket! Jag skulle tillägga att det efter alla stegen du nämnde kan vara nödvändigt att starta om nätverk för att allt ska fungera smidigt (det var för mig …. sudo service network-manager restart)
  • På Ubuntu 14.04 Server skulle ungefär hälften av tiden en kallstart inte leda till internetanslutning med en URL men en IP-adress skulle fungera. Jag spenderade mycket tid fruktlöst på att fixa det, gav upp i månader och hittade sedan den här lösningen. Jag tycker också att det är det bästa svaret.
  • Det ’ är spännande att dnsmasq måste installeras. Detta fixade verkligen min DNS i en normal situation, men det bröt helt min VPN-konfiguration (VPN-anslutningen misslyckas nu …)
  • det finns ingen sådan fil på Centos
  • ubuntu 16: ändringar från proceduren med dnsmasq förökas inte till /etc/resolv.conf. Konsekvensen är att hat nslookup fortfarande använder sin ursprungligen definierade localhost 127.0.0.1. Även om jag kan bekräfta dina nämnda syslogs.

Svar

För statiska IP-situationer säger Ubuntu Server Guide till ändra fil / etc / nätverk / gränssnitt, som kan se ut så här:

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 

Du ändrar IP: erna 192.168.3.45 192.168.8.10 för de du vill ha , som 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Sida 38

Kommentarer

  • Det här ser verkligen ut men hur återskapar jag nu resolv.conf ?!
  • @JoelBerger ifdown eth0; ifup eth0.
  • nej / etc / nätverk / gränssnitt på Centos

Svar

  1. Sök efter ”nätverksanslutning”

  2. Öppna den

    ange bildbeskrivning här

  3. Välj sedan antingen WiFi eller Ethernet eller vad du än använder och klicka på redigera. Du får det här:

    ange bildbeskrivning här

  4. Välj ipv4 i flikar

  5. Välj bara adresser i metod

  6. Ange ditt DNS-namn nedan och spara det

  7. Du är klar

Kommentarer

  • I ’ d måste dock göra detta för varje nätverksanslutning. Tidigare kunde du ändra standard för alla anslutningar, vilket är vad jag ville göra här.
  • Jag älskar dig! den här UI-inställningen räddade min röv från sudo och vim mess: ’ (
  • Med Mint (på Ubuntu 14.04) – men sett det också med KDE – för vissa anledning, inställning av DNS-servrar i GUI Network Manager påverkar inte ’ DNS-inställningarna som används i en terminal
  • Bästa svaret imho. På Ubuntu 14.04 fick jag 2 externa IP-adresser för DNS som inte ’ inte känner igen klienter i mitt hemnätverk. Lämnar metod på ’ Automatisk (DHCP) ’ för den trådbundna anslutningen lade till min router ’ s IP-adress till den befintliga listan.För den trådlösa anslutningen över wlan0 fungerade det inte ’, men metoden på ’ Automatiska (DHCP) adresser bara ’ ersatte de externa adresserna med min router-IP och sedan fungerade det också. Tillämpa ändringar med sudo service network-manager restart, vänta lite, verifiera med nmcli d list | grep 'DNS\|IP-IFACE'. Och pinga din interna klient med namn.
  • det här är rätt svar

Svar

En snabb och smutsig lösning som ännu inte nämnts sätter den oföränderliga flaggan på resolv.conf -filen direkt efter redigering.

$ sudo nano /etc/resolv.conf 

Lägg till detta och spara:

nameserver 8.8.8.8 

Sedan:

$ sudo chattr +i /etc/resolv.conf 

Det borde göra tricket. Jag gör det också på mitt system.

Kommentarer

  • När som helst din lösning involverar chattr, det ’ är inte riktigt en lösning.
  • det här gör jag på system där jag av någon anledning tillfälligt behöver ändra DNS och inte ’ t vill ändra konfigurationen. Som en permanent lösning skulle jag ’ inte rekommendera det.
  • ” snabb och smutsig lösning ”
  • Detta är inte ’ t smutsigt. Program som förstör den lokala konfigurationen eftersom de tror att de vet bättre är smutsiga.

Svar

Mitt problem var lite annorlunda , Jag ville åsidosätta mina routers DNS-servrar. Jag hittade den här länken från Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

Det står: Om du vill åsidosätta DNS-inställningarna som tillhandahålls av en DHCP-server, öppna

/etc/dhcp3/dhclient.conf 

och lägg till följande rad:

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>; 

ersätter <dns_ip_address*> objekt med rätt innehåll.

Kommentarer

  • Detta är svaret som löste mitt problem.
  • Perfekt. Lägg bara till att du bör starta om sudo-nätverk för att aktivera ändringarna.
  • Vad händer om vi inte ’ inte har den dhcp3 mapp? Jag har Xubuntu 17.10, har den flyttats till /etc/dhcp helt enkelt?
  • @PlasmaBinturong i mitt fall var det /etc/dhcp/dhclient.conf på senaste versionerna av Debian och Ubuntu.

Svar

Försök att lägga till dns-nameservers XXX.XXX.XXX.X i din /etc/networking/interfaces -fil.

Kommentarer

  • Lämna en kommentar när du nedröstar, tack. Detta är metoden som ges i manualen , sidan 38.
  • Den ovannämnda manualen visar alla IP-adresser på en rad. Detta svar verkar föreslå att du lägger till en rad. Och varför är det sista numret bara en X bred? Jag tror att det mest var det extremt informella och osäkra korta chattstil som fick nedröstningarna, @Zook.

Svar

Jag kanske saknar något, men enligt konfigurationsinstruktionerna på https://help.ubuntu.com/14.04/serverguide/network-configuration.html är allt du gör uppdatera följande. Jag kör inte en proxy – bara en maskin bakom en brandvägg och lokal DNS (exempel visar Googles, men ställ in den till vad du behöver).

nano /etc/network/interfaces 

Standard:

# This file... # and how to activate... # The loopback... auto local iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp 

UPPDATERAD:

# This file... # and how to activate... # The loopback... auto local iface lo inet loopback # The primary network interface #iface eth0 inet dhcp iface eth0 inet static address x.x.x.x netmask 255.255.255.0 gateway x.x.x.x #nameservers # you may not need dns-search # I use it because I"m running this on a Windows network # so its useful to have # dns-search x.y dns-nameservers 4.4.4.4 8.8.8.8 

Starta om, om du kan.

Svar

Några av svaren här fungerar bara bra. Men jag var inte nöjd med det faktum att jag måste gå igenom manuellt konfigurationsfiler bara för att ställa in ”rätt” DNS som jag är ady tar emot DHCP med NetworkManager.

Jag grävde lite och märkte att /etc/resolv.conf filen faktiskt är en länk och den pekar på /run/systemd/resolve/stub-resolv.conf div Efter några experiment ser det ut som att /run/systemd/resolve/ -katalogen innehåller en annan fil med namnet resolv.conf som redan innehåller de inställningar du har fått via DHCP. Så istället för att behöva skriva över / skapa konfigurationsfiler manuellt i /etc/ kan du helt enkelt länka igen /etc/resolv.conf för att peka på /run/systemd/resolve/resolv.conf -fil och allt ska vara bra:

# sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf 

Du borde nu kunna redigera inställningarna även från nätverket Chef i Gnome. 🙂

Inte säker på om det här fungerar på äldre ubuntu men det gör det på Ubuntu 17.10.

Kommentarer

  • när vi kör systemd-resolve --flush-cache den ursprungliga länkade filen är tydligt avbruten, svaret ovan återställs den ursprungliga funktionaliteten

Svar

REDIGERA 6 MAJ, 2016

Jag har skrivit ett skript för att uppdatera alla inställningar för systemanslutningar i /etc/Network-Manager/system-connections/ -katalogen. GUI som du använder för att redigera enskilda anslutningar, redigerar en viss fil i den katalogen. Skriptet uppdaterar alla filer – det söker bara efter dem som inte har dns-set med grep och ställer in det med awk.

Eftersom åtkomst till dessa filer kräver sudo åtkomst, kör du detta skript med sudo och starta sedan om nätverkshanteraren

#!/bin/bash # Author: Serg Kolo # Date: May 6, 2015 # Description: this script checks all settings for connections in # /etc/NetworkManager/system-connections/ , and if there"s no custom # dns set , this script sets it; # NOTE: run sudo service network-manager restart after running this script set -x for file in /etc/NetworkManager/system-connections/* ; do grep "dns=208.67.220.220;" "$file" || ( awk "{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220. 220;\nignore-auto-dns=true"}}" "$file" > .tmpfile && ( cat .tmpfile > "$file") ) done 

Skript i aktion:

ange bildbeskrivning här

ORIGINAL POST Vissa användare här påpekade att DNS på något sätt styrs av dnsmasq. Det är verkligen sant. Jag har ställts inför en något mindre fråga, oavsett hur jag ändrade head eller body i /etc/resolvconf/resolv.conf.d, min dator kunde faktiskt inte komma åt internt med domännamn – fungerar bara med IP-adresser.

Vad jag gjorde är att redigera filen /etc/NetworkManager/NetworkManager.conf. Ursprungligen stod det dns=dnsmasq men jag ändrade det till: dns=208.67.222.222. Även om detta, nm-tool inte nämner 208.67.222.222, kunde jag fortfarande använda domännamn, inte bara IP-adresser.

Här är hur min NetworkManager.conf -filen ser ut nu:

[main] plugins=ifupdown,keyfile,ofono #dns=dnsmasq dns=208.67.222.222 [ifupdown] managed=false 

OBS: Mer information om mitt problem och den här lösningen finns i mitt inlägg på askubuntu.com .

UPPDATERING # 1

Efter att ha återvänt hem från universitetet idag upptäckte jag att jag inte kunde ansluta till mitt hem-WiFi. Jag har läst upp lite på man NetworkManager.conf och det visar sig att dns= i [main] faktiskt är en rad för plugin-program, så rad dns=dnsmasq lägger tydligen till dnsmasq-plugin till NetworkManager.

Så min lösning fungerade fortfarande, inte som jag hade förväntat mig. Här är utdrag från mansidan:

dns=plugin1,plugin2, ... List DNS plugin names separated by ",". 

DNS-plugins används för att tillhandahålla lokal caching-namnserverfunktion (vilket påskyndar DNS-frågor) och att skicka DNS-data till applikationer som använder den.

Så genom att ställa in dns=208.67.222.222 Jag kan i princip ha hindrat NetworkManager från att använda det plugin-programmet, som annars skulle använda den lokala DNS-servern (som tydligen inte fungerar).

Svar

Det finns två metoder

Metod 1

DNS-servern som ska användas kan ändras genom att uppdatera head -fil under resolv.conf.d

$ echo "nameserver 1.1.1.1" | sudo tee /etc/resolvconf/resolv.conf.d/base 

och kör sedan

$ sudo resolvconf -u 

Ovanstående genererar en generisk resolv.conf -fil i /etc -katalogen. Alla dina lösningsförfrågningar kommer att skickas till ovan nämnda namnserver. Löst.

Det finns dock konsekvenser för detta. När du använder resolvconf för att direkt fråga 1.1.1.1 för adressupplösningar är cachingens kraft som tillhandahålls av dnsmasq borta. Varje förfrågan går till 1.1.1.1

Metod 2

Om du inte vill att ovan ska ske och använd dnsmasq för DNS-upplösningar, se detta svar. Svaret beskrivs enkelt här.

Lägg till följande innehåll i /etc/dnsmasq.conf -fil .

server = 1.1.1.1

Starta sedan om dnsmasq-tjänsten

$ sudo systemctl restart dnsmasq.service 

Saker kommer att fungera bra. Löst.

Svar

Det enkla sättet att ändra DNS:

$ sudo nano /etc/network/interfaces 

Om problem uppstår, installera nano:

$ sudo apt-get install nano -y 

sedan ..

  1. hitta detta: dns-nameservers
  2. om du inte hittar det skriver du det bara där
  3. Jag gjorde mitt så här: dns-nameservers 199.85.126.10 199.85.127.10

Jag hoppas att detta är det bästa sättet, jag gjorde det så här på en VPS förresten.

Svar

på root:

  1. kommentar dns=dnsmasq/etc/NetworkManager/NetworkManager.conf
  2. lägg till supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; i slutet av /etc/dhcp/dhclient.conf
  3. sudo service network-manager restart

Följande ändringar visas ovan:

$ sudo sed -i "s/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/" \ /etc/NetworkManager/NetworkManager.conf $ echo "supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;" | \ sudo tee --append /etc/dhcp/dhclient.conf $ sudo service network-manager restart 

Vänta 7/10 sekunder för att avsluta omstartsprocessen, kontrollera din konfiguration med” nslookup nist.gov ”. Fungerar bra på Ubuntu LTS 14.04.

Svar

OBS: Som de flesta svar antar den här användningen av NetworkManager . Men till skillnad från de flesta andra svar antar det inte att resolvconf, dhclient eller något annat – se upp för att de kan ta över, dock (se uppdatering).

Med tanke på antalet visningar av denna fråga är det ganska otroligt att denna 8 tecken -lösningen har inte lagts upp ännu: enligt man NetworkManager.conf,

dns: […] none: NetworkManager kommer inte att ändra resolv.conf. Detta innebär att rc-manager inte hanteras

Lägg därför till

dns=none 

i [main] i /etc/NetworkManager/NetworkManager.conf starta sedan om NetworkManager och det kommer inte att ändras /etc/resolv.conf längre.

Observera att inställningen rc-manager=unmanaged ska motsvara dns=none och den inställningen rc-manager=symlink tillsammans med att ha /etc/resolv.conf som symb oljelänk kan vara en bättre idé (läs ovan nämnda manpage).

Uppdatering:

Efter att NetworkManager slutat skriva över /etc/resolv.conf tänkte jag dhcpcd ersatte redan /etc/resolv.conf med en värdelös tom fil vid start. Manpage för dhcpcd.conf hjälpte, det räcker att lägga till

nohook resolv.conf 

i din dhcpcd.conf (min finns i /etc/dhcpcd.conf).

Svar

Att ”eftersom ett visst installerat program hanterar den här filen. Du kan antingen avinstallera det programmet eller ställa in önskade alternativ direkt genom det programmet.

I mitt fall (Linux centos7 minimal server) med samma situation som jag fick # Generated by NetworkManager högst upp i resolv.conf -fil så det bästa sättet att ändra på det här alternativet var att använda

nmtui

kommando. Du kan redigera namnservrar i det här verktyget och när du ändrar alternativ för nätverkshanteraren från det här verktyget kommer de automatiskt att tillämpas på /etc/resolv.conf efter omstart. Här hittar du mer information .

Svar

Ingenting på allt på Internet han lped mig, eftersom NordVPNs CLI-verktyg fortsatte att skriva över /etc/resolv.conf varje gång jag anslöt och avkopplade från VPN. Det översteg till och med chattr +i, vilket var super irriterande !!

Det som fungerade för mig var att helt inaktivera resolvconf !

Redigera /etc/resolvconf.conf och gör detta till den enda posten:

resolv_conf=NO 

Detta inaktiverar specifikt resolvconf, vilket betyder att din /etc/resolv.conf aldrig kommer att ändras av den. Fortsätt sedan och sudo chattr +i /etc/resolv.conf för gott mått.

Testat på Arch Linux.

Svar

På Centos 7, med hjälp av NetworkManager, är den renaste, beständiga, fungerande lösningen som jag har kunnat hitta att skapa ett NetworkManager-skript som använder nmcli för att ställa in de värden jag vill ha.

t.ex.

Skapa /etc/NetworkManager/dispatcher.d/mydns.sh med behörigheter 755 och följande innehåll:

#!/usr/bin/sh if [ $1 == "enp0s11" -a $2 == "up" ] then echo "Setting my DNS ($1 is $2)" | logger # disable default DNS nmcli device mod enp0s11 ipv4.ignore-auto-dns yes # Substitute our own DNS, in the desired order nmcli device mod enp0s11 ipv4.dns "10.0.1.101 10.0.1.1" fi 

Och för att testa, utan att starta om:

systemctl restart NetworkManager.service cat /etc/resolv.conf 

YMMV, men det är det enda sättet jag har hittat som tillåter min /etc/resolv.conf att ”överleva” en omstart utan att skrivas över med värden som jag inte vill ha.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *