В настоящее время у нас есть три веб-сервера.
Первый и второй серверы работают нормально, а вот с третьим у меня проблемы.
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, с которого я тестирую?
Убедитесь, что что-то прослушивает порт 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.