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-резолвингом в прикладных программах?