Назад | Перейти на главную страницу

Debian Wheezy, привязка и общая конфигурация с представлениями

Последние пару дней я борюсь за то, чтобы bind работай. Я считаю, что у него очень общая конфигурация, но каким-то образом он не будет обслуживать правильный IP-адрес моего сервера для локальных клиентов, когда используется доменное имя (myho.st). Система - Debian Wheezy. named-checkconf не сообщает об ошибках.

Конфиги следующие:

/etc/bind/ named.conf:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.log";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

acl localhost_acl {
        127.0.0.1;
};

acl internal_10_acl {
        192.168.10.0/24;
};

/etc/bind/ named.conf.local:

include "/etc/bind/zones.rfc1918";

view "local_view" {

        match-clients { localhost_acl; internal_10_acl; };

        zone "myho.st" {
                type master;
                file "/etc/bind/db.myho.st";
        };

};

/etc/bind/zones.rfc1918:

view "global_view" {

        zone "10.in-addr.arpa"      { type master; file "/etc/bind/db.empty"; };

        zone "16.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "17.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "18.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "19.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "20.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "21.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "22.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "23.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "24.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "25.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "26.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "27.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "28.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "29.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "30.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
        zone "31.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };

};

/etc/bind/ named.conf.default-zones:

view "default_view" {

        // prime the server with knowledge of the root servers
        zone "." {
                type hint;
                file "/etc/bind/db.root";
        };

        // be authoritative for the localhost forward and reverse zones, and for
        // broadcast zones as per RFC 1912

        zone "localhost" {
                type master;
                file "/etc/bind/db.local";
        };

        zone "127.in-addr.arpa" {
                type master;
                file "/etc/bind/db.127";
        };

        zone "0.in-addr.arpa" {
                type master;
                file "/etc/bind/db.0";
        };

        zone "255.in-addr.arpa" {
                type master;
                file "/etc/bind/db.255";
        };

};

/etc/bind/ named.conf.log:

logging {
        channel update_debug {
                file "/var/log/bind/update_debug.log" versions 3 size 100k;
                severity debug;
                print-severity  yes;
                print-time      yes;
        };
        channel security_info {
                file "/var/log/bind/security_info.log" versions 1 size 100k;
                severity info;
                print-severity  yes;
                print-time      yes;
        };
        channel bind_log {
                file "/var/log/bind/bind.log" versions 3 size 1m;
                severity info;
                print-category  yes;
                print-severity  yes;
                print-time      yes;
        };

        category default { bind_log; };
        category lame-servers { null; };
        category update { update_debug; };
        category update-security { update_debug; };
        category security { security_info; };
};

/etc/bind/ named.conf.options:

options {

        directory "/var/cache/bind";
        dnssec-validation auto;
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { none; };
        listen-on {
                127.0.0.1;
                192.168.10.1;
        };
        allow-transfer { none; };
        allow-query { localhost_acl; internal_10_acl; };

};

и наконец /etc/bind/db.myho.st:

$TTL    3h
@       IN      SOA     ns.myho.st. hostmaster.myho.st. (
                          4        ; Serial
                          3h       ; Refresh after 3 hours
                          1h       ; Retry after 1 hour
                          1w       ; Expire after 1 week
                          1h )     ; Negative caching TTL of 1 day
;
@               IN      NS      ns.myho.st.

@               IN      A       192.168.10.1
ns              IN      A       192.168.10.1

named-checkzone myho.st /etc/bind/db.myho.st не сообщает об ошибках.

Мои клиенты в 192.168.10.0/24 подсеть и все они могут пинговать 192.168.10.1, который является IP-адресом сервера. Но myho.st Доменное имя разрешается через DNS интернет-провайдера на глобальный IP-адрес, но похоже, что оно обслуживается моим сервером:

user@client:~$ nslookup myho.st
Server:         192.168.10.1
Address:        192.168.10.1#53

Non-authoritative answer:
Name:   myho.st
Address: *some global IP*

Очевидно, я пропустил некоторые важные настройки в named.conf*, но я не могу понять, какой именно. Наверное, views не настроены должным образом. Пожалуйста, порекомендуйте.

Важно понимать, что каждый запрос попадет точно в одно представление и это первое представление, соответствующее входящему запросу (на основе match-*).

У вас есть три представления, два из которых не имеют никаких требований относительно того, какие запросы будут соответствовать.

Это приводит к ситуации, когда в зависимости от того, как упорядочены представления, одно или два представления не могут быть запрошены никем.

Если либо ваш default_view или ваш global_view представления идут первыми по порядку, затем все запросы будут входить в это представление, оставив два оставшихся представления недоступными.

Если ваш local_view сначала просмотр, затем адреса не совпадают match-clients { localhost_acl; internal_10_acl; }; может запросить первый из default_view или global_view но последняя точка зрения остается недостижимой.

Другой аспект этого заключается в том, что в этом последнем примере запросы, которые действительно соответствуют local_view не будет видеть какие-либо зоны в других представлениях, даже если у них нет особых требований к запросу.


В общем, введение представлений в эту конфигурацию по умолчанию, предоставляемую дистрибутивом, на самом деле не должно производиться по принципу «одно представление на файл», а вместо этого следует иметь в виду вышеизложенное.

Из того, что я вижу, названия ваших частей конфигурации вводят в заблуждение (кроме того, я могу сказать, что традиция Debian разделять один приличный файл конфигурации на более чем 9000 включений, вводит в заблуждение и в целом контрпродуктивна).

Учитывая этот:

view clauses are processed in the order in which they appear in the named.conf file.
Thus, in the example above the 'badguys' view clause matching condition (any) also 
satisfies the 'trusted' view matching condition. However, since 'trusted' appears first
its matching condition is the first to be satisfied and view matching stops.

Я могу сказать что твой global_view обрабатывается в первую очередь, поэтому ваши местные клиенты сопоставляют его. Переместите include "/etc/bind/zones.rfc1918"; (и да, это вводящее в заблуждение название включить) после local_view Посмотреть.