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:
- Det fungerar.
- Det kräver minst möjliga ändringar och
- Det fungerar fortfarande i kombination med dnsmasqs DNS-cache snarare än att kringgå det.
Kommentarer
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örresolvconf -u
var namnservrarna inte sätts i resolv.conf – när jag satte namnservrarna ihead
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 medbase
. Bekräftad mednslookup google.com
. - Ursprungligen måste du ha
resolvconf
. Du kan installera det genom att görasudo 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
- bara ”head” -delen läses av resolvonf: ”base” -delen styrs på något sätt av dnsmasq
- 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
- 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
-
Sök efter ”nätverksanslutning”
-
Öppna den
-
Välj sedan antingen WiFi eller Ethernet eller vad du än använder och klicka på redigera. Du får det här:
-
Välj ipv4 i flikar
-
Välj bara adresser i metod
-
Ange ditt DNS-namn nedan och spara det
-
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 mednmcli 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:
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 ..
- hitta detta:
dns-nameservers
- om du inte hittar det skriver du det bara där
- 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:
- kommentar
dns=dnsmasq
på/etc/NetworkManager/NetworkManager.conf
- 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
-
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.
dns=none
i/etc/NetworkManager/NetworkManager.conf
(se detaljer i mitt svar nedan).