Làm cách nào để bao gồm các dòng trong phân giải mà không bị mất khi khởi động lại?


173

Cuối cùng tôi đã chuyển sang 12.04 từ 7.10. Tôi có một phần cuối cùng để hoàn thành nhưng tôi đã bối rối. Tôi đang sử dụng Puppet trên mỗi máy chủ và trước đây tôi đã bao gồm một địa chỉ máy chủ tên và một tên miền tìm kiếm cho người điều khiển rối trong phân giải.

search puppetmaster.com
nameserver 192.168.1.XXX

Trong 12.04 decv.conf bị ghi đè khi khởi động lại. Tôi không thể sử dụng IP tĩnh cho các giao diện này, vì vậy sử dụng các giao diện / etc / network / để giúp tôi là một điểm không.

# 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

Có cách nào để có được độ phân giải để xử lý việc này trong đầu, đuôi hoặc cơ sở không? Nếu có, có bất kỳ ví dụ nào tôi có thể sử dụng để điều chỉnh trên máy chủ của mình.

Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.


2
Nghị quyết là một phần mềm xấu, chỉ cần xóa phần mềm và quản lý /etc/resolv.conf theo cách cũ.
người đàn ông bằng đồng

Câu trả lời:


134

Có lẽ tốt hơn là để máy chủ DNS của bạn có thể phân giải 'con rối' đến đúng địa chỉ và để máy chủ DHCP của bạn cung cấp địa chỉ máy chủ tên DNS và danh sách tìm kiếm hoặc nếu không (nếu bạn có địa chỉ IP tĩnh) để có một cái gì đó như sau đây trong / etc / mạng / giao diện.

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

Nhưng nếu bạn muốn làm điều đó thông qua các tệp cấu hình độ phân giải, bạn sẽ muốn chỉnh sửa /etc/resolvconf/resolv.conf.d/base. Trong tập tin đó, hãy nhập thông tin của bạn như bạn muốn resolv.conf.

nameserver 192.168.1.XXX

Sau đó nói với giải quyết để tái sinh resolv.conf.

sudo resolvconf -u

13
Mặc dù câu trả lời này có phiếu bầu, và phần đầu tiên ít nhiều đúng, nhưng phần thứ hai của câu trả lời là không chính xác. (1) Do không đặt một "tìm kiếm" dòng trong /etc/resolvconf/resolv.conf.d/head. Nếu bạn đặt một dòng "tìm kiếm" ở đó, dòng này sẽ bị bỏ qua nếu độ phân giải bao gồm một dòng "tìm kiếm" trong phần động của tệp độ phân giải. Trình phân giải glibc bỏ qua tất cả trừ dòng "tìm kiếm" hoặc "miền" cuối cùng. Xem độ phân giải (5). (2) Nếu thay đổi cấu hình độ phân giải, bạn không nên khởi động lại công việc phân giải mà chỉ chạy một bản cập nhật, "giải quyết -u".
jdthood

1
Tôi đã xóa dòng. Tùy chọn khác sẽ là sử dụng đuôi thay vì đầu.
tgm4883

6
@tishma: Chào. Đầu tiên, để ngăn chặn bất kỳ sự hiểu lầm: không có gì ghi vào các tập tin cơ sở, đầu hoặc đuôi. Không có gì ghi vào bất kỳ tệp nào trong /etc/resolvconf/resolv.conf.d/ trong thời gian chạy. Các tệp này được đọc bởi decvvv, tập hợp nội dung của chúng vào tệp mà nó ghi --- /run/resolvconf/resolv.conf --- mà các điểm symlink /etc/resolv.conf gửi tới. Thứ hai, liên quan đến những việc cần làm sau khi các tùy chọn dns- * trong / etc / network / interface được thay đổi. Đừng không chạy "/etc/init.d/networking khởi động lại"; điều đó bây giờ không được chấp nhận Thay vào đó, ifdown giao diện trong câu hỏi và ifup nó một lần nữa.
jdthood

4
Trong 14.04 câu trả lời này đã không làm gì cho tôi.
Jay Sullivan

2
Nếu vẫn thất bại .. $ sudo decveconf -u dường như không thay đổi mọi thứ đối với tôi, hãy khởi động lại máy, thế là xong.
MSpreij

35

Tôi nghĩ rằng câu trả lời là kiểm tra của bạn /etc/dhcp/dhclient.conf, tức là không yêu cầu dns-nameserverstừ khách hàng dhcp của bạn .

Sau đó cập nhật /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Sau đó, bạn resolv.confsẽ có được cấu hình tự động theo cách bạn muốn.

Thêm vào dns-searchvà sau đó chạy một /etc/init.d/networking restart (mặc dù tập lệnh này không dùng nữa nhưng nó vẫn hoạt động).


5
quy tắc dhclient trên bất kỳ cài đặt độ phân giải vì vậy đây sẽ là câu trả lời tốt nhất.
Alex R

6
/etc/init.d/networking restartkhông hoạt động trên máy của tôi, nhưng sudo ifdown -asau đó sudo ifup -ađã làm. (Ngoài ra, tôi phải mất một chút để nhận ra mình phải thay thế dnsserveripbằng thứ gì đó như 8.8.8.8; tôi cảm thấy hơi ngớ ngẩn.)
Jason Gross

thửsystemctl restart networking.service
Pavel Sayekat

20

Điều này có thể do cấu hình DHCP khi bạn cài đặt Ubuntu lần đầu tiên. Hãy thử quy trình 3 bước này để xử lý vấn đề cấu hình tự động này.

Đầu tiên

Chỉnh sửa cấu hình giao diện của bạn, được đặt tại: /etc/network/interfaces

Thêm dòng này dưới đây iface lo inet loopback:

dns-nameservers yourdns youraltdns

Để làm ví dụ cho Google DNS, bạn có thể muốn sử dụng điều này:

dns-nameservers 8.8.8.8 8.8.4.4

Thứ hai

Chỉnh sửa tập tin cấu hình DHCP của bạn, đặt tại:

/etc/dhcp/dhclient.conf

Đánh dấu cú pháp dưới dạng một nhận xét bằng cách sử dụng #trên mỗi dòng hoặc chỉ cần xóa mọi máy chủ tên yêu cầu. Trong 16.04, bạn có thể không được yêu cầu thực hiện bất kỳ thay đổi nào ở đây.

Ngày thứ ba

Khởi động lại mạng của bạn bằng cách sử dụng lệnh này:

/etc/init.d/networking restart

Trong 16.04:

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restartkhông hoạt động trên máy của tôi, nhưng sudo ifdown -asau đó sudo ifup -ađã làm.
Jason Gross

Điều này là đơn giản và nó hoạt động mặc dù nó là một chút hack! Vấn đề với những thứ như ubfox là có 1000 cách để làm một việc!
Willa O Ng'wana

Và sau đó bạn có thể kiểm tra xem /etc/resolv.conf có chứa 2 mục DNS mới trên các dòng hữu ích đầu tiên không.
ROMANIA_engineer

8

Hãy nhìn vào resolvconftrang của người đàn ông. Bạn có thể buộc bao gồm các cài đặt DNS nhất định bằng cách tạo, ví dụ /etc/resolvconf/resolv.conf.d/base:

  /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.

Có các tệp đặc biệt khác (đầu và đuôi), chúng có thể giúp bạn đạt được những gì bạn muốn.


4
Bạn có thể thêm các dòng vào /etc/resolvconf/resolv.conf.d/base, nhưng vì mọi máy chủ tên đều có thể truy cập qua một giao diện và chỉ có thể truy cập khi giao diện đó hoạt động, tốt nhất là liên kết thông tin máy chủ tên với giao diện đó. Nếu giao diện được cấu hình với ifup, điều này có nghĩa là: đặt thông tin trên các dòng "dns-search" và "dns-nameervers" trong / etc / network / interface stanzas. Nếu giao diện được cấu hình qua DHCP thì điều này có nghĩa là: cấu hình máy chủ DHCP để cung cấp tên tìm kiếm và địa chỉ máy chủ tên cho khách hàng. V.v. Chỉ sử dụng tệp "cơ sở" như một bản hack tạm thời hoặc là phương sách cuối cùng.
jdthood

Vâng. Tôi đã thêm "máy chủ tên 1.2.3.4" trong /etc/resolvconf/resolv.conf.d/base
Bastion

8

Như nhiều câu trả lời khác nêu điều này có liên quan đến việc resolvconfđược cài đặt trong hệ thống của bạn.

Vì vậy, cách tốt nhất để giữ thứ gì resolv.confđó không bị mất khi khởi động lại là đưa nó vào các tệp cấu hình có độ phân giải:

/etc/resolvconf/resolv.conf.d/

Trong đó đi cho các headtập tin. Bất cứ điều gì bạn đặt ở đó sẽ được viết ở đầu/etc/resolv.conf

Vì vậy, mọi thứ sẽ đi đến một cái gì đó như thế này:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

Đây là câu trả lời đúng thực tế! Cuối cùng!
dùng77 232

6

Đối với tôi, các câu trả lời trên không đầy đủ vì những lý do sau:

  • Tôi không sử dụng resolvconf, chỉ đơn giản /etc/resolv.conf.
  • Sử dụng chattr +iđể khóa resolv.confcó vẻ quá hack. Tôi cần Puppet được tự do thay đổi khi cần thiết.
  • AFAIK, chỉnh sửa /etc/network/interfaceskhông ngăn không resolv.confbị ghi đè; nó chỉ đơn giản chỉ định các máy chủ tên nên được viết. Đối với tôi, việc chỉ định các máy chủ tên không phải là điểm chính. Tôi đang cố gắng thiết lập options timeout:1options attempts:1trong resolv.conftập tin của tôi .

Các giải pháp tốt nhất tôi thấy ghi đè hành vi mặc định dhclientsử dụng móc tài liệu của nó.

Tạo một tệp mới /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatevới các nội dung sau:

#!/bin/sh
make_resolv_conf() {
    :
}

Sau đó làm cho tập tin thực thi:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Bây giờ khi dhclient chạy - khi khởi động lại hoặc khi bạn chạy thủ công sudo ifdown -a ; sudo ifup -a- nó sẽ tải tập lệnh này nodnsupdate. Kịch bản lệnh này ghi đè một chức năng nội bộ được gọi là make_resolv_conf()thông thường sẽ ghi đè resolv.confvà thay vào đó không làm gì cả.

Điều này làm việc cho tôi trên Ubuntu 12.04.


1
Hoạt động tốt trên Debian 8. Giải pháp thanh lịch!
Artur Bodera

1
chỉ để hoàn thiện: manpage dhclient-script chứa thông tin về tập lệnh cấu hình mạng máy khách DHCP đã đề cập đến câu trả lời ở trên.
hecke

Điều này không hoạt động vào ngày 16.04, tôi cũng đã thêm mọi thứ vào /etc/network/interfaces.d, không có hiệu lực, đã thêm một ghi đè trống của make_resolv_conf được đề xuất ở đây, không có hiệu lực .... nhưng không sửa đổi / etc / dhcp / dhclient.conf - tôi có thực sự cần phải sửa đổi một tệp cấu hình tĩnh để sửa lỗi này không?
silverjam

3

Đây có thể chỉ là một vài điều kỳ quặc trong máy của tôi, nhưng ai đó khác có thể có trường hợp góc tương tự.

Tôi đã thử nhiều cách để đưa máy chủ tên ISP của tôi vào /etc/resolv.conf nhưng không thành công:

  • Tôi bao gồm chúng trong /etc/network/interfacesvà khởi động lại mạng. Họ đã không xuất hiện trong /etc/resolv.conf.

  • Tôi đưa chúng vào /etc/resolv.confmột cách rõ ràng, nhưng tất nhiên chúng đã bị ghi đè. Họ đã xuất hiện /run/resolvconf/interface/eth0.inet, nhưng không bao giờ làm cho nó đến /etc/resolv.conf.

  • Tôi đã thử cấu hình độ phân giải cho các cập nhật động. Không thay đổi.

Cuối cùng tôi đọc được ở đâu đó rằng nếu máy cục bộ (127.0.0.1) hiển thị trong /etc/resolv.confbất kỳ máy chủ tên nào khác không được bao gồm.

Trong tuyệt vọng tôi đã chỉnh sửa /run/resolvconf/interface/lo.named, xóa dòng duy nhất trong đó ( nameserver 127.0.0.1) và khởi động lại : ifdown eth0 && ifup eth0.

/etc/resolv.conf lần đầu tiên bao gồm máy chủ tên ISP của tôi! Tôi chạy service network-manager restartđể xem nó có ổn định không và /etc/resolv.confvẫn bao gồm máy chủ tên ISP của tôi. Khởi động lại chỉ để đảm bảo và nó vẫn ở đó nhưng /run/resolvconf/interface/lo.named được đặt lại thành : nameserver 127.0.0.1.

Tò mò khởi động lại mạng vẫn hoạt động: /etc/resolv.confvẫn chứa máy chủ tên ISP của tôi. Tôi không thể giải thích điều này (ai đó có thể?) Nhưng điều này có thể giúp ai đó bị mắc kẹt ở cùng một chỗ.


Điều này có thể được gây ra bởi dnsmasq. Bạn chỉ có thể loại bỏ nó bằng cách sử dụng apt-get remove dnsmasqhoặc cập nhật cấu hình trong /etc/dnsmasq.conf.
Tombart

2

thêm máy chủ tên của bạn vào tập tin /etc/resolvconf/resolv.conf.d/head. Tệp chứa thông điệp mà bạn đã nhận được:

tập tin đó sẽ trông như thế này sau khi thêm 8.8.8.8

root@hvnatvcc: ~ # 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
nameserver 8.8.8.8

3
Thêm dòng vào /etc/resolvconf/resolv.conf.d/head là một giải pháp kém, thậm chí còn tệ hơn so với việc thêm dòng vào /etc/resolvconf/resolv.conf.d/base. Giải pháp chính xác cho các giao diện được định cấu hình bằng ifup là thêm các dòng "dns-search" và "dns-nameervers" vào stanzas trong / etc / network /. Xem thêm ý kiến ​​của tôi về các câu trả lời khác.
jdthood

3
Đó là điều duy nhất thực sự hiệu quả với tôi ... và có vẻ khó hiểu tại sao không có giải pháp "chính xác" nào hoạt động.
silverjam

1

thêm vào dòng cuối cùng, vd:

nameserver 8.8.8.8

Mở một thiết bị đầu cuối và gõ

sudo chattr +i /etc/resolv.conf

+ tôi quan tâm rằng tập tin sẽ không được đặt lại khi khởi động.

Hoàn tác những điều trên

sudo chattr -i /etc/resolv.conf

Để biết thêm

man chattr

1

Các giải pháp khác không hoạt động với tôi trên hệ thống Fedora 20 của tôi. Vấn đề đặc biệt của tôi là dòng "tìm kiếm" trong /etc/resolv.conf đã bị ghi đè. Đây là những gì đã sửa nó. (Điều này giả định rằng NetworkManager đang sản xuất dòng search rn.yourcompany.com và bạn muốn có nó search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Sử dụng lệnh "ifconfig" để tìm hiểu giao diện nào đáng quan tâm:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2.Become root và thay đổi thư mục thiết bị mạng cấu hình hệ thống:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Sử dụng trình chỉnh sửa có sẵn yêu thích của bạn để thêm một Domaindòng với các tên miền bổ sung để tìm kiếm:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Lưu, đăng xuất và đăng nhập lại. NetworkManager bây giờ sẽ có dòng trong \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
Không làm mưa trên cuộc diễu hành của bạn, nhưng đây là Hỏi Ubuntu, và vì vậy Fedora không có chủ đề.
Flimm

1

Thêm các mục trong /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

và chạy theo lệnh

sudo resolvconf -u

1

Đối với Ubuntu Server 18 Netplan là tiện ích mới để định cấu hình mạng.

# cd /etc/netplan

Sau đó chỉnh sửa mục nhập địa chỉ máy chủ trong tệp yaml (sử dụng thụt lề chính xác). Ví dụ: nếu bạn sử dụng máy chủ DNS của Google:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

Để khởi động lại dịch vụ

# netplan apply

Xem https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubfox-server-18-04/


0

Nếu bạn đang sử dụng DHCP, hãy chỉnh sửa /etc/dhcp/dhclient.confđể thêm các máy chủ DNS bổ sung:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

DHCP client ghi đè dns-nameserverstrong etc/network/interfacesvà tôi nghĩ rằng trong /etc/resolvconf/resolv.conf.d/basequá.

Điều này làm việc cho tôi trong máy chủ Ubuntu 14.04.3.

Xem Wiki NetworkConfiguration Wiki để biết chi tiết.


0

Chỉ cần sao lưu tệp giải quyết của bạn và xóa nhịp độ phân giải và chỉnh sửa tệp /etc/resolv.conf thành bất cứ điều gì bạn muốn.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Chúng ta nên có quyền lựa chọn không sử dụng phần mềm xấu như độ phân giải.

Nhân tiện, trường tìm kiếm trong /etc/resolv.conf là vô dụng.


0

Sử dụng resolvconfvà vô hiệu hóa systemd-resolved.service(điều này hoạt động với tôi ubfox 19.04):

  1. Tải về resolvconf

    sudo apt install resolvconf
    
  2. Thêm máy chủ tên

    Mở /etc/resolvconf/resolv.conf.d/basevới trình soạn thảo văn bản của bạn, tôi sử dụng vim.

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

    sau đó, thêm các máy chủ tên trong tệp đã mở, ví dụ:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Đang cập nhật resolv.conf

    sudo resolvconf -u
    
  4. Vô hiệu hóa systemd-resolved.servicevà khởi động lại. nameserver 127.0.0.53không được viết cho /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Làm xong!

Nguồn


Bạn có thể chỉ định phiên bản Ubuntu nào bạn đã làm điều này? Câu hỏi ban đầu đề cập đến Ubuntu 12.04, từ lâu không dùng nữa.
Marc Vanhoomissen

0

Tôi thấy đây là cách khắc phục đơn giản nhất. Nếu bạn có resolv.confresolvconftập tin họ sẽ bước lên nhau. Bạn cần xóa resolv.conftệp nhận và ghi đè mỗi khi bạn thực hiện khởi động lại.

Đặt nameserver 1.1.1.1 1.0.0.1ở dưới cùng của tệp độ phân giải và sau đó chạy

sudo rm /etc/resolv.conf

Để thoát khỏi các tập tin. Sau đó thực hiện khởi động lại và mọi thứ sẽ hoạt động.


0

Giải pháp Mi ngày 12.04:

Tôi nhận thấy rằng nếu bạn thêm máy chủ tên dns trong các giao diện không có máy chủ phân giải tên

trang người đàn ông

Để làm cho độ phân giải không thay đổi khi chúng tôi chỉnh sửa thủ công, hãy thực hiện việc này trong thiết bị đầu cuối:

sudo resolvconf –disable-updates

sau:

sudo resolvconf -a eth0 # or your network interface

sau đó chỉnh sửa thủ công /run/resolvconf/resolv.confthêm tối đa hai máy chủ DNS.

Sau đó khởi động lại dịch vụ:

sudo /etc/init.d/networking restart

4
Đây là rất nhiều không phải là cách đúng đắn để giải quyết vấn đề.
jdthood

1
@jdthood khi ai đó duyệt cái này bạn có thể giải thích TẠI SAO đây không phải là cách đúng đắn? Nó có vẻ hợp lý với tôi, nhưng tôi không biết gì về điều này.
ErikPerik

-1

Chỉ cần đặt một

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

lệnh trên /etc/network/interfacescấu hình của bạn . sau đó khởi động lại mạng của bạn

nó nên hoạt động


-2

Cấu hình đó được khai báo trong /etc/default/bind9

RESOLVCONF=no|yes

không = không áp dụng điều kiện tronginit.d bind9

, hoặc giá trị khác = ghi đèresolv.conf

Vấn đề này xảy ra khi bạn cài đặt bind9và không quan tâm đến việc kiểm tra tất cả các confs.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.