我需要设置DNS服务器,以便在用户连接我们的VPN(OpenVPN)时解析网络服务器的名称。我可以成功地将DNS服务器的IP地址“推送”到客户端。我有一种错觉,即使用Bind9为本地网络设置DNS服务器很容易。我错了。首先,我从Google找到的每个样本都基于完全合格的域名,而不是本地名称。我称之为本地名称的是“server1”,而不是“server1.my.company.com”。但我发现了着名的“@”。
现在我有另一个问题。当我用“ping”或“nslookup”尝试“server1”时,它完全符合我的要求。它将“server1”解析为我们的内部IP。大。但是,当我尝试“www.google.com”时,它无法解析IP。这意味着客户尝试使用我的DNS服务器解决“www.google.com”,而不是仍然在DNS服务器列表中的互联网提供商DNS服务器。
有没有办法告诉客户端机器:我不认识这个人,看到别人?
我注意到默认情况下“auth-nxdomain”设置为“no”。我试图将其设置为“是”,但它不能完成这项工作。
在Ubuntu 9.04下有Bind9的配置文件:
/etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
//auth-nxdomain no; # conform to RFC1035
auth-nxdomain yes;
listen-on-v6 { any; };
// To prevent the error ";; Got recursion not available from 10.8.0.1, trying next server"
allow-recursion { 10.8.0.0/24; };
};
/etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
// This is the zone definition.
zone "@" {
type master;
file "/etc/bind/zones/vpn.db";
};
// This is the zone definition for reverse DNS.
zone "0.8.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/rev.0.8.10.in-addr.arpa";
};
/etc/bind/zones/vpn.db
@ IN SOA vpn.local. admin.local. (
2011041608 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ; Negative Cache TTL
);
@ IN NS vpn.local.
server1 IN A 10.8.0.1
/etc/bind/zones/rev.0.8.10.in-addr.arpa
@ IN SOA vpn.local. admin.local. (
2011041608 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ; Negative Cache TTL
);
@ IN NS vpn.local.
1 IN PTR mrsvn
我对“SOA”一无所知。我从一个例子中复制了这些数字。我不确定“vpn.local”。和“admin.local。”。无论如何,DNS服务器工作。因为我必须做很多事情,所以在能够执行如此简单的任务之前,我没有时间阅读1000页的文本。我是否需要将请求转发到服务器端的自己的DNS服务器?我通过在选项文件中更改“forwarders {...}”来尝试它,但它不起作用。我不喜欢通过VPN完成每个DNS解析的想法。你有解决方案吗?
答案 0 :(得分:3)
您实际上也可以让内部DNS服务器解析外部域。那应该可以解决你的问题。我处理了完全相同的问题,并使用dnsmasq作为我的内部DNS。
我通过设置VPN网关机器上的DNS服务器在尝试使用谷歌DNS后自己的内部DNS解决了这个问题。所以/etc/resolv.conf中的DNS配置看起来像:
nameserver 127.0.0.1
nameserver 8.8.8.8
答案 1 :(得分:3)
我找到了解决方案。首先,在我将区域定义为根区域之前,转发器没有参与。区域“@”指的是区域“。”,它是根区域。当我发现它时,经过一些反思后,我记得DNS客户端可以配置哪些搜索域。
首先,我更改了文件的以下行 /etc/bind/named.conf.local :
zone "@" {
到
zone "vpn.my.company.com." {
之后,对于 /etc/bind/zones/vpn.db 和 /etc/bind/zones/rev.0.8.10.in-addr.arpa 我已经取代了“vpn.local”。通过“vpn.my.company.com”。和“admin.local”。通过“admin.my.company.com”。
最后,在OpenVPN的配置文件中,我添加了以下行:
push "dhcp-option DOMAIN vpn.my.company.com"
我重新启动了所有东西......就是这样!现在一切都解决了。
编辑:我已阻止其他域的名称解析然后由VPN'DNS服务器在 /etc/bind/named.conf 文件中执行此操作:
// prime the server with knowledge of the root servers
zone "." {
type master;
//type hint;
file "/etc/bind/db.root";
allow-query { 127.0.0.0/8; 192.168.0.0/16; };
};
这样,其他域就可以从客户端的Internet提供商DNS服务器中解析出来。
答案 2 :(得分:1)
要进行绑定转发查询,它无法应答其他名称服务器,您需要将其他DNS服务器的IP地址放在/etc/bind/named.conf.options
的转发器部分。
此部分已在您的文件中注释掉,因此Bind不知道转发查询的位置。
// forwarders {
// 0.0.0.0;
// };
例如,您可以使用ISP的DNS服务器或Google Public DNS服务器:
forwarders {
//Google public DNS
8.8.8.8;
8.8.4.4;
};
您可以根据需要在此部分中添加任意数量的条目。