Не удается разрешить домены во всех программах, кроме ping

У меня есть сервер для использования HPC, и это RedHat. Кажется, есть странная ошибка. Я старался:

$ curl https://www.aliyun.com/ -vv Couldn't resolve host 'www.aliyun.com' 

Я попробовал это также:

  • wget https://www.aliyun.com/
  • git clone https://github.com/my_username/my_repo
  • telnet www.aliyun.com 80
  • nc www.aliyun.com 80 , и т.д …

Все они выдают похожую ошибку getaddrinfo: Name or service not known. , Если я использую IP-адрес напрямую, все в порядке. (Пример: wget https://140.205.34.3/ --no-check-certificate ) Однако я могу успешно ping www.aliyun.com .

Я пробовал curl http://localhost/ и он работает хорошо (localhost – это домен, указанный в /etc/hosts ).

Кто, вероятно, виновник? Есть ли у вас подобный опыт и помогаете ли вы?

/etc/resolv.conf прикреплен здесь:

 nameserver 11.11.4.1 nameserver 202.114.0.242 nameserver 8.8.8.8 nameserver 202.112.20.131 

uname -a результат:

 Linux node111 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux 

lsb_release -a результат:

 LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: RedHatEnterpriseServer Description: Red Hat Enterprise Linux Server release 6.2 (Santiago) Release: 6.2 Codename: Santiago 

ip -a результат: (InfiniBand включен)

 1: lo:  mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0:  mtu 1500 qdisc mq state UP qlen 1000 link/ether 00:e0:81:e1:15:8d brd ff:ff:ff:ff:ff:ff inet 11.11.0.111/16 brd 11.11.255.255 scope global eth0 inet6 fe80::2e0:81ff:fee1:158d/64 scope link valid_lft forever preferred_lft forever 3: eth1:  mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 00:e0:81:e1:15:8e brd ff:ff:ff:ff:ff:ff 4: ib0:  mtu 2044 qdisc pfifo_fast state UP qlen 256 link/infiniband 80:00:00:48:fe:80:00:00:00:00:00:00:46:d2:c9:20:00:00:38:b1 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff inet 10.10.0.111/16 brd 10.10.255.255 scope global ib0 inet6 fe80::46d2:c920:0:38b1/64 scope link valid_lft forever preferred_lft forever 5: virbr0:  mtu 1500 qdisc noqueue state UNKNOWN link/ether 52:54:00:7f:dc:4b brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 6: virbr0-nic:  mtu 1500 qdisc noop state DOWN qlen 500 link/ether 52:54:00:7f:dc:4b brd ff:ff:ff:ff:ff:ff 

ПРИМЕЧАНИЕ. У меня нет привилегий суперпользователя.

Содержимое /etc/nsswitch.conf :

 # # /etc/nsswitch.conf # # An example Name Service Switch config file. This file should be # sorted with the most-used services at the beginning. # # The entry '[NOTFOUND=return]' means that the search for an # entry should stop if the search in the previous entry turned # up nothing. Note that if the search failed due to some other reason # (like no NIS server responding) then the search continues with the # next entry. # # Valid entries include: # # nisplus Use NIS+ (NIS version 3) # nis Use NIS (NIS version 2), also called YP # dns Use DNS (Domain Name Service) # files Use the local files # db Use the local database (.db) files # compat Use NIS on compat mode # hesiod Use Hesiod for user lookups # [NOTFOUND=return] Stop searching if not found so far # # To use db, put the "db" in front of "files" for entries you want to be # looked up first in the databases # # Example: #passwd: db files nisplus nis #shadow: db files nisplus nis #group: db files nisplus nis passwd: files ldap shadow: files ldap group: files ldap #hosts: db files nisplus nis dns hosts: files dns # Example - obey only what nisplus tells us... #services: nisplus [NOTFOUND=return] files #networks: nisplus [NOTFOUND=return] files #protocols: nisplus [NOTFOUND=return] files #rpc: nisplus [NOTFOUND=return] files #ethers: nisplus [NOTFOUND=return] files #netmasks: nisplus [NOTFOUND=return] files bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files rpc: files services: files netgroup: files ldap publickey: nisplus automount: files ldap aliases: files nisplus 

РЕДАКТИРОВАТЬ # 1

 $ getent hosts www.microsoft.com 218.58.101.49 e13678.ca.s.tl88.net www.microsoft.com www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net $ getent hosts www.aliyun.com 2400:3200:1300::3e v6wagbridge.aliyun.com.gds.alibabadns.com www.aliyun.com www-jp-de-intl-adns.aliyun.com www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com v6wagbridge.aliyun.com 

РЕДАКТИРОВАТЬ № 2

getent hosts www.aliyun.com работает довольно хорошо, но getaddrinfo сообщает, что name or service not known . (Проверено в этой простой C-программе )

РЕДАКТИРОВАТЬ № 3

Я пробовал dig и кажется, что DNS-сервер 11.11.4.1 не работает для глобального Интернета. Вот что я нашел.

 $ dig @11.11.4.1 www.aliyun.com ; <> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <> @11.11.4.1 www.aliyun.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 37272 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.aliyun.com. IN A ;; Query time: 1 msec ;; SERVER: 11.11.4.1#53(11.11.4.1) ;; WHEN: Mon Aug 20 14:48:37 2018 ;; MSG SIZE rcvd: 32 $ dig @1.1.1.1 www.aliyun.com ; <> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <> @1.1.1.1 www.aliyun.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64269 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.aliyun.com. IN A ;; ANSWER SECTION: www.aliyun.com. 113 IN CNAME www-jp-de-intl-adns.aliyun.com. www-jp-de-intl-adns.aliyun.com. 293 IN CNAME www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. 113 IN CNAME xjp.wagbridge.aliyun.aliyun.com. xjp.wagbridge.aliyun.aliyun.com. 89 IN CNAME xjp-adns.aliyun.com. xjp-adns.aliyun.com. 89 IN CNAME xjp-adns.aliyun.com.gds.alibabadns.com. xjp-adns.aliyun.com.gds.alibabadns.com. 89 IN A 47.88.251.164 ;; Query time: 223 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mon Aug 20 14:48:39 2018 ;; MSG SIZE rcvd: 256 

One Solution collect form web for “Не удается разрешить домены во всех программах, кроме ping”

Это сбивает с толку многих людей, но команда ping имеет свои собственные интеграции с файлом /etc/resolv.conf тогда как другие упомянутые вами инструменты используют средство переключения сервера имен. Это можно увидеть, запустив strace и проанализировав выходные данные библиотек, с которыми взаимодействуют команды.

Например, вот ping :

 $ strace ping -c 3 www.aliyun.com |& grep -E "ns|resolv" open("/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 

И вот curl :

 $ strace curl -v www.aliyun.com |& grep -E "ns|resolv" open("/lib64/libnss3.so", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libnssutil3.so", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libnspr4.so", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("47.88.251.161")}, 16) = -1 EINPROGRESS (Operation now in progress) getpeername(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("47.88.251.161")}, [16]) = 0 getsockname(3, {sa_family=AF_INET, sin_port=htons(55876), sin_addr=inet_addr("10.0.2.15")}, [16]) = 0 

Возможно, вам интересно, но подождите, они оба показывают вызов libresolv , так в чем же проблема? Причина, по которой curl даже знает, как обращаться к libresolv заключается в том, что он был направлен на это. Зачем? Из-за этого файла:

 $ grep host /etc/nsswitch.conf #hosts: db files nisplus nis dns hosts: files dns myhostname 

Ссылка hosts: в этом файле говорит инструментам, которые делают вызовы NSS (Name Server Switch), что они должны сначала обратиться к files , а затем – к dns .

Ссылка на files означает использование файла /etc/hosts , а опция dns означает обращение к /etc/resolv.conf для DNS-сервера имен и поиск там имени хоста.

Ваша проблема

Так что ваша проблема, скорее всего, связана с тем, что в файле /etc/nsswitch.conf отсутствует запись dns как я показал выше

Какие исполняемые файлы используют NSS?

Вы можете просмотреть исполняемые файлы, используя readelf который показывает, какие разделяемые библиотеки требуются исполняемому файлу.

 $ type -f curl curl is /bin/curl $ readelf -d /bin/curl | grep -i shared 0x0000000000000001 (NEEDED) Shared library: [libcurl.so.4] 0x0000000000000001 (NEEDED) Shared library: [libssl3.so] 0x0000000000000001 (NEEDED) Shared library: [libsmime3.so] 0x0000000000000001 (NEEDED) Shared library: [libnss3.so] 0x0000000000000001 (NEEDED) Shared library: [libnssutil3.so] 0x0000000000000001 (NEEDED) Shared library: [libplds4.so] 0x0000000000000001 (NEEDED) Shared library: [libplc4.so] 0x0000000000000001 (NEEDED) Shared library: [libnspr4.so] 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0] 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2] 0x0000000000000001 (NEEDED) Shared library: [libz.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] $ type -f ping ping is /bin/ping $ readelf -d /bin/ping | grep -i shared 0x0000000000000001 (NEEDED) Shared library: [libcap.so.2] 0x0000000000000001 (NEEDED) Shared library: [libidn.so.11] 0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.10] 0x0000000000000001 (NEEDED) Shared library: [libresolv.so.2] 0x0000000000000001 (NEEDED) Shared library: [libm.so.6] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 

Аналогичный метод можно использовать с ldd :

 $ ldd /bin/ping|grep -E "ns|resolv" libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd144d40000) $ ldd /bin/curl|grep -E "ns|resolv" libnss3.so => /lib64/libnss3.so (0x00007f9795413000) libnssutil3.so => /lib64/libnssutil3.so (0x00007f97951e4000) libnspr4.so => /lib64/libnspr4.so (0x00007f9794b9d000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f9792067000) 

DNS, кажется, работает

Если вы в состоянии выполнить эти команды, и они работают:

 $ getent hosts www.google.com 216.58.193.164 www.google.com $ getent hosts www.aliyun.com 47.88.198.17 xjp-adns.aliyun.com.gds.alibabadns.com www.aliyun.com 

Затем попробуйте использовать opennssl чтобы увидеть, можете ли вы подключиться к этим сервисам:

 $ true | openssl s_client -connect www.aliyun.com:443 depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2 depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "Alibaba (China) Technology Co., Ltd.", CN = *.aliyun.com 0 s:/C=CN/ST=ZheJiang/L=HangZhou/O=Alibaba (China) Technology Co., Ltd./CN=*.aliyun.com i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2 1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2 i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA subject=/C=CN/ST=ZheJiang/L=HangZhou/O=Alibaba (China) Technology Co., Ltd./CN=*.aliyun.com issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2 

Рекомендации

  • Переключатель сервера имен – Википедия
  • Проблема скорости контейнерной сети LXC
  • Несколько рабочих станций KVM Whonix
  • Как анализировать проблемы беспроводной сети?
  • Создайте точку доступа для «моста» между двумя беспроводными соединениями. Как должен выглядеть / etc / network / interfaces?
  • Имя или служба, не известная в подсети DHCP
  • Linux OpenWRT IPv6 Neighbor discovery
  • Есть ли способ включить сжатие заголовков UDP / IP для ссылок / интерфейсов PPP в Linux
  • HTTPS через прямое соединение Ethernet очень медленно
  • tcpdump / tshark: просмотр только исходящих запросов TCP-соединений
  • Arch i3wm действительный ip, проблема с DHCP
  • Как настроить vpn, чтобы он работал только на пользовательских URL в Linux
  • Interesting Posts

    X.org отсутствующие шрифты

    Как обрабатывать ключи в сценарии оболочки?

    Создайте один PDF-файл из нескольких (выбранных) изображений

    Sphinx Search shutdown down после `FATAL: accept () не удалось: Слишком много открытых файлов`

    Как вычесть строки (строки) с помощью AWK

    Ошибка при обновлении apt-get: недопустимы следующие подписи:

    Больше не может переключаться раскладки клавиатуры в xfce

    Права доступа к файлам Linux для другого пользователя с правами root для чтения и выполнения

    Нет / proc в распределенном дистрибутиве Linux на основе Busybox

    Как легко узнать, смонтировано ли какое-либо блочное устройство (или его часть)

    Изменить каталог команды

    Что называется синтаксисом bash '<(содержимое файла)?

    Как установить, какой загрузчик GRUB использовать после двойной загрузки двух ОС Linux?

    Драйверы Realtek предотвращают обнаружение интерфейса eth1?

    Как заставить gnome использовать одну и ту же клавиатуру для управления, как обычно?

    Linux и Unix - лучшая ОС в мире.