我已經安裝了 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
答案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
同時在備用檔案中提供其他主機資料。