我正在尝试设置 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
在服务器上添加任何主机时记得运行