Ошибка буфера Bind9 и MySQL DLZ

Я скомпилировал Bind 9 из исходного кода (см. Ниже) и настроил Bind9 с MySQL DLZ. Я все время получаю сообщение об ошибке, когда пытаюсь получить с сервера что-нибудь о переполнении буфера. Я много раз гуглил, но не могу найти ничего о том, как исправить эту ошибку.

Параметры настройки:

root @ anacrusis: /opt/bind9/bind-9.9.1-P3# named -V BIND 9.9.1-P3, созданный с помощью '--prefix = / opt / bind9' '--mandir = / opt / bind9 / man' '--infodir = / opt / bind9 / info' '--sysconfdir = / opt / bind9 / config' '--localstatedir = / opt / bind9 / var' '--enable-thread' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl = / usr' '--with-gssapi = / usr' '--with-gnu-ld' '--with-dlz-postgres = no' '--with-dlz-mysql = yes' '--with-dlz-bdb = no' '--with-dlz-filesystem = yes' '--with-dlz -stub = yes '' --with-dlz-ldap = yes '' --enable-ipv6 '' CFLAGS = -fno-strict-aliasing -DDIG_SIGCHASE -O2 '' LDFLAGS = -Wl, -Bsymbolic-functions '' CPPFLAGS = 'с использованием версии OpenSSL: OpenSSL 1.0.1 14 марта 2012 г. с использованием версии libxml2: 2.7.8

Это ошибка, которую я получаю, когда dig example.com (с отладкой):

Строка запроса: выберите ttl, type, mx_priority, случай, когда lower (type) = 'txt', затем concat ('"', data, '"'), иначе данные заканчиваются на dns_records, где zone = 'example.com' и host = ' @ '

17 сентября 2012 г. 01: 09: 33.610 dns_rdata_fromtext: buffer-0x7f5bfca73360: 1: неожиданный конец ввода 17 сентября 2012 г. 01: 09: 33.610 dns_sdlz_putrr вернул ошибку. Код ошибки: неожиданный конец ввода 17 сентября 2012 г. 01: 09: 33.610 Строка запроса: выберите ttl, type, mx_priority, случай, когда lower (type) = 'txt', затем concat ('"', data, '"' ) иначе данные заканчиваются на dns_records, где zone = 'example.com' и host = '*'

17-сен-2012 01: 09: 33.610 query.c: 2579: фатальная ошибка: 17-сен-2012 01: 09: 33.610 RUNTIME_CHECK (результат == 0) не удалось 17-сен-2012 01: 09: 33.610 выход (из-за до фатальной ошибки в библиотеке)

Named.conf

options {
    directory "/opt/bind9/";
    allow-query-cache { none; };
    allow-query { any; };
    recursion no;
};

dlz "Mysql zone" {
    database "mysql
    {host=localhost dbname=system ssl=false user=root pass=*password*}
    {select zone from dns_records where zone = '$zone$'}
    {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')
        else data end from dns_records where zone = '$zone$' and host = '$record$'}
    {}
    {}
    {}
    {}";
};

person Travis    schedule 16.09.2012    source источник


Ответы (3)


Вы запускаете именованный однопоточный (с параметром "-n 1")? В противном случае named выйдет из строя в разных местах при параллельной работе более чем с одним запросом, поскольку модуль MySQL DLZ не является потокобезопасным.

person Duncanthrax    schedule 15.01.2016

Вручную войдите в БД и запустите запрос. Посмотрите, что из этого получится. Ошибка говорит о неожиданном завершении ввода, что означает, что он ожидал получить что-то, но не получил этого. Итак, первым делом проверьте, сможете ли вы получить его вручную. Возможно, mysqld не работает. Возможно, пользователь не определен, или пароль установлен неверно, или разрешения для этой таблицы не предоставлены. Все это могло объяснить ошибку.

Assuming all this works then you have two options:

  • Включите больше журналов в вашем named.conf, чтобы у вас было больше данных для работы о том, что происходит
  • Удалите и переустановите BIND, убедившись, что все хэши совпадают во всех библиотеках и все зависимости установлены.

person Peter Oram    schedule 16.10.2012

Я получил Bind с DLZ, работающим на CentOS 7. Я не получаю сообщения об ошибке, с которой вы столкнулись.

Я понимаю, что это более старый пост, но я думал, что поделюсь своими файлами conf и настрою параметры.

Я использую Bind 9.11.0

настроить

 ./configure --prefix=/usr --sysconfdir=/etc/bind --localstatedir=/var --mandir=/usr/share/man --infodir=/usr/share/info --enable-threads --enable-largefile --with-libtool --enable-shared --enable-static --with-openssl=/usr --with-gssapi=/usr --with-gnu-ld --with-dlz-postgres=no --with-dlz-mysql=yes --with-dlz-bdb=no --with-dlz-filesystem=yes --with-dlz-stub=yes --enable-ipv6

named.conf

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
#auskommentiert !!!
#include "/etc/bind/named.conf.options";
#include "/etc/bind/named.conf.local";
#include "/etc/bind/named.conf.default-zones";


key "rndc-key" {
            // how was key encoded
            algorithm hmac-md5;
            // what is the pass-phrase for the key
                secret "noway";
             };


#options {
#default-key "rndc-key";
#default-server 127.0.0.1;
#default-port 953;
#};

controls {
inet * port 953 allow { any; } keys { "rndc-key"; };
#inet * port 53 allow { any; } keys { "rndc-key"; };
};



logging {
    channel query.log {
        file "/var/log/query.log";
        // Set the severity to dynamic to see all the debug messages.
        severity dynamic;
    };

    category queries { query.log; };
};


dlz "Mysql zone" {
   database "mysql
   {host=172.16.254.100 port=3306 dbname=dyn_server_db user=db_user pass=db_password}
   {SELECT zone FROM dyn_dns_records WHERE zone = '$zone$'}
   {SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data
    FROM dyn_dns_records
    WHERE zone = '$zone$' AND host = '$record$' AND type <> 'SOA' AND type <> 'NS'}
   {SELECT ttl, type, data, primary_ns, resp_person, serial, refresh, retry, expire, minimum
    FROM dyn_dns_records
    WHERE zone = '$zone$' AND (type = 'SOA' OR type='NS')}
   {SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_person, serial, refresh, retry, expire, minimum
    FROM dyn_dns_records
    WHERE zone = '$zone$' AND type <> 'SOA' AND type <> 'NS'}
   {SELECT zone FROM xfr_table where zone='$zone$' AND client = '$client$'}";
};
person Rahim Khoja    schedule 01.04.2017