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

локальная сеть apache

Я пытаюсь связаться с моим локальным Apache из другого источника в локальной сети. IP-адрес машины, на которой запущен Apache, - 192.168.2.36, ОС - xubuntu 12.04. С помощью этой машины я могу получить доступ к экземпляру Apache, но это невозможно с любого другого компьютера или мобильного устройства. Межсетевой экран маршрутизатора выключен.

sudo netstat -tulpen | grep apache

дает мне либо:

tcp        0      0 192.168.2.36:80         0.0.0.0:*               LISTEN      0          1115713     4606/apache2

или (в зависимости от конфигурации в ports.conf):

tcp        0      0 0.0.0.0:80         0.0.0.0:*               LISTEN      0          1115713     4606/apache2

Оба не работают. Хост-компьютер доступен для проверки связи с другими машинами в сети.

Я просто не могу представить, почему это оказывается так сложно ...

Вы проводите различие между другими компьютерами в локальной сети, которые могут проверить связь с сервером Apache, и удаленными ПК / мобильными устройствами, которые пытаются получить доступ к серверу Apache (и терпят неудачу)? Я имею ввиду, они в одной сети?

Просто чтобы убедиться и извините за упоминание об этом, если вам это очевидно: 192.168.2.36 - это частный IP-адрес, который не будет маршрутизироваться и, следовательно, недоступен из Интернета. Упомянутые вами удаленный компьютер и мобильные устройства должен находиться в той же локальной сети, в которой находится сервер Apache, или быть доступным через ваш роутер (не ваш интернет-провайдер, если вы не настроили его для пересылки какого-либо внешнего порта на порт 80 вашего сервера Apache, конечно - я думаю, что это не так).

Я предполагаю, что удаленный компьютер находится в той же локальной сети (скажем, с IP-адресом 192.168.2.100).

1) Сначала проверьте, доступен ли Apache локально на 192.168.2.36 (вы писали, что доступ с самого сервера работает - здесь для полноты перечисляю):

telnet 192.168.2.36 80

Если вы не получите ничего похожего:

$ telnet 192.168.2.36 80
Trying 192.168.2.36...
Connected to 192.168.2.36.
Escape character is '^]'.

не смотрите дальше и проверяйте конфигурацию / установку Apache, потому что что-то не работает должным образом.

Если вы видите результат выше, Apache запущен. Закройте сеанс telnet, нажав Ctrl-] и перейдите к 2).

2) Теперь посмотрим, достигает ли сетевой трафик 192.168.2.36 с удаленного ПК (192.168.2.100). На 192.168.2.36 введите:

sudo tcpdump dst 192.168.2.36 and dst port 80

для сброса любых сетевых пакетов с адресом 192.168.2.36:80.

Теперь войдите в 192.168.2.100, введите:

telnet 192.168.2.36 80

а затем "ПОЛУЧИТЬ /". Это HTTP-запрос, посмотрим, получил ли его сервер.

Вернитесь к команде tcpdump и проверьте ее вывод. Если это похоже на это:

22:12:13.748106 IP 192.168.2.100.50272 > 192.168.2.36.http: Flags [S], seq 3557385561, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 239423238 ecr 0,sackOK,eol], length 0
22:12:13.748190 IP 192.168.2.100.50272 > 192.168.2.36.http: Flags [.], ack 1456211961, win 9186, options [nop,nop,TS val 239423238 ecr 239423238], length 0

пакеты проходят, поэтому переходите к 3).

Если вы не видите пакетов из 192.168.2.100 протестируйте описанные выше действия на паре других ПК в локальной сети. Если вы видите такое же поведение, сбросьте правила брандмауэра на 192.168.2.36:

sudo iptables-save > /tmp/save
sudo iptables -F

и попробуй еще раз. Если пакеты не доходят 192.168.2.36 довольно сложно сказать, что идет не так ... некоторые безумные догадки есть ... но сначала восстановите конфигурацию iptables:

sudo iptables-restore < /tmp/save

Я говорил, некоторые безумные предположения: 192.168.2.36 или 192.168.2.100 имеет поврежденный кеш ARP (укажите кеш ARP с помощью arp -n, а затем удалите записи с помощью arp -d айпи адрес), 192.168.2.36 неисправна карта Ethernet или кабель, IP-адрес 192.168.2.36 используется другим ПК в сети, удаленные ПК настроены на использование IPv6 ...

3) Давайте проверим, возвращаются ли IP-пакеты в 192.168.2.100. Остановите tcpdump с помощью Ctrl-C и введите:

sudo tcpdump dst 192.168.2.100 src port 80

чтобы увидеть все пакеты, возвращающиеся в 192.168.2.100 с исходного порта 80 (то есть с сервера Apache). Если вы видите результат, похожий на этот:

23:03:33.054023 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [S.], seq 1739061544, ack 502726814, win 65535, options [mss 16344,nop,wscale 4,nop,nop,TS val 242492771 ecr 242492771,sackOK,eol], length 0
23:03:33.054062 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [.], ack 1, win 9186, options [nop,nop,TS val 242492771 ecr 242492771], length 0
23:03:34.344572 IP 192.168.2.36.http > 192.168.2.100.50471: Flags [.], ack 8, win 9186, options [nop,nop,TS val 242494052 ecr 242494052], length 0

пакеты возвращаются. Переходите к 4).

Отсутствие вывода tcpdump означает, что 192.168.2.100 не получает обратно пакеты ... может быть, брандмауэр? А с другого удаленного ПК такое же поведение? Проблема ARP (укажите кеш ARP с помощью arp -n, а затем удалите записи с помощью arp -d айпи адрес)?

4) Проверьте вывод команды telnet выше. Если это похоже на это:

Trying 192.168.2.36.... 
Connected to 192.168.2.36. 
Escape character is '^]'. 
GET / 
Location: http://192.168.2.36 
Content-Type: text/html; charset=UTF-8

может быть проблема с вашим веб-браузером. Может прокси HTTP не исключает компьютеры в локальной сети?