Nghị quyết tiếp tục bị ghi đè khi khởi động lại dnsmasq, phá vỡ dnsmasq


9

Tôi đang chạy Debian Jessie và tôi đang cố gắng định cấu hình dnsmasq làm máy chủ DNS lưu trữ. Tôi đã sử dụng một hướng dẫn để đưa ra những điều sau đây /etc/dnsmasq.conf:

listen-address=127.0.0.1
bind-interfaces
domain-needed
bogus-priv
no-hosts
dns-forward-max=150
cache-size=1000
neg-ttl=3600
resolv-file=/etc/resolv.dnsmasq
no-poll

Làm sudo service dnsmasq restartthất bại và nó sẽ không bắt đầu, nói với tôi

Mar 26 17:13:01 user dnsmasq[26743]: dnsmasq: syntax check OK.
Mar 26 17:13:01 user dnsmasq[26746]: dnsmasq: only one resolv.conf file allowed in no-poll mode.

Ok, thật lạ khi một cấu hình ra khỏi hướng dẫn không thành công. Tôi sẽ chỉ loại bỏ no-polltùy chọn để xem nếu nó hoạt động. Lần này nó bắt đầu tốt, nhưng độ phân giải DNS rõ ràng là không thành công. Các tập tin liên quan:

/etc/resolv.conf:

nameserver 127.0.0.1

/etc/resolv.dnsmasq:

nameserver 8.8.8.8

/var/run/dnsmasq/resolv.conf:

nameserver 127.0.0.1

Tệp thứ ba dường như là tệp giải quyết trực tiếp của dnsmasq, bởi vì việc thêm một dòng máy chủ tên vào nó trong khi dnsmasq đang chạy khiến độ phân giải DNS bắt đầu hoạt động ngay lập tức. Vì vậy, có vẻ như nó bỏ qua của tôi /etc/resolv.dnsmasq. Tôi cũng đã thử thêm một dòng máy chủ tên vào tôi /etc/resolv.confvà xóa resolv-filedòng đó /etc/dnsmasq.conf, nhưng nó bị ghi đè ngay lập tức vào những gì bạn thấy ở trên khi thực hiện sudo service dnsmasq restart.

Điều gì đang xảy ra với dnsmasq và tôi có cấu hình dnsmasq làm máy chủ DNS lưu trữ không?


1
Nếu bạn chỉ muốn một máy chủ tĩnh, tại sao bạn không đặt server=8.8.8.8cấu hình dnsmasq của mình?
tripleee

Tôi đang suy nghĩ no-pollvề cơ bản nói bỏ qua resolv-file. Khi khởi động, nó sẽ lấy bất kỳ tập tin nào mới hơn, vì vậy nó sẽ nằm /etc/resolv.conftrong trường hợp của bạn (bởi vì nó được viết lại khi có gì đó thay đổi).
tripleee

Tôi vẫn không biết cách chính xác để làm điều đó sẽ là gì nếu tôi có nhiều máy chủ DNS trong đầu, nhưng vì tôi không vui vì nhận xét của bạn đã giải quyết vấn đề của tôi.
null Người dùng

Câu trả lời:


11

Dường như có một lỗi trong tập lệnh khởi động dnsmasqsử dụng resolvconfđể ghi đè trình phân giải cục bộ nếu giao diện loopback cục bộ không được ghi rõ ràng excepttrong /etc/defaults/dnsmasqtệp.

Câu trả lời ngắn gọn là bạn có thể thêm ...

DNSMASQ_EXCEPT=lo

để /etc/defaults/dnsmasqgiải quyết vấn đề.

Để biết thêm thông tin, hãy xem câu hỏi này ...

/raspberrypi/37439/proper-way-to-prevent-dnsmasq-from-overwr-dns-server-list-supplied-by-dhcp


Điều này đã cứu cuộc đời tôi. Cảm ơn bạn.
Ryan Bobrowski

3

bigjosh đã đúng - ngoại trừ đã có bản cập nhật cho dnsmasq và giờ đây có một tùy chọn ở cuối /etc/default/dnsmasqmà bạn có thể hủy băm:

IGNORE_RESOLVCONF=yes

Đây là cách nó hoạt động với thiết lập phức tạp của tôi trên Ubuntu 16.04.
Ikon

1
cách của bigjosh làm việc cho tôi. Mặc dù /etc/defaults/dnsmasqđã IGNORE_RESOLVECONF=yescó hướng dẫn để bỏ qua nó để giải quyết vấn đề này, nhưng nó đã không làm được.
andho

2

Đừng dùng

resolv-file=/etc/resolv.dnsmasq

Đặt máy chủ dns vào dnsmasq.conf, như

server=/localnet/192.168.0.1 # change ip for your ip-server
server=8.8.8.8
server=8.8.4.4

Và thêm vào dnsmasq.conf

no-resolv

1

Nếu bạn chỉ muốn một máy chủ DNS chỉ lưu vào bộ nhớ cache và không có gì khác lạ mà dnsmasq có thể làm, tốt hơn hết bạn nên cài đặt lwresdhoặc unboundsử dụng cấu hình mặc định cung cấp cho bạn một máy chủ DNS chỉ lưu vào bộ đệm. Sau đó, bạn chỉ cần đặt /etc/resolv.confđể sử dụng "máy chủ tên 127.0.0.1" và bạn đã hoàn tất.

Điều tuyệt vời là hai gói này không gây rối với những gì /etc/resolv.confgiống như dnsmasq và do đó là một giải pháp sạch hơn IMHO. Bạn cũng có thể thường xuyên gỡ bỏ resolvconfgói để không có gì lộn xộn /etc/resolv.conf.

FYI, dnsmasq đã trở nên khá phức tạp, quá nhiều tiếng chuông và tiếng huýt sáo và chỉ gây đau đớn cho hầu hết mọi người nữa. Vi phạm KISS trong cuốn sách của tôi.


Thật không may, một số gói phụ thuộc vào dnsmasq-base, như network-managerlibvirt-bin(nếu bạn đang thực hiện KVM), vì vậy không phải lúc nào cũng có thể loại bỏ hoàn toàn. Trong trường hợp đó, bạn có thể xóa /usr/sbin/dnsmaqvà biến nó thành một liên kết cứng để /bin/truenó luôn thành công (để đánh lừa tập lệnh init) Sau đó chattr +i /usr/sbin/dnsmasqđể khóa nó khỏi bị cập nhật. Tôi đã phải làm điều này trên một số máy tính xách tay.
milli

+1 cũng được mô tả trong philand ware.com/2013/11/07/dnsmasq-resolvconf.html . Hành vi thật kinh tởm và tiếp tục gây đau đớn thậm chí 5 năm sau khi báo cáo bài viết và lỗi ...
user2480144
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.