Làm cách nào để tôi có được độ phân giải để tạo lại độ phân giải sau khi tôi thay đổi / etc / mạng / giao diện?


92

Sau khi cập nhật /etc/network/interfacesvới một cái gì đó rất giống với bên dưới, làm thế nào để tôi /etc/resolv.confcập nhật? Tôi đã thử (với quyền root) resolver -u, service networking restartnhưng chúng không hoạt động. Tôi cũng đã sửa lỗi symlink resolv.confvà thử resolver -ulại. Cuối cùng trong thất vọng tôi đã khởi động lại, nó đã khắc phục vấn đề bằng cách xây dựng lại /etc/resolv.conf.

Ubuntu 12.04, máy chủ 64 bit, tất cả các bản vá mới nhất được cài đặt.

Ví dụ /etc/network/interfaces:

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 đang cố gắng làm gì mà giải quyết đó đã ngăn bạn làm gì?
kingmilo

Câu trả lời:


106

service networking restart không phải lúc nào cũng là một cách đáng tin cậy để nâng cấp tất cả các giao diện.

Các resolvconf -ulệnh chỉ cập nhật resolv.conftừ cơ sở dữ liệu riêng resolvconf của. Bạn cần cập nhật cơ sở dữ liệu.

Để cập nhật cơ sở dữ liệu, bạn phải gọi độ phân giải bằng tùy chọn -ahoặc -d. Điều đó xảy ra đằng sau hậu trường khi bạn chạy ifup hoặc ifdown. Vì vậy, thông thường, như với bất kỳ thay đổi nào khác /etc/network/interfaces, để kích hoạt các thay đổi đối với các tùy chọn dns- * bạn phải tắt giao diện được đề cập và thử lại lần nữa. Hoặc bạn có thể khởi động lại.

Nếu bạn muốn thay đổi giao diện mà không cần tắt máy (có lẽ vì bạn đang điều khiển máy từ xa và tình cờ được kết nối qua giao diện đó, natch) thì bạn có thể đạt được kết quả tương tự bằng cách chạy phân giải trực tiếp từ dòng lệnh. Điều này đòi hỏi một chút kiến ​​thức về ngữ nghĩa của độ phân giải. Giả sử khổ thơ có liên quan / e / n / i là

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

trong đó FFFF là một họ địa chỉ ("inet" hoặc "inet6").

Để kích hoạt các tùy chọn dns- * này, bạn chạy phân giải như sau (có, với các dòng mới trong chuỗi được chuyển sang độ phân giải).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Đối với khổ thơ được đưa ra trong câu hỏi này sẽ là như sau.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Tham khảo trang hướng dẫn độ phân giải (8) và tệp README của gói độ phân giải (/usr/share/doc/resolvconf/README.gz) để biết thêm thông tin.


"Đừng làm" khởi động lại mạng dịch vụ "; đó không phải là cách đáng tin cậy để giảm tất cả các giao diện." Hoạt động tốt cho tôi. Tốt để biết cách làm sạch mặc dù.
Aki

11
Nếu bạn không nên thực hiện "khởi động lại dịch vụ mạng", tôi có thể đề nghị bạn không đặt nó ở dòng đầu tiên của câu hỏi này không? Khi vội vàng tìm kiếm một giải pháp, điều đầu tiên tôi làm là sao chép và dán lệnh đầu tiên tôi thấy.
Robin Winslow

4
@RobinWinslow +1 để thực hiện ngày của tôi
Pete

8
Câu trả lời này là từ chính người đã phát triển resolvconf :)
heemayl

2
Để khởi động lại / đọc lại /etc/network/interfaces, bạn có thể làm điều đó : ifdown eth0 && ifup eth0; nó hoạt động ngay cả trong một phiên ssh từ xa.
Pierre-Damien


5

Đối với những người quản lý máy chủ của bạn từ xa, bạn có thể:

  1. cập nhật dns-nameserversdòng trong/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Lưu ý rằng điều này phải nằm trên một dòng chia cho; (dấu phân cách dòng lệnh linux). Bạn thậm chí không nên mất kết nối hiện tại của bạn. Ngoại lệ là tạo một lỗi đánh máy trong tệp giao diện. Nếu điều này xảy ra ifupsẽ thất bại và bạn sẽ phải có quyền truy cập vật lý hoặc ethxxkết nối khác .


2

service resolvconf restartsẽ tạo lại /etc/resolv.conftập tin mà không có nhiều phiền phức.


2
Tôi nhận đượcFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital

lệnh đã hoàn thành tuy nhiên không được phục hồi /etc/resolv.conftrên máy chủ Ubuntu 14.04
Jossef Harush

1

Câu trả lời này tương tự như câu hỏi trên nhưng sử dụng cấu hình ví dụ câu hỏi để trả lời câu hỏi. Cộng với điều này giải thích tại sao cả hai lệnh là cần thiết.

Chỉnh sửa /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Những thay đổi này sẽ không diễn ra trừ khi bạn khởi động lại hoặc tải lại tệp cấu hình:

Để cập nhật tệp giao diện trực tiếp, cần chạy lệnh sau:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Điều này cho phép cập nhật giao diện mà không cần khởi động lại hoặc tải lại.

Tuy nhiên, các thay đổi lệnh trên sẽ bị mất sau khi khởi động lại nếu những thay đổi trong /etc/network/interfaceskhông được thực hiện.

Nhân tiện, câu trả lời cuối cùng từ BDenis trong danh sách này thực sự hoạt động thay cho lệnh cuối cùng bằng cách phân tích /etc/network/interfacestệp và chuyển các dòng đó vào lệnh sudo resolvconf -a eth0 Nó thực sự là một nửa câu trả lời và một ví dụ thực sự tốt về phân tích cú pháp sed nội tuyến. Nếu bạn muốn xem làm thế nào nó chỉ cần chạy phần đầu tiên của lệnh và xem nó phân tích /etc/network/interfacestệp và nhổ tất cả các thông tin cần thiết bạn cần để chạy sudo resolvconf -a eth0lệnh:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Lưu ý rằng điều này sẽ tạo ra giống như lệnh:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

Miễn là /etc/network/interfacestập tin được cấu hình với thông tin 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-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10

Đáng buồn thay không thể sử dụng đó. Giao diện của tôi được quản lý bởi người quản lý mạng và DHCP, vì vậy việc thêm nó vào /etc/network/interfaceskhông phải là một tùy chọn hợp lệ trong trường hợp đó. (Ubuntu 14.04)
Tino

1

Câu trả lời đơn giản:

Chỉ cần cài đặt độ phân giải. apt install resolvconf

Sau đó, ifup eth0cập nhật các dns trong etc/resolv.conf, theo dns-nameserversdòng trong /etc/network/interfaces.


giao diện không xác định. Mọi người thực sự biết cách làm xáo trộn các chi tiết ở đây ... Tôi nghĩ chúng ta nên nhắm đến việc chứa tất cả các lệnh. Kịch bản đầy đủ cho mỗi, không có văn xuôi.
mathtick

1

Vào ngày 18.04, các công việc sau đây đáng tin cậy (chạy dưới quyền root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Quan trọng: Hãy chắc chắn rằng bạn đã resolvconfcài đặt gói .
Nó dường như không phải là mặc định và nếu không có nó, một số thay đổi (!) Sẽ /etc/network/interfacesbị bỏ qua một cách âm thầm (ví dụ dns-*).


0

Điều này làm việc cho tôi:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Điều chỉnh phù hợp.


0

Trên phiên bản Ubuntu 18.04 trên máy tính để bàn, nơi không có dịch vụ networkingresolvconfkhông được cài đặt theo mặc định, tôi đã thành công trong việc tái tạo resolv.confbằng cách khởi động lại network-manager:

sudo service network-manager restart

-3

Ngoài ra, bạn có thể thử lệnh này:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
Bạn có thể giải thích tại sao lệnh này nên hoạt động?
αsнι14

1
Điều này không hoạt động chính xác nếu bạn có nhiều hơn một IP máy chủ tên trong dòng dns-nameserver IP1 IP2. Dòng sau đó phải được lặp lại resolv.conf, nhưng không.
Tino

Hơn nữa, /etc/network/interfacessử dụng dns-nameservers(chú ý sở cuối) trong khi resolvconfsử dụng nameserver. Lệnh không đối phó với nó. Và ngay cả khi mọi thứ đều chính xác, đường ống sed | grep | sedchắc chắn sẽ không phải là cách hiệu quả nhất.
Melebius
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.