кривые FQDN-резолвы в локальном домене (маленький вопрос про DNS)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модератор: SLEDopit

Ответить
Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux
Контактная информация:

кривые FQDN-резолвы в локальном домене

Сообщение infra_hdc »

Есть два DNS-сервера некоей локальной зоны и один линукс хост, последний -- на Debian 7.0 AMD64. Проблема в том, что не при всех обстоятельствах происходит резолвинг хостов этой локальной зоны:
1. Будем рассматривать ковыряние только в линукс хосте
2. Изначальное содержимое его /resolv.conf имеет какой-то такой вид
$ cat /etc/resolv.conf

Код: Выделить всё

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.a.b
nameserver 192.168.a.c
nameserver 1.11.111.2

где 192.168.a.b 192.168.a.c -- наши сервера DNS, на которых хостится наша локальная зона dom01, а 1.11.111.2 -- некий внешний сервер для резолва для Интернета,
3. Что работает практически при всех обстоятельствах
3.1. dig

Код: Выделить всё

$ dig host01.dom01.local

; <<>> DiG 9.8.4-P1 <<>> host01.dom01.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59478
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;host01.dom01.local.        IN    A

;; ANSWER SECTION:
host01.dom01.local.    1200    IN    A    192.168.a.d
host01.dom01.local.    1200    IN    A    192.168.e.f

;; Query time: 0 msec
;; SERVER: 192.168.a.b#53(192.168.a.b)
;; WHEN: Fri Jan 18 11:04:38 2013
;; MSG SIZE  rcvd: 67

3.2. host

Код: Выделить всё

$ host host01.dom01.local
host01.dom01.local has address 192.168.a.d
host01.dom01.local has address 192.168.e.f

3.3. Т.е. всё, что работает непосредственно с DNS-серверами, работает
4. Где начинаются проблемы
4.1. ping

Код: Выделить всё

$ ping host01.dom01.local
ping: unknown host host01.dom01.local

4.2. netcat

Код: Выделить всё

$ nc -vvv host01.dom01.local 80
nc: forward host lookup failed for remote endpoint host01.dom01.local: Имя или служба не известны

4.3. Соответственно, в более прикладных программах типа браузера фф также не резолвится

Код: Выделить всё

Сервер не найден







          Firefox не может найти сервер host01.dom01.local.





  Проверьте, не допущена ли ошибка при наборе адреса, например, ww.example.com вместо www.example.com
  Если ни одна страница не загружается – проверьте настройки соединения с Интернетом.
  Если компьютер или сеть защищены межсетевым экраном или прокси-сервером – убедитесь, что Iceweasel разрешён выход в Интернет.

4.4. смотрим трассировку
вывод команды

Код: Выделить всё

strace ping host01.dom01.local

даёт вот это

Код: Выделить всё

execve("/bin/ping", ["ping", "host01.dom01.local"], [/* 32 vars */]) = 0
brk(0)                                  = 0x21f7000
fcntl(0, F_GETFD)                       = 0
fcntl(1, F_GETFD)                       = 0
fcntl(2, F_GETFD)                       = 0
access("/etc/suid-debug", F_OK)         = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c9000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=115669, ...}) = 0
mmap(NULL, 115669, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9a290ac000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\357\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1595408, ...}) = 0
mmap(NULL, 3709016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9a28b22000
mprotect(0x7f9a28ca2000, 2097152, PROT_NONE) = 0
mmap(0x7f9a28ea2000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x180000) = 0x7f9a28ea2000
mmap(0x7f9a28ea7000, 18520, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9a28ea7000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290ab000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290aa000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290a9000
arch_prctl(ARCH_SET_FS, 0x7f9a290aa700) = 0
mprotect(0x7f9a28ea2000, 16384, PROT_READ) = 0
mprotect(0x7f9a290cb000, 4096, PROT_READ) = 0
munmap(0x7f9a290ac000, 115669)          = 0
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EPERM (Operation not permitted)
getuid()                                = 1000
setuid(1000)                            = 0
brk(0)                                  = 0x21f7000
brk(0x2218000)                          = 0x2218000
getpid()                                = 9310
open("/etc/resolv.conf", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=241, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
read(3, "# Dynamic resolv.conf(5) file fo"..., 4096) = 241
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=241, ...}) = 0
open("/etc/resolv.conf", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=241, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
read(3, "# Dynamic resolv.conf(5) file fo"..., 4096) = 241
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
open("/etc/nsswitch.conf", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=513, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
read(3, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 513
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=115669, ...}) = 0
mmap(NULL, 115669, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9a290ac000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200!\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=47616, ...}) = 0
mmap(NULL, 2143624, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9a28916000
mprotect(0x7f9a28921000, 2093056, PROT_NONE) = 0
mmap(0x7f9a28b20000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa000) = 0x7f9a28b20000
close(3)                                = 0
mprotect(0x7f9a28b20000, 4096, PROT_READ) = 0
munmap(0x7f9a290ac000, 115669)          = 0
open("/etc/host.conf", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=9, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
read(3, "multi on\n", 4096)             = 9
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=241, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
read(3, "127.0.0.1\tlocalhost\n192.168.x.yy"..., 4096) = 241
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=115669, ...}) = 0
mmap(NULL, 115669, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9a290ac000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \v\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=9800, ...}) = 0
mmap(NULL, 2105016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9a28714000
mprotect(0x7f9a28716000, 2093056, PROT_NONE) = 0
mmap(0x7f9a28915000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7f9a28915000
close(3)                                = 0
munmap(0x7f9a290ac000, 115669)          = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 3
fcntl(3, F_GETFD)                       = 0
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
connect(3, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(3, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9a290c8000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "RESOLVE-HOSTNAME-IPV4 host01.dom"..., 40) = 40
read(3, "-15 Timeout reached\n", 4096)  = 20
close(3)                                = 0
munmap(0x7f9a290c8000, 4096)            = 0
write(2, "ping: unknown host host01.dom01."..., 37ping: unknown host host01.dom01.local
) = 37
exit_group(2)                           = ?

5. Вот что работает, но это не то, что нам надо:
5.1. делаем

Код: Выделить всё

# echo "search dom01.local" >>/etc/resolv.conf

5.2. после чего проходит резолв по хостнейму

Код: Выделить всё

$ ping -c 4 host01
PING host01.dom01.local (192.168.a.d) 56(84) bytes of data.
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=1 ttl=128 time=5.17 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=2 ttl=128 time=0.264 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=3 ttl=128 time=0.262 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=4 ttl=128 time=0.215 ms


5.3. но -- не по FQDN, по которому всё та же картина

Код: Выделить всё

$ ping -c 4 host01.dom01.local
ping: unknown host host01.dom01.local

6. ВНИМАНИЕ, ВОПРОС:
Как сделать так, чтобы не было проблем с FQDN-резолвингом в прикладных программах?
Спасибо сказали:
Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux
Контактная информация:

Re: кривые FQDN-резолвы в локальном домене

Сообщение infra_hdc »

lastpriot писал(а):
18.01.2013 12:49
возможно виноват avahi
andrewgdotcom.wordpress.com


Да, Вы правы, спасибо:

редактирование файла /etc/nsswitch.conf
а именно замена строки

Код: Выделить всё

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4


на строку + закомментирование старой

Код: Выделить всё

hosts:          files mdns4_minimal dns mdns4
#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4


решила проблему:

Код: Выделить всё

$ ping -c 4 host01.dom01.local
PING host01.dom01.local (192.168.a.d) 56(84) bytes of data.
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=1 ttl=128 time=0.502 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=2 ttl=128 time=0.264 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=3 ttl=128 time=0.256 ms
64 bytes from host01.dom01.local (192.168.a.d): icmp_req=4 ttl=128 time=0.264 ms


просто глаза разбегались, где рыть все эти конфиги

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

спасибо :clap: :)
Спасибо сказали:
Ответить