Назад | Перейти на главную страницу

Wget, Curl, Yum не работают, но Ping работает - CentOS 5

В настоящее время у нас есть три веб-сервера.

Первый и второй серверы работают нормально, а вот с третьим у меня проблемы.

wget, curl и yum все не могут установить свои соединения - то есть все они зависают после разрешения хоста и попытки соединения.

Пример (я пробовал много разных URL):

# wget http://rpm.pbone.net/index.php3/stat/4/idpl/13941547/dir/centos_5/com/httpd-2.2.3-43.el5.centos.i386.rpm.html
--2010-09-02 20:00:26--  http://rpm.pbone.net/index.php3/stat/4/idpl/13941547/dir/centos_5/com/httpd-2.2.3-43.el5.centos.i386.rpm.html
Resolving rpm.pbone.net... 85.14.85.4
Connecting to rpm.pbone.net|85.14.85.4|:80... 

... повесить

# curl -v http://rpm.pbone.net/index.php3/stat/4/idpl/13941547/dir/centos_5/com/httpd-2.2.3-43.el5.centos.i386.rpm.html
* About to connect() to rpm.pbone.net port 80
*   Trying 85.14.85.4... 

... повесить

#yum -d9 update
Loading "fastestmirror" plugin
Config time: 0.052
Running "init" handler for "fastestmirror" plugin
Yum Version: 3.2.22
COMMAND: yum -d9 update 
Installroot: /
Setting up Package Sacks
Running "postreposetup" handler for "fastestmirror" plugin
Loading mirror speeds from cached hostfile

... повесить

но:

# ping rpm.pbone.net
PING gepard.pbone.net (85.14.85.4) 56(84) bytes of data.
64 bytes from gepard.pbone.net (85.14.85.4): icmp_seq=1 ttl=49 time=449 ms
64 bytes from gepard.pbone.net (85.14.85.4): icmp_seq=2 ttl=49 time=448 ms
64 bytes from gepard.pbone.net (85.14.85.4): icmp_seq=3 ttl=49 time=444 ms
64 bytes from gepard.pbone.net (85.14.85.4): icmp_seq=4 ttl=49 time=445 ms
64 bytes from gepard.pbone.net (85.14.85.4): icmp_seq=5 ttl=49 time=457 ms

Я далек от эксперта по серверам, есть ли у кого-нибудь указания, с чего начать решать эту проблему?

РЕДАКТИРОВАТЬ:

# netstat -lan | egrep LISTEN
tcp        0      0 0.0.0.0:941                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
unix  2      [ ACC ]     STREAM     LISTENING     7451   /tmp/.font-unix/fs7100
unix  2      [ ACC ]     STREAM     LISTENING     7678   @/tmp/fam-root-
unix  2      [ ACC ]     STREAM     LISTENING     5824   @/var/run/hald/dbus-3hUBzR5e9e
unix  2      [ ACC ]     STREAM     LISTENING     5087   /var/run/audispd_events
unix  2      [ ACC ]     STREAM     LISTENING     5825   @/var/run/hald/dbus-rDLe61j4bM
unix  2      [ ACC ]     STREAM     LISTENING     5545   /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     5616   /var/run/sdp
unix  2      [ ACC ]     STREAM     LISTENING     5749   /var/run/pcscd.comm
unix  2      [ ACC ]     STREAM     LISTENING     5782   /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     7075   /var/run/cups/cups.sock
unix  2      [ ACC ]     STREAM     LISTENING     7585   /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     7389   /dev/gpmctl

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
RH-Firewall-1-INPUT  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            icmp any 
ACCEPT     esp  --  anywhere             anywhere            
ACCEPT     ah   --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

У вас есть правила брандмауэра, которые блокируют исходящий порт 80 или отклоняют ответный входящий ответ. Это могут быть правила программного брандмауэра, которые могут блокировать порт 80 отдельно или весь TCP (PING - это ICMP), проверьте с помощью:
iptables -L как указала ErikA выше.
Это также может быть проблема аппаратного брандмауэра - находится ли сервер за брандмауэром Cisco? Проконсультируйтесь с вашим системным администратором. Если вы можете завить с других машин, у них: 80 открытых. Также возможно, но маловероятно, что они блокируют вас на их стороне, но если вы не можете ничего скрутить (даже гугл), это ваша сторона.

Что ж, ping использует ICMP, тогда как все эти HTTP-клиенты используют TCP-порт 80. Может ли он быть заблокирован между вашим источником и местом назначения?

В моем случае проблема была вызвана устаревшим кешем DNS. Помогло следующее:

# service nscd restart

Как мне проверить, что что-то прослушивает порт 80, и что нет правил брандмауэра, которые блокировали бы трафик на oprt 80 с IP, с которого я тестирую?

  • netstat -anp
  • iptables -vL

Убедитесь, что что-то прослушивает порт 80, а также что нет правил брандмауэра, которые блокировали бы трафик на порт 80 с IP-адреса, с которого вы тестируете.

Чтобы проверить, прослушивает ли что-то порт 80, запустите с самого веб-сервера следующее:

$ netstat -lan | egrep LISTEN

Если в выводе вы видите такую ​​строку, значит, что-то прослушивает порт 80.

tcp        0      0 0.0.0.0:80            0.0.0.0:*               LISTEN

Если что-то является действительно прослушивание порта 80, то вполне вероятно, что правило брандмауэра блокирует трафик. Вы можете проверить свои правила брандмауэра, запустив $ iptables --list на веб-сервере.

Я не совсем понимаю, как вы пытаетесь это проверить, но это экземпляр EC2? Если это так, убедитесь, что он находится в той же «группе безопасности», что и другие серверы, или что политики внутри группы разрешают порт 80 и тому подобное.

Что-то между вашим некорректным сервером и rpm.pbone.net блокирует TCP-соединения, инициированные вашим некорректным сервером с помощью rpm.pbone.net порт 80 в качестве пункта назначения. Преступником может быть сам ваш сервер, rpm.pbone.net сам или любой промежуточный маршрутизатор / межсетевой экран. А то, что заблокировано, может быть пакетом установления соединения или ответом на него.

Первый шаг в расследовании - выяснить, кто блокирует трафик. tcptraceroute rpm.pbone.net 80 должен сказать вам, как далеко могут зайти пакеты.

Это может помочь или не помочь запустить tcpdump и посмотрите, получите ли вы какой-то ответ (ACK, ICMP или что-то более странное) на свой SYN-пакет при запуске исходящего подключения к порту 80.