Linux
如何讓 dnsmasq 私有名稱伺服器與 networkmanager 一起使用?
剛學網路。
我在 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