it-swarm-id.com

Bagaimana cara mengatur DNS saya ketika resolv.conf sedang ditimpa?

Sebagian besar info yang saya lihat online mengatakan untuk mengedit /etc/resolv.conf, tetapi setiap perubahan yang saya lakukan di sana baru saja ditimpa.

$ 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

Tampaknya 127.0.1.1 adalah turunan lokal dari dnsmasq. dnsmasq docs mengatakan untuk mengedit /etc/resolv.conf. Saya mencoba meletakkan nameserver khusus di /etc/resolv.conf.d/base, tetapi perubahan tidak muncul di /etc/resolv.conf setelah menjalankan Sudo resolvconf -u.

FYI, saya tidak ingin mengubah DNS pada basis per koneksi, saya ingin mengatur pengaturan DNS default untuk digunakan untuk semua koneksi saat tidak ditentukan.

UPDATE:

Saya menjawab pertanyaan ini sendiri: https://unix.stackexchange.com/a/163506/67024

Saya pikir itu solusi terbaik karena:

  1. Berhasil.
  2. Ini membutuhkan jumlah perubahan paling sedikit dan
  3. Itu masih bekerja bersama dengan cache DNS dnsmasq, daripada mem-bypassnya.
302
Seán Hayes

Saya menemukan bahwa Anda dapat mengubah nameserver yang dnsmasq gunakan dengan menambahkan baris berikut ke /etc/dnsmasq.conf:

server=8.8.8.8
server=8.8.4.4

Saya tidak punya /etc/dnsmasq.conf file, karena diinstal oleh paket dnsmasq, tetapi Ubuntu hanya dilengkapi dengan dnsmasq-base. Saya berlari Sudo apt-get install dnsmasq, lalu diedit /etc/dnsmasq.conf, kemudian Sudo service dnsmasq restart dan Sudo service network-manager restart.

Saya berlari Sudo tail -n 200 /var/log/syslog untuk memeriksa syslog saya dan memverifikasi bahwa dnsmasq menggunakan server nama yang saya tentukan:

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
60
Seán Hayes

Saya percaya jika Anda ingin mengganti server nama DNS Anda hanya menambahkan baris yang mirip dengan ini dalam file base Anda di bawah resolv.conf.d.

Contoh

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

Kemudian masukkan daftar server nama Anda seperti ini:

nameserver 8.8.8.8
nameserver 8.8.4.4

Akhirnya perbarui resolvconf:

$ Sudo resolvconf -u

Jika Anda melihat halaman manual untuk resolvconf itu menggambarkan berbagai file di bawah /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

Meskipun ada peringatan di bagian atas file head:

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

peringatan ini ada di sana sehingga ketika file-file ini dibuat, peringatan pada akhirnya akan masuk ke file resolv.conf yang dihasilkan yang akan digunakan oleh file-file ini. Jadi Anda bisa dengan mudah menambahkan baris nameserver yang dijelaskan di atas untuk file base, ke file head juga.

Referensi

262
slm

Saya juga tertarik dengan pertanyaan ini dan saya mencoba solusi yang diusulkan @sim.

Untuk mengujinya, saya masukkan

nameserver 8.8.8.8

di /etc/resolvconf/resolv.conf.d/base dan

nameserver 8.8.4.4

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

Kemudian saya memulai kembali jaringan dengan

Sudo service network-manager restart

Hasilnya adalah /etc/resolv.conf seperti

# 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

dan nm-tool menyatakan bahwa dnsserver adalah

DNS:             208.67.222.222
DNS:             208.67.220.220

yang mana disediakan oleh router saya. Di sisi lain, menggali alamat memberi tahu hal itu

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

Jika saya benar, saya menyimpulkan dari semua ini

  1. hanya bagian "head" yang dibaca oleh resolvonf: bagian "base" entah bagaimana dikendalikan oleh dnsmasq
  2. serverns sebenarnya dipaksa untuk 8.8.4.4 terlepas dari server yang disediakan oleh dhcp, TAPI Anda kehilangan caching yang disediakan oleh dnsmasq, karena permintaan selalu dikirim ke 8.8.4.4
  3. dnsmasq masih menggunakan HANYA dnsserver yang disediakan oleh dhcp.

Semua dalam semua, ini bekerja tetapi saya tidak berpikir itu adalah hasil yang diminta. Solusi yang lebih dekat menurut saya adalah sebagai berikut. Edit

Sudo vim /etc/dhcp/dhclient.conf

lalu tambahkan

supersede domain-name-servers 8.8.8.8;

Hasilnya adalah sebagai berikut: resolv.conf hanya berisi 127.0.0.1, yang berarti bahwa cache dnsmasq dipanggil dan nm-tool mengatakan

DNS:             8.8.8.8

yang berarti bahwa jika nama yang dicari tidak ada dalam cache, maka akan diminta pada 8.8.8.8 dan tidak di server yang disediakan oleh dhcp.

Opsi lain (mungkin lebih baik) adalah menggunakan "prepend" daripada "menggantikan": dengan cara ini, jika nama tidak diselesaikan oleh 8.8.8.8, maka permintaan jatuh kembali ke server lain. Bahkan, kata nm-tool

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
80
brad

Untuk situasi IP statis, Ubuntu Server Guide mengatakan untuk mengubah file/etc/network/interfaces, yang mungkin terlihat seperti 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-nameservers 192.168.3.45 192.168.8.10

Anda mengubah IP 192.168.3.45 192.168.8.10 untuk yang Anda inginkan, seperti 8.8.8.8

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

23
Rodolpho
  1. Cari 'Koneksi Jaringan'
  2. Buka

    enter image description here

  3. Kemudian pilih WiFi atau Ethernet, atau apa pun yang Anda gunakan, dan klik edit. Anda akan mendapatkan ini:

    enter image description here

  4. Pilih ipv4 di tab

  5. Pilih alamat hanya dalam metode
  6. Masukkan nama DNS Anda di bawah ini, dan simpan

  7. Kamu sudah selesai

17
pa1pal

Solusi cepat dan kotor yang belum disebutkan adalah menetapkan bendera abadi pada resolv.conf file tepat setelah diedit.

$ Sudo nano /etc/resolv.conf

Tambahkan ini dan simpan:

nameserver 8.8.8.8

Kemudian:

$ Sudo chattr +i /etc/resolv.conf

Itu harus melakukan trik. Saya melakukan ini pada sistem saya juga.

15
Younis Bensalah

DNS Config Di Linux

Penggunaan DNS di linux selesai satu set rutin di pustaka C yang menyediakan akses ke Sistem Nama Domain Internet (DNS). File konfigurasi penyelesai (resolv.conf) berisi informasi yang dibaca oleh rutin resolver saat pertama kali dipanggil oleh suatu proses. Singkatnya setiap proses yang meminta DNS akan membaca /etc/resolv.conf di atas perpustakaan. NSS berlapis di atas ini, dan dikonfigurasi oleh /etc/nsswitch.conf.

Linux DNS config terletak di file /etc/resolv.conf TETAPI ada sejumlah program/layanan yang ingin secara otomatis mengelola dan menangani file konfigurasi DNS di /etc/resolv.conf. Dalam beberapa situasi Anda mungkin ingin mengelola file ini sendiri. Setiap program/layanan yang mengelola DNS memiliki file konfigurasi sendiri seperti /etc/dnsmasq.conf (untuk layanan dnsmasq) dan menambahkan konfigurasi DNS saat perubahan koneksi dan/atau pada acara lain ... solusi cepat adalah mengunci file konfigurasi DNS dengan chattr +i /etc/resolv.conf tapi ini tidak direkomendasikan dalam kasus tertentu, solusi yang lebih baik adalah mengatur dengan benar semua program/layanan menggunakan DNS like (dnsmasq/network-manager/resolvconf/etc.)

Mendapatkan Kembali Kontrol DNS

Berikut ini adalah daftar lengkap pengaturan ntuk mendapatkan kembali kendali resolv.conf dan menghindarinya ditimpa (cara menonaktifkan/mengatur DNS dari lokasi lain selain resolv.conf ) catat bahwa resolvconf adalah program independen dari resolv.conf, juga tergantung pada sistem/konfigurasi Anda, Anda mungkin tidak memiliki satu atau banyak program yang terdaftar di sini.

1. Resolvconf:

File konfigurasi

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

Perbarui konfigurasi

Sudo resolvconf -u

Nonaktifkan resolvconf

systemctl disable --now resolvconf.service 

2. Layanan Dnsmasq:

File konfigurasi

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

Perbarui konfigurasi

Sudo systemctl restart dnsmasq.service

3. Manajer Jaringan:

File konfigurasi

/etc/NetworkManager/*

Nonaktifkan DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

Aktifkan DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

Gunakan layanan terselesaikan

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

Gunakan resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

Perbarui konfigurasi

systemctl restart NetworkManager.service

4. Antarmuka Jaringan:

File konfigurasi

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Perbarui Konfigurasi

reboot

5. Klien DHCP:

File konfigurasi

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

Perbarui Konfigurasi

reboot

6. Layanan Rdnssd:

Nonaktifkan rdnssd

systemctl disable --now rdnssd.service

7. Layanan Terselesaikan:

Nonaktifkan diselesaikan

systemctl disable --now systemd-resolved.service

8. Netconfig:

File konfigurasi

/etc/sysconfig/network/config

Nonaktifkan netconfig

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

Perbarui Konfigurasi

reboot

Pengaturan Server DNS

Contoh dari /etc/resolv.conf konfigurasi

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

Masalah saya agak berbeda, saya ingin mengganti server DNS router saya. Saya menemukan tautan ini dari Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

Dikatakan: Jika Anda ingin mengganti pengaturan DNS yang disediakan untuk Anda oleh server DHCP, buka

/etc/dhcp3/dhclient.conf

dan tambahkan baris berikut:

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

mengganti <dns_ip_address*> item dengan konten yang tepat.

11
Ryan

Mungkin saya melewatkan sesuatu, tetapi menurut petunjuk konfigurasi di https://help.ubuntu.com/14.04/serverguide/network-configuration.html semua yang Anda lakukan adalah memperbarui yang berikut ini. Saya tidak menjalankan proxy - hanya mesin di belakang firewall dan DNS lokal (contohnya menunjukkan Google, tetapi mengaturnya untuk apa pun yang Anda butuhkan).

nano /etc/network/interfaces

Default:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

DIPERBARUI:

# 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

Reboot, jika Anda bisa.

Coba tambahkan dns-nameservers XXX.XXX.XXX.X Ke dalam file /etc/networking/interfaces Anda.

3
Mike

Beberapa jawaban di sini berfungsi dengan baik. Namun saya tidak senang dengan fakta bahwa saya harus secara manual melalui file konfigurasi hanya untuk mengatur "pantas" DNS yang saya sudah saya menerima lebih dari DHCP dengan NetworkManager.

Saya melakukan sedikit penggalian dan memperhatikan bahwa /etc/resolv.conf file sebenarnya adalah tautan dan menunjuk ke /run/systemd/resolve/stub-resolv.conf. Setelah beberapa percobaan tampaknya /run/systemd/resolve/ direktori berisi file lain bernama resolv.conf yang sudah berisi pengaturan yang Anda terima melalui DHCP. Jadi, daripada harus menimpa/membuat file konfigurasi secara manual di /etc/, Anda cukup menautkan kembali /etc/resolv.conf untuk menunjuk ke /run/systemd/resolve/resolv.conf file dan semuanya akan baik-baik saja:

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

Anda sekarang seharusnya dapat mengedit pengaturan bahkan dari Network Manager di Gnome. :)

Tidak yakin apakah ini akan berfungsi pada ubuntu lama tetapi itu pada Ubuntu 17.10.

2
tftd

EDIT MUNGKIN 6,2016

Saya telah menulis skrip untuk memperbarui semua pengaturan untuk koneksi sistem di /etc/Network-Manager/system-connections/ direktori. GUI yang Anda gunakan untuk mengedit koneksi individual, mengedit file tertentu di direktori itu. Script memperbarui semua file - itu hanya mencari mereka yang tidak memiliki set dns dengan grep dan set dengan awk.

Karena mengakses file-file itu memerlukan Sudo akses, jalankan skrip ini dengan Sudo dan kemudian - restart manajer jaringan

#!/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

Script beraksi:

enter image description here

POST ASLI Beberapa pengguna di sini menunjukkan bahwa DNS entah bagaimana dikendalikan oleh dnsmasq. Itu memang benar. Saya telah menghadapi masalah yang agak lebih kecil, di mana tidak peduli bagaimana saya mengubah head atau body dalam /etc/resolvconf/resolv.conf.d, komputer saya tidak bisa mengakses dengan nama domain - hanya bekerja dengan alamat IP.

Apa yang saya lakukan adalah mengedit /etc/NetworkManager/NetworkManager.conf file. Awalnya, katanya dns=dnsmasq tapi saya mengubahnya ke: dns=208.67.222.222. Meskipun demikian, nm-tool tidak menyebutkan 208.67.222.222, saya masih dapat menggunakan nama domain, bukan hanya alamat IP.

Begini caranya NetworkManager.conf file terlihat seperti sekarang:

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

[ifupdown]
managed=false

CATATAN: Untuk detail lebih lanjut tentang masalah saya dan solusi ini, lihat posting saya di askubuntu.com .

PEMBARUAN # 1

Setelah pulang dari universitas hari ini, saya menemukan bahwa saya tidak dapat terhubung ke WiFi di rumah. Saya sudah membaca sedikit di man NetworkManager.conf dan ternyata dns= di [main] sebenarnya adalah baris untuk plug-in, jadi baris dns=dnsmasq sebenarnya menambahkan plugin dnsmasq ke NetworkManager, rupanya.

Jadi solusi saya masih bekerja, tidak seperti yang saya harapkan. Berikut kutipan dari halaman manual:

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

Plugin DNS digunakan untuk menyediakan fungsionalitas server nama caching lokal (yang mempercepat permintaan DNS) dan untuk Mendorong data DNS ke aplikasi yang menggunakannya.

Jadi dengan mengatur dns=208.67.222.222 Saya mungkin, pada dasarnya, mencegah NetworkManager dari menggunakan plugin itu, yang kalau tidak akan menggunakan server DNS lokal (yang tampaknya tidak berfungsi).

1

Ada dua metode

Metode 1

Server DNS yang akan digunakan dapat diubah dengan memperbarui file head di bawah resolv.conf.d

$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base

dan kemudian jalankan

$ Sudo resolvconf -u

Di atas akan menghasilkan file resolv.conf Generik dalam direktori /etc. Semua permintaan penyelesaian Anda akan dikirim ke server nama yang disebutkan di atas. Selesai.

Namun ada implikasinya terhadap hal ini. Saat menggunakan resolvconf untuk secara langsung meminta 1.1.1.1 Untuk resolusi alamat, kekuatan caching yang disediakan oleh dnsmasq hilang. Setiap permintaan akan masuk ke 1.1.1.1

Metode 2

Jika Anda tidak ingin hal di atas terjadi dan gunakan dnsmasq untuk resolusi DNS, rujuk ini jawaban. Jawabannya hanya dijelaskan di sini.

Tambahkan konten berikut dalam file /etc/dnsmasq.conf.

server = 1.1.1.1

Kemudian restart layanan dnsmasq

$ Sudo systemctl restart dnsmasq.service

Segalanya akan bekerja dengan baik. Selesai.

1
Pragathees

Cara mudah untuk mengubah DNS:

$ Sudo nano /etc/network/interfaces

Jika masalah muncul, instal nano:

$ Sudo apt-get install nano -y

kemudian ..

  1. temukan ini: dns-nameservers
  2. jika Anda tidak menemukannya cukup ketik di sana
  3. Saya melakukan milik saya seperti ini: dns-nameservers 199.85.126.10 199.85.127.10

Saya harap ini adalah cara terbaik, saya melakukannya seperti ini di VPS.

0
Saif Salim

NB: Seperti kebanyakan jawaban, yang ini mengasumsikan penggunaan NetworkManager. Namun tidak seperti kebanyakan jawaban lain, ia tidak menganggap penggunaan resolvconf, dhclient atau apa pun - berhati-hatilah agar mereka mengambil alih, (lihat pembaruan).

Mengingat jumlah pandangan dari pertanyaan ini cukup luar biasa bahwa solusi 8 karakter ini belum diposting: menurut man NetworkManager.conf,

dns: [...] tidak ada: NetworkManager tidak akan mengubah resolv.conf. Ini menyiratkan rc-manager tidak dikelola

Karena itu tambahkan

dns=none

di bagian [main] dari /etc/NetworkManager/NetworkManager.conf kemudian restart NetworkManager dan itu tidak akan mengubah /etc/resolv.conf lagi.

Perhatikan bahwa pengaturan rc-manager=unmanaged Harus sama dengan dns=none, Dan pengaturan rc-manager=symlink Bersama dengan memiliki /etc/resolv.conf Sebagai tautan simbolis mungkin merupakan ide yang lebih baik (baca di atas halaman manual-disebutkan).

Perbarui:

Setelah NetworkManager berhenti menimpa /etc/resolv.conf, Saya pikir dhcpcd sudah mengganti /etc/resolv.conf Dengan file kosong yang tidak berguna saat boot. Halaman dhcpcd.conf Membantu, cukup untuk menambahkan

nohook resolv.conf

di dhcpcd.conf Anda (milik saya di /etc/dhcpcd.conf).

pada root:

  1. komentar dns=dnsmasq di /etc/NetworkManager/NetworkManager.conf
  2. menambahkan 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; pada akhir /etc/dhcp/dhclient.conf
  3. Sudo service network-manager restart

Berikut ini membuat perubahan yang ditunjukkan di atas:

$ 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

Tunggu 7/10 detik untuk menyelesaikan proses restart, periksa konfigurasi Anda dengan "nslookup nist.gov". Berfungsi dengan baik di Ubuntu LTS 14.04.

0