Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#902 closed defect (invalid)

сервер игнорирует AAAA ответы от DNS сервера

Reported by: s.safarov@… Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.8.x
Keywords: resolver Cc: gcc, version, 4.8.5, 20150623, (Red, Hat, 4.8.5-4), (GCC)
uname -a: Linux build.rcsnet.ru 3.10.0-327.4.4.el7.x86_64 #1 SMP Tue Jan 5 16:07:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.8.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.2d-fips 9 Jul 2015
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

Description

Не могу проксировать страницу на сервер у которого отсутствует IPv4 адрес.

Для воспроизведения проблемы необходимо:

  1. создать AAAA запись и не создавать A на DNS сервере;
  2. сконфигурировать виртуальный сервер как в примере ниже;
  3. проверить что не работает конфигурация.

Пример конфигурации виртуального сервера

server {
	listen       5984 default_server;
	server_name db.xcommnetwork.com;
	root         /usr/share/nginx/vhost/db.xcommnetwork.com;
	resolver 127.0.0.1 valid=5 ipv6=on;
	set $backend "virtual-db.app.xcommnetwork.com";

        location / {
		proxy_pass http://$backend;
        }
}

Пример вывода в логе NGINX

2016/02/16 12:50:57 [error] 34002#0: *41 virtual-db.app.xcommnetwork.com could not be resolved (3: Host not found), client: 127.0.0.1, server: db.xcommnetwork.com, request: "GET / HTTP/1.1", host: "127.0.0.1:5984"
2016/02/16 12:50:57 [error] 34002#0: *42 virtual-db.app.xcommnetwork.com could not be resolved (3: Host not found), client: 127.0.0.1, server: db.xcommnetwork.com, request: "GET / HTTP/1.1", host: "127.0.0.1:5984"
2016/02/16 12:50:58 [error] 34002#0: *43 virtual-db.app.xcommnetwork.com could not be resolved (3: Host not found), client: 127.0.0.1, server: db.xcommnetwork.com, request: "GET / HTTP/1.1", host: "127.0.0.1:5984"
2016/02/16 12:50:58 [error] 34002#0: *44 virtual-db.app.xcommnetwork.com could not be resolved (3: Host not found), client: 127.0.0.1, server: db.xcommnetwork.com, request: "GET / HTTP/1.1", host: "127.0.0.1:5984"

Пример вывода команды nslookup

[root@node2.app:1 ~]# nslookup -type=aaaa virtual-db.app.xcommnetwork.com
Server:		127.0.0.1
Address:	127.0.0.1#53

virtual-db.app.xcommnetwork.com	has AAAA address 2a03:5180:5:4::2

[root@node2.app:1 ~]# nslookup -type=a virtual-db.app.xcommnetwork.com
Server:		127.0.0.1
Address:	127.0.0.1#53

!** server can't find virtual-db.app.xcommnetwork.com: NXDOMAIN

Change History (1)

comment:1 by Sergey Kandaurov, 5 years ago

Resolution: invalid
Status: newclosed

Это следствие неверной конфигурации на стороне DNS-сервера.

В данном случае, поскольку такое имя существует (имеется RR A), то на запрос AAAA следует отвечать с нулевым rcode и нулевым количеством RR. Отвечать на такой запрос NXDOMAIN - признак неправильной конфигурации.

nginx при получении NXDOMAIN от любого из типов запроса (A или AAAA) трактует такой ответ как ошибку.

Ссылки для ознакомления:

https://www.ietf.org/rfc/rfc4074.txt

Version 0, edited 5 years ago by Sergey Kandaurov (next)
Note: See TracTickets for help on using tickets.