Я пытаюсь понять, как именно работает /etc/resolve.conf /etc/nsswitch.conf и какое значение имеет запись сервера имен 127.0.1.1
Я сделал strace ping google.com, чтобы узнать о задействованных системных вызовах, одна часть:
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=172, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.1.1")}, 16) = 0
gettimeofday({1413780874, 913366}, NULL) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
send(4, "\0040\1\0\0\1\0\0\0\0\0\0\6google\3com\0\0\1\0\1", 28, MSG_NOSIGNAL) = 28
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [204]) = 0
recvfrom(4, "\0040\201\200\0\1\0\v\0\0\0\0\6google\3com\0\0\1\0\1\300\f\0\1"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.1.1")}, [16]) = 204
close(4) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(1025), sin_addr=inet_addr("173.194.123.36")}, 16) = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(58830), sin_addr=inet_addr("192.168.1.13")}, [16]) = 0
close(4)
кто-нибудь может объяснить, что здесь происходит? специально подключитесь к 127.0.1.1, так как это запись namsserver в моем resolve.conf Почему нам нужно подключать сокет к 127.0.1.1? и как мы получим от него ответ?
127.XXX.XXX.XXX зарезервирован для обратной связи. Вы можете ping от 127.0.0.1 до 127.255.255.254, и вы отправляете ping-запрос себе. /Etc/resolv.conf - это файл конфигурации для DNS-преобразователя вашего компьютера (сообщает вашему компьютеру, где искать разрешение имени и IP).
В вашем случае преобразователь DNS оглядывается на себя в поисках разрешения имен. Это совершенно нормально, если вы используете DNS-сервер, такой как BIND DNS, однако имейте в виду, что DNS-сервер BIND будет запрашивать адреса, которые ему неизвестны (любая зона, которая не настроена на вашем собственном DNS-сервере BIND), используя root подсказки и разрешит общедоступный IP-адрес любого запрашиваемого имени.
При этом, если вы размещаете внутренний веб-сайт www.company.com на внутреннем IP-адресе 192.168.1.10 и пытаетесь пропинговать этот веб-сайт с этого сервера Linux, вы разрешите IP-адрес, указанный на вашем внешнем общедоступном DNS. сервер. Если:
У вас есть DNS-зона company.com, настроенная на DNS-сервере BIND с записью, указывающей на внутренний IP-адрес.
На вашем DNS-сервере BIND настроен перенаправитель, указывающий на внутренний DNS-сервер, который имеет внутреннюю DNS-запись для адреса www.company.com. (т.е. DNS-сервер Active Directory).
Вы настраиваете файл /etc/resolv.conf для использования внутреннего DNS-сервера вместо него самого. (Некоторые системы отличаются при редактировании этого файла. В Ubuntu вы должны отредактировать файл /etc/resolvconf/resolv.conf.d/base, чтобы конфигурация сохранялась после перезагрузки, если вы хотите редактировать файл resolv.conf)