ISC bind/named: включаем принудительно IPv4 для slave/resolving

Недавно столкнулся с ситуацией, когда идёт запрос на bind, а он должен forward’ить запросы определённой зоны дальше. И тут начинается интересное: приходит запрос на А-запись, а bind forward’ит её дальше уже как АААА-запись. Через tcpdump это выглядит так:


IP 192.168.1.137.61275 > 192.168.1.1.53: 8461+ A? srv2304.domain.local. (40)
IP 192.168.1.1.61034 > 192.168.1.50.53: 7530+ AAAA? srv2304.domain.local. (40)
IP 192.168.1.50.53 > 192.168.1.1.61034: 7530* 0/1/0 (98)


Всяческие попытки выключить ipv4 в самом bind’e или в OS не увенчались успехом, да и наверное это неверный подход. Гугление подсказало, что на этот случай есть опция filter-aaaa. Но и тут есть нюансы:

9.7.0b2

Add optional filter-aaaa-on-v4 option, available if built with ‘./configure —enable-filter-aaaa’. Filters out AAAA answers to clients connecting via IPv4.

Until BIND 9.12, this feature was implemented  natively  in  named  and enabled  with  the  filter-aaaa  ACL and the filter-aaaa-on-v4 and fil-ter-aaaa-on-v6 options.

9.13.7

The filter-aaaa, filter-aaaa-on-v4, and filter-aaaa-on-v6 options have been removed from named, and can no longer be configured using native named.conf syntax. However, loading the new filter-aaaa.so and setting its parameters provides identical functionality.

Если кратко, то если у вас bind версии 9.7.0b2<=bind<9.13.7, то вы можете использовать просто опцию filter-aaaa-on-v4 прямо в конфиге named.conf, а если у вас bind>9.13.7 (как в моём случае), то придётся указать, что подгружается модуль, иначе получите ругань и опция работать не будет:

# named-checkconf
/usr/local/etc/namedb/named.conf:47: option 'filter-aaaa-on-v4' is obsolete and should be removed

По умолчанию, она не везде включена (узнать это можно в выводе команды named -V). К примеру,

Debian:

  • Wheezy (7.X): пакет собран без поддержки filter-aaaa
  • Wheezy-Backports (7.X), 8.X и выше: поддержка присутствует

FreeBSD (отсутствует в выборе опций, поэтому нужно добавить вручную в Makefile)

Добавляем, примерно в это место, опцию —enable-filter-aaaa

...
CONFIGURE_ARGS= --disable-linux-caps \
                --localstatedir=/var \
                --sysconfdir=${ETCDIR} \
                --with-dlopen=yes \
                --enable-filter-aaaa \
                --with-libxml2 \
                --with-openssl=${OPENSSLBASE} \
                --with-readline="-L${LOCALBASE}/lib -ledit"
ETCDIR=         ${PREFIX}/etc/namedb
...

Переходим к настройке named.conf. Тут нужно добавлять, именно как plugin:

acl "internals" {127.0.0.1;10.0.0.0/8;};
...
view internal {
...
plugin query "filter-aaaa.so" {
filter-aaaa-on-v4 yes;
filter-aaaa-on-v6 no;
filter-aaaa { "internals"; };
};
...
}

Обязательно добавляем во view, иначе получите ругань:

# named-checkconf
/usr/local/etc/namedb/named.conf:15: when using 'view' statements, all plugins must be defined in views

Кратко по опциям и какие значения они могут принимать:
— filter-aaaa: список IP клиентов, для которых будет применяться эта фильтрация (по умолчанию — any)
— filter-aaaa-on-v4: если yes, тогда если запрос пришёл от клиента с IPv4 и ответ не содержит DNSSEC, то соответственно отбрасываются все записи АААА из ответа. Это не касается авторитетных ответов. Если значение break-dnssec, тогда отбрасываются все записи, независимо от того, есть ли в ответе DNSSEC.
— filter-aaaa-on-v6: аналогично и как и в случае ipv4, но касается запросов от клиентов ipv6

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *