4

当用户连接到我们的 VPN (OpenVPN) 时,我只需要设置一个 DNS 服务器来解析我们的网络服务器的名称。我可以成功地将 DNS 服务器的 IP 地址“推送”到客户端。我错觉使用 Bind9 为本地网络设置 DNS 服务器很容易。我错了。首先,我从 Google 找到的每个样本都是基于完全限定的域,而不是本地名称。我所说的本地名称类似于“server1”,而不是“server1.my.company.com”。但我发现了著名的“@”。

现在我有另一个问题。当我用“ping”或“nslookup”尝试“server1”时,它完全符合我的要求。它将“server1”解析为我们的内部 IP。伟大的。但是当我尝试“www.google.com”时,它无法解析 IP。这意味着客户端尝试使用我的 DNS 服务器而不是仍在 DNS 服务器列表中的互联网提供商 DNS 服务器来解决“www.google.com”。

有没有办法告诉客户端机器:我不认识这个人,见其他人?

我注意到“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 服务器吗?我已经通过更改选项文件中的“转发器{...}”进行了尝试,但它不起作用。而且我不喜欢通过 VPN 进行所有 DNS 解析的想法。你有解决方案吗 ?

4

3 回答 3

3

您实际上也可以让您的内部 DNS 服务器解析外部域。那应该可以解决您的问题。我解决了完全相同的问题,并为我的内部 DNS 使用了dnsmasq

在尝试了自己的内部 DNS 后,我通过将 VPN 网关机器上的 DNS 服务器设置为使用谷歌 DNS 解决了这个问题。所以 /etc/resolv.conf 中的 DNS 配置看起来像:

nameserver 127.0.0.1
nameserver 8.8.8.8
于 2012-06-22T01:38:08.213 回答
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 服务器解析。

于 2012-06-22T21:06:17.410 回答
1

要进行无法响应其他名称服务器的绑定转发查询,您需要将其他 DNS 服务器的 IP地址放在/etc/bind/named.conf.options.

此部分在您的文件中被注释掉,因此 Bind 不知道将查询转发到哪里。

// forwarders {
//      0.0.0.0;
// };

例如,您可以使用 ISP 的 DNS 服务器或 Google 公共 DNS 服务器:

forwarders {
       //Google public DNS
       8.8.8.8;
       8.8.4.4;
};

您可以在此部分中添加任意数量的条目。

于 2012-06-22T01:37:12.210 回答