Linux

如何讓 dnsmasq 私有名稱伺服器與 networkmanager 一起使用?

  • September 16, 2019

剛學網路。

我在 Mint-18 上。使用network-manager. dnsmasq已啟用。

我希望通過私有名稱伺服器解析以特定域名結尾的地址。

當我使用 dnsmasq 配置文件的選項添加私有名稱伺服器時server,一切都失敗了。我什至無法解析 google.com:

> nslookup google.com
;; connection timed out; no servers could be reache

如果我刪除該server選項並將相同的私有名稱伺服器添加到頂部\etc\resolve.conf,重新啟動網路管理器,一切都會再次執行,我可以解析私有主機名稱。

> nslookup abcprivate.net
Server:     nn.nn.nn.nn
Address:    nn.nn.nn.nn#53

Non-authoritative answer:
Name:   abcprivate.net
Address: mm.mm.mm.mm

所以我知道私有名稱伺服器是正確的。所以這一定是我配置dnsmasq的方式。

這是我的配置文件

>cat /etc/NetworkManager/dnsmasq.d/dnsmasq.conf
server=/abcprivate.net/nn.nn.nn.nn

其中 abcprivate.net 是專用網路的域,nn 是數字。

事實證明我的設置是正確的,但它們沒有被使用。

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

可以看出它沒有使用 conf 文件…我做了一些其他測試以確保是這種情況。


我確實最終解決了這個問題,但我做到了:

  • 禁用網路管理器 dnsmasq 外掛:註釋掉dns/etc/NetworkManager/NetworkManager.conf
  • 移動/etc/NetworkManager/dnsmasq.d/dnsmasq.conf/etc/dnsmasq.conf
  • 在 /etc/dnsmasq.conf 中添加一個 catch all 名稱伺服器(參見下面的文件列表)
  • 將 dnsmasq 地址添加到 /etc/resolve.conf 的頂部(通過更改/etc/resolvconf/resolv.conf.d/head文件…請參閱下面的文件列表)
  • 啟動 dnsmasq 使其不會讀取 resolve.conf: dnsmasq -d -R -q(我想在螢幕上記錄查詢,以便查看發生了什麼)。
  • 一個我一切正常我將dnsmasq封裝在一個systemD單元文件中

$ cat /etc/dnsmasq.conf
cache-size=1000
listen-address=127.0.1.1
server=8.8.8.8
server=/abcprivate.net/nn.nn.nn.nn
cache-size=1000

$ cat /etc/resolvconf/resolv.conf.d/head    
nameserver 127.0.1.1

$ cat /etc/systemd/system/dnsmasq.service
[Unit]
Description=SystemD - Dnsmasq is a Domain Name System (DNS) forwarder
Requires=network-manager.service

[Service]
Type=simple
ExecStart=/usr/sbin/dnsmasq -d -q -R

引用自:https://unix.stackexchange.com/questions/322741