簡單回答

簡單回答

我已經安裝了 DNSMASQ,但由於 53 連接埠繁忙而無法啟動。

我發現 ubuntu 已經有 dnsmasq 包並且它正在工作。

現在的問題是......我只想能夠透過它解析 /etc/hosts 中的主機

即:nslookup somehostonlan localhost 解析為從/etc/hosts 檔案中取得的某個IP。

但這並沒有發生。

為什麼?順便說一句,作為一個快取 DNS 伺服器,它工作正常。我只是想讓它從 /etc/hosts 檔案解析主機,僅此而已

答案1

為了加快網路速度,ubuntu 12.04 在 NetworkManager 中新增了一個外掛程式來啟動 dnsmasq,這是一個快取 dns 條目的本機 dns 伺服器。問題是插件已硬編碼 --no-hosts 字串。

因此,一種解決方案是註解掉 NetworkManager 設定檔中載入插件的行並重新啟動 NetworkManager :

sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.bak | sed -e "s/^\(dns=dnsmasq\)$/#\1/" > /etc/NetworkManager/NetworkManager.conf'
sudo restart network-manager

另一個解決方案是包裝 dnsmasq 以過濾掉不需要的參數:

sudo mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bin
sudo bash -c 'cat > /usr/sbin/dnsmasq' << EOF
#!/bin/sh
dnsmasq=/usr/sbin/dnsmasq.bin

exec $dnsmasq `echo $@ | sed -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

請標記錯誤影響你。

另一種無需修補系統檔案的解決方案

cat /etc/NetworkManager/dnsmasq.d/hosts.conf 

addn-hosts=/etc/hosts

答案2

即使現在這個錯誤仍然影響著我(Ubuntu 14.04)。

最後我找到了一個解決方案,只需將這一行「addn-hosts=/etc/hosts」新增到Newworkmanager套件的dnsmasq設定檔中即可。

echo 'addn-hosts=/etc/hosts' > /etc/NetworkManager/dnsmasq.d/etc-hosts
service network-manager restart

我們的想法是,我們添加 /etc/hosts 作為附加主機檔案。

即使我能找到解決方案,二進位檔案 /usr/sbin/NetworkManager 中的硬編碼選項「--no-hosts」也讓我失望。

答案3

截至 2015 年 8 月,其他答案已過時。

簡單回答

  1. 創造/etc/NetworkManager/dnsmasq.d/hosts.conf
  2. 把像這樣的線放進address=/whatever/1.2.3.4去。看文件 (尋找--address)。可以使用通配符:address/.whatever./1.2.3.4.
  3. 殺死dnsmasq漏洞)。
  4. 重新啟動它:$ service network-manager restart.

答案4

dnsmasq 應該會自動使用該/etc/hosts檔案。這可以透過-h命令列選項或no-hosts配置選項來停用。我不希望在預設配置中設定任何一個。

嘗試強制 dnsmasq 重新載入其主機檔案。 (更改設定檔需要重新啟動)。這些命令中的任何一個都應該有效。

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

如果您正在使用已指定的系統,no-hosts您應該能夠使用該addn-hosts選項來覆寫它。通常,這將用於讀取/etc/hosts格式中的附加檔案。這可用於指定您希望 DNS 提供但不希望出現在檔案中的其他主機資料/etc/hosts。這可用於允許程式包管理器和相關工具進行管理,/etc/hosts同時在備用檔案中提供其他主機資料。

相關內容