我正在嘗試設定 dnsmasq,以便我可以透過 OpenVPN 伺服器建立自訂主機名稱。這樣,當機器連接時,主機名稱將指向位於 OpenVPN 主機或網路上的資源。
例如,伺服器上的 /etc/hosts 檔案如下所示:
db.private.resource 10.8.0.1
app.private.resource 10.8.0.1
讓客戶端使用隧道進行 DNS 查找非常簡單。在 server.conf 檔案中我有:
push "dhcp-option DNS 10.8.0.1"
在客戶端配置中我有:
dhcp-option DNS 10.8.0.1
我可以透過執行以下命令來驗證用戶端在連線時是否使用 OpenVPN 作為其 DNS:
# dnsmasq --no-daemon -q
在命令列上,從用戶端執行 ping 操作,以驗證用戶端確實透過隧道向 OpenVPN 伺服器發送 DNS 查找請求,而 OpenVPN 伺服器確實正在處理這些請求。
問題是,當我嘗試 pingdb.private.resource
我定義的主機時,我得到:
dnsmasq: query[A] db.private.resource from 10.8.0.2
dnsmasq: config db.private.resource is NXDOMAIN
來自 dnsmasq 的輸出。因此,出於某種原因,它似乎沒有傳回我在 /etc/hosts 中定義的值。令我驚訝的是,即使我運行 dnsmasq 並添加了地址參數,我仍然得到上述結果。
# dnsmasq --no-daemon -q --address=/db.private.resource/10.8.0.1/
dnsmasq: query[A] db.private.resource from 10.8.0.2
dnsmasq: config db.private.resource is NXDOMAIN
從這個結果來看,有什麼地方不對嗎?
答案1
首先安裝 dnsmasq:
sudo apt-get update; sudo apt-get install dnsmasq
。
伺服器
在伺服器上,將此行新增至/etc/dnsmasq.conf
:
...
expand-hosts #Uses /etc/hosts on this machine for resolution
bind-interfaces #will bind on all available interfaces, including the openvpn one
listen-address=10.8.0.1 # i noticed recently that i also need to add this line, because by default it will only listen on 10.9.0.1 which isnt pushed to my clients
...
然後,/etc/hosts
使用您的主機名稱編輯該檔案。最後,運行sudo /etc/init.d/dnsmasq restart
。
如果您出於某種原因不想編輯/etc/hosts
,可以在 處創建一個新文件/etc/dnsmasq.conf.d/addresses.conf
,並用您的地址填充它:
address=/umomma.com/69.69.69.69
address=/oo.umomma.com/69.69.69.60
address=/ooooo.umomma.com/69.69.69.62
address=/ooooooooo.umomma.com/69.69.69.65
使用第二種方法,您還需要追趕sudo /etc/init.d/dnsmasq restart
。
客戶
OpenVPN 伺服器通常會自行分配 IP 位址10.8.0.1
或10.9.0.1
.因此,在客戶端,我們需要確保首先查詢這些名稱伺服器。
至少現在,我/etc/resolv.conf
在客戶端進行編輯,並將其添加nameserver 10.8.0.1
到文件的第一行。因此,在客戶端上,我的完整resolve.conf如下所示:
nameserver 10.8.0.1
nameserver 8.8.8.8
nameserver 8.8.8.8
nameserver 127.0.1.1
若要使這些變更在重新啟動時持續,請在 處進行相同的變更/etc/resolvconf/resolv.conf.d/head
。
也
sudo /etc/init.d/dnsmasq restart
請記住在伺服器上新增任何主機時運行