Sử dụng dnsmasq với NetworkManager


15

Người ta biết rằng NetworkManager không chơi tốt với dnsmasq(ref: tại đây ). Tôi đã lướt qua rất lâu thảo luận ở đây nhưng vẫn không chắc chắn cách thức được đề xuất để giải quyết tình huống này là gì.

Tất cả những gì tôi muốn là làm là sử dụng dnsmasq để cung cấp DNS và DHCP cho mạng cục bộ của tôi. Điều gì sẽ là cách được đề nghị trong trường hợp này?

Có vẻ như vấn đề vẫn còn đối với Ubuntu 14.04, thậm chí là lỗi cũng được cho là đã được sửa.

Khi công việc xung quanh, mọi người đang vô hiệu hóa nô lệ NM dnsmasq-base vì những lý do sau:

NM-nô lệ dnsmasqsử dụng các tùy chọn mã hóa cứng (tính bằng C) cung cấp chức năng cực kỳ hạn chế.

  • Nó không nghe trên ethX ( --listen-address=127.0.0.1). Vì vậy, chúng tôi không thể sử dụng máy chủ của mình làm máy chủ DNS cho PC mạng cục bộ, tức là nó hoàn toàn vô dụng đối với mạng LAN.
  • Nó không yêu cầu bộ đệm ( --cache-size=0). Không có bộ nhớ đệm ==> không tăng tốc truy vấn DNS. Điều này một lần nữa rất có ý nghĩa đối với mạng LAN vì có nhiều người dùng đồng thời.
  • Cuối cùng, chúng tôi cũng cần chức năng DHCP và TFTP của dnsmasq, vì vậy ngay cả khi NM + dnsmasq bao gồm một máy chủ DNS thực, chúng tôi sẽ phải chạy một dnsmasq khác

Nhưng tôi không chắc liệu họ có còn giữ và / hoặc cách khắc phục đã giải quyết (các) sự cố không. Hơn nữa, không ai trong số họ rất rõ ràng chính xác những gì họ đã làm và cách họ đã làm để giải quyết vấn đề của họ. Tức là, phần giải pháp bị thiếu trong các cuộc thảo luận dài . Ai đó có thể điền vào chỗ trống xin vui lòng? I E,

Các dnsmasqbên ngoài được cung cấp bởi Ubuntu không hoạt động, về phía máy chủ, vì những lý do trên. Ngoài ra, về phía máy khách, "dnsmasq được cài đặt trên các máy tính xách tay Ubuntu đó không thể truy vấn LAN DNS từ máy chủ DNS của tôi" , bởi vì "Trình quản lý mạng (máy tính xách tay Ubuntu) đang khiến chúng có cài đặt máy chủ tên lạ 127.0.1.1" ( ref: Giải pháp DNS cho mạng LAN hoặc mạng gia đình cục bộ )

Làm cách nào để dnsmasq hoạt động trơn tru với NetworkManager, để cung cấp DNS và DHCP (và TFTP) cho mạng cục bộ của tôi, ở cả phía máy chủ và máy khách?

TL'dr

cho những người tìm kiếm câu trả lời. Trong tất cả các câu trả lời dưới đây, tôi thấy giải pháp đơn giản nhất là @ brad's, cho phía máy chủ (vẫn chưa có câu trả lời hay cho phía khách hàng):

giải pháp duy nhất cho vấn đề này là vô hiệu hóa dnsmasq ổ đĩa NM ... và cài đặt dnsmasq "tiêu chuẩn" và sau đó định cấu hình thông qua /etc/dnsmasq.conftệp cấu hình tiêu chuẩn của nó .


2
Chỉ dành cho nhân viên Google (như tôi): Trong các phiên bản mới hơn của ubfox dnsmasq-core bên trong NetworkManager có phần thân thiện hơn. Xem tại đây: Askubfox.com/questions/233195/ khăn
A. Rabus

Câu trả lời:


3

Tôi cũng có vấn đề của bạn.

Về nguyên tắc, sau wiki.archlinux , dường như để kích hoạt bộ đệm ẩn, nó đủ để tạo một tệp /etc/NetworkManager/dnsmasq.d/cachechứa đơn giản

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

Tôi đã thử điều này nhưng sau khi NM khởi động lại, tôi vẫn không có bộ đệm:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

Lưu ý rằng tệp conf được trích dẫn luôn trống: Tôi chưa thể định cấu hình bất kỳ tùy chọn nào bằng quy trình này.

Nói chung, có vẻ như dnsmask NM-nô lệ trong 14.04 (được cung cấp bởi gói cơ sở dnsmasq) đã bị khóa hoàn toàn, do đó không thể kích hoạt bộ đệm, cũng như mọi thứ khác (dhcp, tftp).

Nếu điều này đúng, tôi nghĩ rằng, như bạn nói, giải pháp duy nhất cho vấn đề là vô hiệu hóa dnsmasq của ổ đĩa NM bằng cách bình luận ra dòng

dns=dnsmasq

trong tệp /etc/NetworkManager/NetworkManager.confvà cài đặt dnsmasq "tiêu chuẩn" và sau đó cấu hình nó thông qua /etc/dnsmasq.conftệp cấu hình tiêu chuẩn của nó .


Chào mừng bạn đến với siêu người dùng! Cảm ơn bạn đã giúp đỡ!
xpt

1
Trên thực tế, điều này không cho phép bộ đệm, vì nó đang chạy với --conf-dir=/etc/NetworkManager/dnsmasq.d, cache-sizechỉ định trong tệp bạn đã tạo được sử dụng. Bạn có thể thấy sự khác biệt bằng cách sử dụngdig
sirfz

6

Có thể ghi đè cài đặt bằng cách đặt chúng vào /etc/NetworkManager/dnsmasq.d/*.conf. Cài đặt tệp cấu hình được ưu tiên hơn các cờ dòng lệnh. Chúng được áp dụng khi NetworkManager bắt đầu dnsmasq. Chạy sudo service network-manager restartđể áp dụng lại. (Nếu có bất kỳ nghi ngờ nào: câu trả lời của brad đã bỏ lỡ thực tế ps ax | grep dnscho thấy một --conf-dircuộc tranh luận)

Ví dụ:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Khi tôi nhớ lại NetworkManager, vô hiệu hóa bộ nhớ đệm dnsmasq theo mặc định do lo ngại về ngộ độc bộ đệm. Đối với một máy mà tất cả người dùng đều tin tưởng thì đó có thể không phải là vấn đề.

Trình quản lý mạng không tích hợp với resolvconfvà máy chủ của NM 127.0.1.1sẽ không được sử dụng cục bộ nếu gói độ phân giải được cài đặt. độ phân giải là một phần của các bản cài đặt Debian tối thiểu và tiêu chuẩn; NetworkManager giới thiệu lại chức năng đó theo cách tích hợp hơn, ít dựa trên tập lệnh hơn.

NetworkManager đảm bảo không can thiệp vào một cá thể dnsmasq toàn cầu (liên kết với IP loopback thứ cấp và thiết lập bind-interfacesthông qua /etc/dnsmasq.d/network-manager). Nếu bạn cài đặt một cá thể dnsmasq toàn cầu và giữ phiên bản của NM, hãy kiểm tra kỹ /etc/resolv.confđể xem cái nào mà máy chủ sẽ sử dụng theo mặc định.

Mặc dù bạn có thể tùy chỉnh phiên bản dnsmasq của Trình quản lý mạng như được hiển thị ở trên, nếu bạn muốn máy chủ DNS liên kết với giao diện công cộng, bạn nên cài đặt dnsmasqgói (NetworkManager chỉ sử dụng dnsmasq-base, không cấu hình phiên bản toàn cầu) và đặt cấu hình của bạn vào /etc/dnsmasq.d/*.conf. Ví dụ nô lệ của Trình quản lý mạng chỉ có nghĩa là liên kết với giao diện loopback và cấu hình nó vượt quá phạm vi đó sẽ có nguy cơ phá vỡ nó.


Tóm lại, đối với người chỉ muốn bộ nhớ cache DNS cục bộ:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Đối với một mạng LAN đơn giản, việc chia sẻ kết nối của Trình quản lý mạng vẫn đủ. Nhưng đối với mạng LAN được cấu hình tùy chỉnh, với TFTP, v.v.

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart

Cảm ơn. Mặc dù bạn nên mô tả đầy đủ hơn các lệnh "tóm tắt" của bạn làm gì, tức là các hướng dẫn cũng xóa 4 gói nếu bạn có chúng hiện tại Thêm các liên kết và thảo luận tại reddit.com/r/Ubfox/comments/2j0va4/
Thẻ

Khá đồng ý với @nealmcb, Tobu, hãy giải thích lý do tại sao "cho bất kì ai muốn bộ nhớ đệm DNS địa phương" , họ cần phải loại bỏ các dnsmasqgói. Vậy thì echolệnh tiếp theo là để làm gì? kể từ khi dnsmasqsẽ biến mất
xpt

@xpt Tobu đề nghị gỡ bỏ dnsmasq, nhưng bạn vẫn nên dnsmasq-basecài đặt do NM.
Thalis Kalfigkopoulos

0

Tôi muốn chỉ định một MAC cụ thể cho một địa chỉ IP cụ thể và vì mục đích ổn định, hãy gắn với Trình quản lý mạng / dnsmasq mặc định càng nhiều càng tốt.

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c không có nhận xét về việc sử dụng tệp --conf để bỏ qua cấu hình, nhưng sau đó trong tệp chúng tôi có

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Trong Ubuntu 16.04 LTS, sau khi thiết lập Điểm truy cập Wi-Fi và chia sẻ kết nối khác, ps auxgww | grep dnsmasqcho thấy đối số dòng lệnh cuối cùng của mỗi quy trình dnsmasq là:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Vì vậy, có thể tạo các tệp cấu hình trong thư mục đó được chia sẻ giữa tất cả các lệnh của dnsmasq được khởi động bởi Trình quản lý mạng.

Tôi đã tạo /etc/NetworkManager/dnsmasq- Shared.d/Hue

dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221

và khởi động lại, mặc dù đang chạy

sudo service network-manager restart

sẽ làm việc

Điều này dẫn đến thiết bị của tôi nhận được địa chỉ IP thích hợp.

Đúng, điều này là sai bởi vì điều đó có nghĩa là tất cả các yêu cầu của dnsmasq bởi NetworkManager sẽ nhận được tuyên bố này, nhưng trong trường hợp này, nó vô hại vì nó chỉ quan trọng nếu MAC xuất hiện trên mạng. Nếu mạng không phải là 192.168.1 thì sẽ gặp sự cố.

Điều này mạnh mẽ hơn việc thay thế / usr / sbin / dnsmasq bằng một tập lệnh như được đề xuất tại https://gist.github.com/magnetikonline/6236150

Giải pháp phù hợp sẽ là sửa đổi cách dnsmasq được gọi để sử dụng đúng các tệp cấu hình dnsmasq. Tôi hiểu mong muốn có Trình quản lý mạng "chỉ hoạt động", nhưng làm cho các công cụ trở nên ngu ngốc có nghĩa là chỉ những kẻ ngốc mới có thể sử dụng chúng.


tuy nhiên, cảm ơn câu trả lời của Christopher, tôi thực sự không thể theo dõi ... "Tôi muốn gán một MAC cụ thể cho một địa chỉ IP cụ thể và cho mục đích ổn định" ... "ps auxgww | grep dnsmasq cho thấy rằng đối số dòng lệnh cuối cùng của mỗi quy trình dnsmasq " ... " Tôi đã tạo ... sẽ hoạt động " ... " Vâng, điều này sai " ... Tức là tôi thực sự không thể theo dõi suy nghĩ của bạn , để có ý nghĩa những gì bạn đang cố gắng nói ở đây.
xpt

0

Giải pháp của tôi có thể phá vỡ Trình quản lý mạng và nó giữ mọi thứ đơn giản để làm mọi việc. Với cách xử lý lỗi của NM với dnsmasq, tôi chỉ ghi đè nó bằng phương pháp của tôi dưới đây.

Một cách giải quyết cho vấn đề là chỉ cần làm như sau:

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Chỉnh sửa ~/dnsmasq.conftập tin trong thư mục người dùng của bạn như thế nào bạn muốn và lưu nó.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

Tôi đã tạo một bí danh bash đơn giản và đặt nó ở dưới cùng của tệp ~ / .bash_aliases để dễ dàng chỉnh sửa tệp dnsmasq.conf. Đây là bí danh:

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

Tất nhiên, bạn có thể chọn bất kỳ trình soạn thảo nào theo ý thích của mình cho lệnh sudo thứ hai trong bí danh, nhưng tôi đã sử dụng nano ở đó để dễ dàng cho mọi người. Lưu tệp, đóng và mở lại tab / cửa sổ thiết bị đầu cuối lệnh của bạn. Điều đó sẽ cho phép bí danh có sẵn cho các tab / cửa sổ thiết bị đầu cuối mới mở.

Chỉ cần chạy eddmctừ tài khoản người dùng của bạn và nó sẽ yêu cầu mật khẩu của bạn để thực hiện các lệnh nâng cao.

Lưu ý rằng tôi luôn luôn chattr +icác tập tin. Điều này là do Trình quản lý mạng sẽ không ghi đè lên cấu hình của bạn.

Trên các kết nối ethernet có dây, không nên có bất kỳ vấn đề nào. Tôi đã tìm thấy kể từ khi tôi sử dụng dnsmasq cho bộ nhớ đệm dns trên máy tính xách tay không dây mà tôi phải tự khởi động lại dnsmasq.service sau khi kết nối với điểm truy cập. Tôi nghĩ rằng Trình quản lý mạng có thể thực hiện các tác vụ như khởi động lại dịch vụ khi kết nối, nhưng tôi chưa xem xét điều đó.


0

Mặc dù tuyên bố ở đây và các nơi khác ngược lại, NetworkManager hoàn toàn bỏ qua bất kỳ và tất cả các tệp cấu hình dmsmasq - ngay cả những tệp trong thư mục riêng của nó /etc/NetworkManager/dnsmasq-shared.d. Bằng chứng là trong mã nguồn của NetworkManager ... Đây là nhận xét có liên quan:

/ * dnsmasq có thể đọc từ vị trí tệp cấu hình mặc định của nó, nếu vị trí đó là tệp cấu hình hợp lệ, nó sẽ kết hợp với các tùy chọn ở đây và gây ra tác dụng phụ không mong muốn. Giống như gửi địa chỉ IP không có thật làm cổng hoặc bất cứ điều gì. Vì vậy, nói với dnsmasq không sử dụng bất kỳ tập tin cấu hình nào cả. * /

Đây là liên kết đến mã nguồn có liên quan (dòng 139-144).


2
Một liên kết để trỏ đến mã nguồn để người đọc có thể xác nhận điều này và đọc mã liên quan sẽ hữu ích nếu có thể.
jamesc

1
Vì vậy, có, người ta không thể chỉ định một tập tin cấu hình rõ ràng. --conf-file được mã hóa cứng thành / dev / null. Tuy nhiên, nếu bạn nhìn vào dòng lệnh đầy đủ được sử dụng để bắt đầu dnsmasq thông qua Trình quản lý mạng, bạn sẽ thấy rằng conf-dir được sử dụng: '/ usr / sbin / dnsmasq --no-decv --keep-in-foreground --no-hosts --bind-giao diện --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-address = 127.0.0.1 --cache-size = 400 --clear-on-reload --conf-file = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d ', nghĩa là tất cả các tệp trong thư mục đã cho đều được đọc.
Hardy
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.