Я установил Bind в качестве службы разрешения DNS в интрасети (работающей на Ubuntu 16.04.02 LTS).
Чего я хочу добиться: Наличие общедоступного доменного имени, которое указывает на сервер (пример: domain.com -> 1.2.3.4). Использование того же имени поддомена, которое указывает на внутренние машины (пример: machine1.domain.com -> 192.168.1.100)
Что я сделал: (конфигурация)
Файл: /etc/bind/ named.conf.options
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { 192.168.2.0/24; };
listen-on {192.168.2.4; };
allow-transfer { none; };
forwarders {
192.168.2.1; #router
8.8.8.8; #public dns
};
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
acl "truested" {
192.168.2.0/24;
192.168.2.4; # ns1
192.168.2.5; # ns2
};
Файл: /etc/bind/ named.conf.local
zone "domain.com" {
type master;
file "/etc/bind/zones/db.domain.com";
allow-transfer { 192.168.2.5;};
};
zone 2.168.192.in-addr.arpa {
type master;
file "/etc/bind/zones/db.2.168.192";
allow-transfer { 192.168.2.5; };
};
Файл: /etc/bind/zones/db.domain.com
$TTL 604800
@ IN SOA ns1.domain.com. root.domain.com. (
5 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers - NS Records
IN NS ns1.domain.com.
IN NS ns2.domain.com.
; name servers - A Records
ns1.domain.com. IN A 192.168.2.4
ns2.domain.com. IN A 192.168.2.5
; 192.168.2.0/24 - A Records
server.domain.com. IN A 192.168.2.120
server2.domain.com. IN A 192.168.2.121
ns1.domain.com. IN A 192.168.2.4
ns2.domain.com. IN A 192.168.2.5
Файл: /etc/bind/zones/db.2.168.192
$TTL 604800
@ IN SOA ns1.domain.com. root.domain.com. (
4 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers - NS Records
IN NS ns1.domain.com.
IN NS ns2.domain.com.
; PTR Records
4 IN PTR ns1.domain.com.
5 IN PTR ns2.domain.com.
120 IN PTR server.domain.com.
121 IN PTR server2.domain.com.
Проблема: Когда я выполняю поиск DNS с компьютера (установив в качестве DNS-сервера этот сервер "192.168.2.4)" для IP-адреса domain.com он не возвращает значение. Что, следовательно, не открывает веб-страницу внешнего сервера (domain.com).
Что мне нужно изменить, чтобы DNS-сервер работал так, как я хочу?
Почему бы не настроить переадресацию для зоны для domain.com и создайте новую зону для поддомена domain.com для которого локальный сервер имен является авторитетным?
В моем примере используется example.com вместо того domain.com ...
192.168.33.0/24 +--------------------------+ | | | | | Client 1 |192.168.33.1 | +----------------------+ | client1.corp.example.com |-------------- | | | | |192.168.33.5 | Corporate name server| +--------------------------+ --------------| ns1.corp.example.com | | | | | +----------------------+ +-------------------------+ | | | | |Server 1 | 192.168.33.2 | |server1.corp.example.com |--------------| | | | +------------+ +-------------------------+ |192.168.33.7 | | --------------- Router | | | | | +------|-----+ | | | |1.2.3.4 | | The Internet 1.2.3.5 /----- /-------------- | +------------------ | | | | 1.2.3.6 | WWW server | | | www.example.com | +------------|------------+ | | | | +-----------------+ | example.com name server | | ns.example.com | | | +-------------------------+
Вот конфиги:
/etc/bind/ named.conf.options:
options { directory "/var/cache/bind"; dnssec-validation auto; auth-nxdomain no; };
/etc/bind/ named.conf.local:
zone "example.com" { type forward; forwarders { 1.2.3.6; }; }; zone "corp.example.com" { type master; file "/etc/bind/db.corp.example.com"; }; zone 33.168.192.in-addr.arpa { type master; file "/etc/bind/db.192.168.33"; };
/etc/bind/db.db.corp.example.com:
$TTL 604800 $ORIGIN corp.example.com. @ IN SOA ns1.corp.example.com. admin.example.com. ( 5; 604800; 86400; 2419200; 604800; ) ; name servers IN NS ns1.corp.example.com. ; name servers ns1 IN A 192.168.33.5 ; hosts client1 IN A 192.168.33.1 server1 IN A 192.168.33.2 ns1 IN A 192.168.33.5
/etc/bind/db.192.168.33:
$TTL 604800 $ORIGIN 33.168.192.in-addr.arpa. @ IN SOA ns1.corp.example.com. admin.example.com. ( 4; 604800; 86400; 2419200; 604800; ) ; name servers IN NS ns1.corp.example.com. ; hosts 1 IN PTR client1.corp.example.com. 2 IN PTR server1.corp.example.com. 5 IN PTR ns1.corp.example.com.
Примечание: вам не хватает $ ORIGIN директива в вашем db.2.168.192 zone, но вы используете ярлыки в записях PTR RR.
Тест Nslookup с локальной установкой BIND (перенаправление на 8.8.8.8 для зоны example.com просто чтобы мы могли получить некоторые результаты):
> server 127.0.0.1 Default server: 127.0.0.1 Address: 127.0.0.1#53 > set type=ns > corp.example.com Server: 127.0.0.1 Address: 127.0.0.1#53 corp.example.com nameserver = ns1.corp.example.com.
> set type=a > server1.corp.example.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: server1.corp.example.com Address: 192.168.33.2
И для www.example.com:
> set type=a > www.example.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: www.example.com Address: 93.184.216.34
как было сказано, вам нужно разделить внутреннее адресное пространство и внешнее адресное пространство, например:
www.xyz.com в Интернете 1.1.1.1 (пример: P)
а www.xyz.com для внутреннего использования - 192.168.1.20 (пример)
вы не можете иметь одну и ту же точку хоста для двух разных адресов и ожидать, что получите один внутренний и один внешний, если вы не сделаете «просмотры».
вы по-прежнему можете подключиться к www.xyz.com, если IP-адрес является общедоступным, но тогда ваш маршрутизатор должен иметь возможность выполнять «жесткие» соединения, в основном он направляет трафик себе на свой открытый интерфейс. большинство маршрутизаторов не настроены на это. вы можете поддерживать 2 DNS, один внешний и один внутренний, и это имеет тот же эффект, что и представления.
у каждого корпоративного домена есть одна и та же проблема, так что это было сделано ;-)
На самом деле у вас нет записи A для domain.com нигде в вашей конфигурации.
Вы хотите добавить что-то вроде
A 192.168.2.120
A 192.168.2.121
как A записи чуть ниже (или чуть выше) ваших NS-записей. Это разрешит домен "domain.com" на два сервера.
(По разным причинам, хотя пара CNAME, указывающих на server1 и server2, была бы отличным ответом, в целом DNS этого не допускает.)
У вас есть записи A для всех серверов имен и хостов, но не для самого домена. Возможно, вам также понадобится запись MX для домена.