Hầu hết các thông tin tôi thấy trực tuyến nói để chỉnh sửa /etc/resolv.conf
, nhưng bất kỳ thay đổi nào tôi thực hiện ở đó chỉ bị ghi đè.
$ 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
Có vẻ như 127.0.1.1 là một phiên bản cục bộ của dnsmasq
. Các tài liệu dnsmasq
nói để chỉnh sửa /etc/resolv.conf
. Tôi đã thử đặt máy chủ tên tùy chỉnh trong /etc/resolv.conf.d/base
, nhưng những thay đổi không xuất hiện trong /etc/resolv.conf
sau khi chạy Sudo resolvconf -u
.
FYI, tôi không muốn thay đổi DNS trên cơ sở mỗi kết nối, tôi muốn đặt cài đặt DNS mặc định để sử dụng cho tất cả các kết nối khi không được chỉ định khác.
CẬP NHẬT :
Tôi đã tự trả lời câu hỏi này: https://unix.stackexchange.com/a/163506/67024
Tôi nghĩ đó là giải pháp tốt nhất kể từ:
Tôi phát hiện ra rằng bạn có thể thay đổi máy chủ tên mà dnsmasq
sử dụng bằng cách thêm các dòng sau vào /etc/dnsmasq.conf
:
server=8.8.8.8
server=8.8.4.4
Tôi đã không có /etc/dnsmasq.conf
mặc dù, vì nó được cài đặt bởi gói dnsmasq, nhưng Ubuntu chỉ đi kèm với dnsmasq-base. Tôi đã chạy Sudo apt-get install dnsmasq
, sau đó chỉnh sửa /etc/dnsmasq.conf
, sau đó Sudo service dnsmasq restart
và Sudo service network-manager restart
.
Tôi đã chạy Sudo tail -n 200 /var/log/syslog
để kiểm tra nhật ký hệ thống của tôi và xác minh rằng dnsmasq
đã sử dụng máy chủ tên tôi đã chỉ định:
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
Tôi tin rằng nếu bạn muốn ghi đè máy chủ tên DNS, bạn chỉ cần thêm một dòng tương tự như thế này trong tệp base
trong resolv.conf.d
.
$ Sudo vim /etc/resolvconf/resolv.conf.d/base
Sau đó đặt danh sách máy chủ tên của bạn như vậy:
nameserver 8.8.8.8
nameserver 8.8.4.4
Cuối cùng cập nhật resolvconf
:
$ Sudo resolvconf -u
Nếu bạn xem trang man cho resolvconf
thì nó mô tả các tệp khác nhau trong /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
Mặc dù có cảnh báo ở đầu tệp 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
cảnh báo này là có để khi các tệp này được xây dựng, cảnh báo cuối cùng sẽ hoạt động theo cách dẫn đến kết quả resolv.conf
tập tin mà những tập tin này sẽ được sử dụng để thực hiện. Vì vậy, bạn có thể dễ dàng thêm các dòng nameserver
được mô tả ở trên cho tệp base
, vào tệp head
.
Tôi cũng quan tâm đến câu hỏi này và tôi đã thử giải pháp đề xuất @sim.
Để kiểm tra nó, tôi đặt
nameserver 8.8.8.8
trong /etc/resolvconf/resolv.conf.d/base
và
nameserver 8.8.4.4
trong /etc/resolvconf/resolv.conf.d/head
Sau đó, tôi khởi động lại mạng với
Sudo service network-manager restart
Kết quả là /etc/resolv.conf
giống như
# 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
và nm-tool
nói rằng dnsserver là
DNS: 208.67.222.222
DNS: 208.67.220.220
đó là những người được cung cấp bởi bộ định tuyến của tôi. Mặt khác, việc đào một địa chỉ cho biết rằng
;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
Nếu tôi đúng, tôi kết luận từ tất cả những điều này
Nói chung, nó hoạt động nhưng tôi không nghĩ rằng đó là kết quả dự định được yêu cầu. Một giải pháp gần gũi hơn tôi nghĩ là như sau. Biên tập
Sudo vim /etc/dhcp/dhclient.conf
sau đó thêm
supersede domain-name-servers 8.8.8.8;
Kết quả là như sau: decv.conf chỉ chứa 127.0.0.1, điều đó có nghĩa là bộ đệm dnsmasq được gọi và công cụ nm nói
DNS: 8.8.8.8
điều đó có nghĩa là nếu tên được tìm kiếm không có trong bộ đệm, thì nó được yêu cầu tại 8.8.8.8 và không phải tại máy chủ được cung cấp bởi dhcp.
Một tùy chọn khác (có lẽ tốt hơn) là sử dụng "trả trước" thay vì "thay thế": theo cách này, nếu tên không được giải quyết theo 8.8.8.8, thì yêu cầu sẽ rơi trở lại trên máy chủ khác. Trong thực tế, công cụ nm nói
DNS: 8.8.8.8
DNS: 208.67.222.222
DNS: 208.67.220.220
Đối với các tình huống IP tĩnh, Hướng dẫn máy chủ Ubuntu cho biết thay đổi tệp/etc/mạng/giao diện, có thể trông như thế này:
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
Bạn thay đổi IP 192.168.3.45 192.168.8.10 cho những cái bạn muốn, như 8.8.8.8
https://help.ubfox.com/14.04/serverguide/serverguide.pdf Trang 38
Mở nó ra
Sau đó chọn WiFi hoặc Ethernet hoặc bất cứ thứ gì bạn đang sử dụng và nhấp vào chỉnh sửa. Bạn sẽ nhận được điều này:
Chọn ipv4 trong tab
Nhập tên DNS của bạn bên dưới và lưu nó
Bạn đã hoàn tất
Một cách giải quyết nhanh và bẩn chưa được đề cập đến là đặt cờ bất biến trên resolv.conf
tập tin ngay sau khi chỉnh sửa nó.
$ Sudo nano /etc/resolv.conf
Thêm cái này và lưu lại:
nameserver 8.8.8.8
Sau đó:
$ Sudo chattr +i /etc/resolv.conf
Điều đó sẽ làm các trick. Tôi làm điều này trên hệ thống của tôi quá.
Việc sử dụng DNS trên linux được thực hiện qua một tập hợp các thói quen trong thư viện C cung cấp quyền truy cập vào Hệ thống tên miền Internet (DNS). Tệp cấu hình trình phân giải (resolv.conf
) chứa thông tin được đọc bởi trình phân giải thường trình lần đầu tiên khi chúng được gọi bởi một quy trình. Trong ngắn hạn, mỗi quá trình yêu cầu DNS sẽ đọc /etc/resolv.conf
qua thư viện. NSS được xếp chồng lên trên này và được định cấu hình bởi /etc/nsswitch.conf
.
Cấu hình DNS Linux được đặt trong tệp /etc/resolv.conf
[~ # ~] nhưng [~ # ~] có một số chương trình/dịch vụ muốn tự động quản lý và xử lý tệp cấu hình DNS tại /etc/resolv.conf
. Trong một số tình huống bạn có thể muốn tự mình quản lý tệp này. Mỗi DNS quản lý chương trình/dịch vụ có các tệp cấu hình riêng như /etc/dnsmasq.conf
(đối với dịch vụ dnsmasq) và nối thêm cấu hình DNS khi thay đổi kết nối và/hoặc trên các sự kiện khác ... một giải pháp nhanh chóng là khóa tệp cấu hình DNS bằng chattr +i /etc/resolv.conf
nhưng điều này không được khuyến nghị trong một số trường hợp nhất định, một giải pháp tốt hơn là thiết lập chính xác tất cả các chương trình/dịch vụ bằng DNS như (dnsmasq/network-manager/decvconf/v.v.)
Dưới đây là danh sách đầy đủ các thiết lập để lấy lại quyền kiểm soát độ phân giải và tránh bị ghi đè ( cách vô hiệu hóa/thiết lập DNS từ vị trí khác khác với decv.conf ) lưu ý rằng độ phân giải là một chương trình độc lập với độ phân giải, cũng tùy thuộc vào hệ thống/cấu hình của bạn, bạn có thể không có một hoặc nhiều chương trình được liệt kê ở đây.
Tệp cấu hình
cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4
Cập nhật cấu hình
Sudo resolvconf -u
Vô hiệu hóa độ phân giải
systemctl disable --now resolvconf.service
Tệp cấu hình
cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4
Cập nhật cấu hình
Sudo systemctl restart dnsmasq.service
Tệp cấu hình
/etc/NetworkManager/*
Vô hiệu hóa DNS
$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none
Kích hoạt DNS
$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default
[global-dns]
searches=example.com
[global-dns-domain-*]
Sử dụng dịch vụ đã giải quyết
$ cat /usr/lib/NetworkManager/conf.d/resolved.conf
[main]
dns=systemd-resolved
Sử dụng độ phân giải
$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf
[main]
rc-manager=resolvconf
Cập nhật cấu hình
systemctl restart NetworkManager.service
Tệp cấu hình
$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y
dns-nameservers 4.4.4.4 8.8.8.8
Cập nhật Cấu hình
reboot
Tệp cấu hình
$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
Cập nhật Cấu hình
reboot
Vô hiệu hóa rdnssd
systemctl disable --now rdnssd.service
Vô hiệu hóa đã giải quyết
systemctl disable --now systemd-resolved.service
Tệp cấu hình
/etc/sysconfig/network/config
Tắt netconfig
cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
Cập nhật Cấu hình
reboot
Ví dụ về một /etc/resolv.conf
cấu hình
#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
Vấn đề của tôi là một chút khác nhau, tôi muốn ghi đè các máy chủ DNS bộ định tuyến của tôi. Tôi đã tìm thấy liên kết này từ Ubuntu: https://wiki.ubfox.com/OverrideDNSServers
Nó nói: Nếu bạn muốn ghi đè cài đặt DNS được cung cấp cho bạn bởi máy chủ DHCP, hãy mở
/etc/dhcp3/dhclient.conf
và thêm dòng sau:
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
thay thế <dns_ip_address*>
mục có nội dung phù hợp.
Có thể tôi đang thiếu một cái gì đó, nhưng theo hướng dẫn cấu hình tại https://help.ubfox.com/14.04/serverguide/network-configuration.html tất cả những gì bạn làm là cập nhật thông tin sau. Tôi không chạy proxy - chỉ là một cỗ máy đằng sau tường lửa và DNS cục bộ (ví dụ hiển thị Googles, nhưng đặt nó thành bất cứ thứ gì bạn cần).
nano /etc/network/interfaces
Mặc định:
# This file...
# and how to activate...
# The loopback...
auto local
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
CẬP NHẬT:
# 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
Khởi động lại, nếu bạn có thể.
Hãy thử thêm dns-nameservers XXX.XXX.XXX.X
vào của bạn /etc/networking/interfaces
tập tin.
Một số câu trả lời ở đây chỉ hoạt động tốt. Tuy nhiên tôi không hài lòng với thực tế là tôi phải duyệt thủ công các tệp cấu hình chỉ để đặt "đúng" DNS
mà tôi đã đang nhận được DHCP
với NetworkManager
.
Tôi đã đào một ít và nhận thấy rằng /etc/resolv.conf
tập tin thực sự là một liên kết và nó trỏ đến /run/systemd/resolve/stub-resolv.conf
. Sau một số thử nghiệm, có vẻ như /run/systemd/resolve/
thư mục chứa một tệp khác có tên resolv.conf
đã chứa các cài đặt bạn đã nhận được thông qua DHCP
. Vì vậy, thay vì phải ghi đè/tạo tệp cấu hình theo cách thủ công trong /etc/
, bạn chỉ cần liên kết lại /etc/resolv.conf
để trỏ đến /run/systemd/resolve/resolv.conf
tập tin và tất cả sẽ ổn:
# Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Bây giờ bạn có thể chỉnh sửa cài đặt ngay cả từ Trình quản lý mạng trong Gnome. :)
Không chắc chắn nếu điều này sẽ hoạt động trên Ubuntu cũ hơn nhưng nó có trên Ubuntu 17.10.
CHỈNH SỬA 6 tháng 6 năm 2016
Tôi đã viết một tập lệnh để cập nhật tất cả các cài đặt cho các kết nối hệ thống trong thư mục /etc/Network-Manager/system-connections/
. GUI mà bạn sử dụng để chỉnh sửa các kết nối riêng lẻ, chỉnh sửa một tệp cụ thể trong thư mục đó. Kịch bản cập nhật tất cả các tệp - nó chỉ tìm kiếm những người không đặt dns với grep và đặt nó với awk.
Vì việc truy cập các tệp đó yêu cầu quyền truy cập Sudo
, hãy chạy tập lệnh này với Sudo
và sau đó - khởi động lại trình quản lý mạng
#!/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
Kịch bản hoạt động:
POST ORIGINAL Một số người dùng ở đây đã chỉ ra rằng DNS được kiểm soát bằng cách nào đó bởi dnsmasq
. Điều đó thực sự đúng. Tôi đã phải đối mặt với một vấn đề nhỏ hơn, trong đó bất kể tôi đã thay đổi head
hay body
trong /etc/resolvconf/resolv.conf.d
, Máy tính của tôi thực sự không thể truy cập được thực hiện bởi tên miền - chỉ hoạt động với địa chỉ IP.
Những gì tôi đã làm là chỉnh sửa tệp /etc/NetworkManager/NetworkManager.conf
. Ban đầu, nó nói dns=dnsmasq
Nhưng tôi đã đổi nó thành: dns=208.67.222.222
. Mặc dù theo cách này, nm-tool
Không đề cập đến 208.67.222.222, tôi vẫn có thể sử dụng tên miền, không chỉ địa chỉ IP.
Đây là cách tệp NetworkManager.conf
Của tôi trông giống như bây giờ:
[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222
[ifupdown]
managed=false
LƯU Ý: Để biết thêm chi tiết về vấn đề của tôi và giải pháp này, hãy tham khảo bài đăng của tôi trên askubfox.com .
Sau khi trở về nhà từ trường đại học, tôi phát hiện ra rằng tôi không thể kết nối với WiFi tại nhà. Tôi đã đọc một chút về man NetworkManager.conf
Và hóa ra dns=
Trong [main]
Thực sự là một dòng cho các trình cắm, vì vậy dòng dns=dnsmasq
rõ ràng là đang thêm plugin dnsmasq vào NetworkManager.
Vì vậy, giải pháp của tôi vẫn hoạt động, không như tôi mong đợi. Đây là đoạn trích từ trang người đàn ông:
dns=plugin1,plugin2, ... List DNS plugin names separated by ','.
Các plugin DNS được sử dụng để cung cấp chức năng máy chủ bộ nhớ đệm cục bộ (giúp tăng tốc truy vấn DNS) và để đẩy dữ liệu DNS đến các ứng dụng sử dụng nó.
Vì vậy, bằng cách đặt dns=208.67.222.222
Về cơ bản, tôi có thể ngăn NetworkManager sử dụng plugin đó, nếu không thì sẽ sử dụng máy chủ DNS cục bộ (dường như không hoạt động).
Có hai phương thức
Có thể thay đổi máy chủ DNS để sử dụng bằng cách cập nhật tệp head
trong resolv.conf.d
$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base
và sau đó chạy
$ Sudo resolvconf -u
Ở trên sẽ tạo một tệp resolv.conf
Chung trong thư mục /etc
. Tất cả các yêu cầu giải quyết của bạn sẽ được gửi đến máy chủ tên nói trên. Đã giải quyết.
Tuy nhiên có những tác động đến điều này. Khi sử dụng resolvconf
để truy vấn trực tiếp 1.1.1.1
Cho độ phân giải địa chỉ, sức mạnh của bộ đệm được cung cấp bởi dnsmasq sẽ không còn nữa. Mọi yêu cầu sẽ chuyển đến 1.1.1.1
Nếu bạn không muốn ở trên xảy ra và sử dụng dnsmasq cho độ phân giải DNS, hãy tham khảo this answer. Câu trả lời được mô tả đơn giản ở đây.
Thêm nội dung sau vào tệp /etc/dnsmasq.conf
.
máy chủ = 1.1.1.1
Sau đó khởi động lại dịch vụ dnsmasq
$ Sudo systemctl restart dnsmasq.service
Mọi thứ sẽ hoạt động tốt. Đã giải quyết.
Cách dễ dàng để thay đổi DNS:
$ Sudo nano /etc/network/interfaces
Nếu xảy ra sự cố, hãy cài đặt nano
:
$ Sudo apt-get install nano -y
sau đó ..
dns-nameservers
dns-nameservers 199.85.126.10 199.85.127.10
Tôi hy vọng đây là cách tốt nhất, tôi đã làm nó như thế này trên VPS.
NB: Giống như hầu hết các câu trả lời, câu trả lời này giả định việc sử dụng NetworkManager. Tuy nhiên, không giống như hầu hết các câu trả lời khác, nó không cho rằng việc sử dụng resolvconf
, dhclient
hoặc bất cứ điều gì khác - hãy cẩn thận mà họ có thể tiếp quản, mặc dù (xem cập nhật).
Với số lượt xem của câu hỏi này, thật khó tin rằng 8 ký tự giải pháp này chưa được đăng: theo man NetworkManager.conf
,
dns: [Hoài] none: NetworkManager sẽ không sửa đổi độ phân giải. Điều này ngụ ý người quản lý RC không được quản lý
Do đó thêm
dns=none
trong phần [main]
của /etc/NetworkManager/NetworkManager.conf
, sau đó khởi động lại Trình quản lý mạng và nó sẽ không sửa đổi /etc/resolv.conf
nữa.
Lưu ý rằng cài đặt rc-manager=unmanaged
Phải tương đương với dns=none
Và cài đặt rc-manager=symlink
Cùng với việc có /etc/resolv.conf
Làm liên kết tượng trưng có thể là ý tưởng tốt hơn (đọc ở trên trang web -mentioned).
Sau khi NetworkManager ngừng ghi đè /etc/resolv.conf
, Tôi đã tìm ra dhcpcd
đã thay thế /etc/resolv.conf
Bằng một tệp trống vô dụng khi khởi động. Trang web của dhcpcd.conf
Đã giúp, nó đủ để thêm
nohook resolv.conf
trong dhcpcd.conf
của bạn (của tôi nằm trong /etc/dhcpcd.conf
).
trên thư mục gốc:
dns=dnsmasq
trên /etc/NetworkManager/NetworkManager.conf
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;
ở cuối của /etc/dhcp/dhclient.conf
Sudo service network-manager restart
Sau đây thực hiện các thay đổi được hiển thị ở trên:
$ 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
Đợi 7/10 giây để hoàn tất quá trình khởi động lại, hãy kiểm tra cấu hình của bạn với "nslookup nist.gov". Hoạt động tốt trên Ubuntu LTS 14.04.