apache в сети windows - невозможно подключиться к внешнему ip из сети - PullRequest
1 голос
/ 02 января 2012

Я создал веб-приложение AMP, которое первоначально собиралось обслуживать с традиционного стороннего хоста.

Когда мы закончили, клиент решил разместить его внутри себя на сервере в своей офисной сети.Приложение предназначено для того, чтобы быть доступным для сотрудников, но эти сотрудники часто будут находиться за пределами площадки.Я не участвовал в настройке их сети, которая использует по крайней мере один сервер под управлением Windows Server 2003. Клиентские машины, которые я видел, были XP.

Я установил Apache, MySQL и PHP на компьютере с сервером 2003 иустановил приложение.Приложение построено на платформе CodeIgniter, поэтому я установил base_url для внутреннего IP (192.168 ...), и мы проверили его изнутри сети.Все работало нормально.

Затем мы попросили их сетевого парня открыть порт 80 для apache.Я установил в base_url внешний IP-адрес и проверил его из своего дома (используя внешний IP-адрес в качестве веб-адреса), и он работает нормально.

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

Предполагается, что я мог бы позволить CodeIgniter определить base_url (оставив переменную в виде пустой строки), но скорее выяснить, почему внешний IP не работает в сети, и попытаться исправить это.

сервер, который мы используем, не выделен для стека AMP (на самом деле, у него есть по крайней мере еще одно приложение, транслирующее в Интернет, которое должно было использовать IIS, а также сервер FTP, используемый для офисных сканеров), поэтому я предполагаю, чтотам могут быть некоторые конфликты.

Я очень мало знаю о Windows Network.Быстрый поиск показал, что это может быть из-за NAT, но не предлагал обходного пути.

У их сетевого парня нет предложений, и он сказал, что все должно быть в порядке.

Возможно ли, чтобы пользователи внутри сети имели доступ к серверу Apache через внешний IP, и если да, то чтодолжно произойти, чтобы включить это?

TYIA

Ответы [ 2 ]

2 голосов
/ 02 января 2012

NAT-маршрутизатор вашего клиента настроен на пересылку пакетов, поступающих на его внешний интерфейс для внешнего IP-адреса с портом 80, на внутренний компьютер, порт 80, после перезаписи IP-адресов источника и назначения в пакетах.

Внутри сети попытки подключения к внешнему IP-адресу будут направляться на маршрут по умолчанию на машинах, внутренний интерфейс маршрутизатора . Этот интерфейс не настроен для пересылки пакетов обратно в сеть .

Настройте приложение на прослушивание всех IP-адресов. Убедитесь, что сервер знает, что клиенты знают его под несколькими именами хоста - внутренним IP-адресом и внешним IP-адресом.

Возможно, вы сможете переписать правила брандмауэра NAT на маршрутизаторе, чтобы выполнить переадресацию портов и для внутреннего интерфейса, но обычное оборудование, обычное в домах и на малых предприятиях, делает не сделать эту задачу легкой. Более дорогие устройства (или самодельные * маршрутизаторы BSD / Linux) могут сделать это без особых усилий, но это без необходимости добавит трафик к маршрутизатору.

0 голосов
/ 02 января 2012

Это не связано с Apache и CI. Часто невозможно получить доступ к внешнему IP-адресу из сети.

Честно говоря, я не знаю точно, почему это так. Я знаю, что это связано с тем, как работает NAT (преобразование сетевых адресов) или, по крайней мере, с тем, как оно реализовано.

Для подробного обзора почему это, вы должны задать этот вопрос на serverfault . Если вы просто программист, которому приходится иметь дело с этим, примите, что NAT обычно работает только изнутри наружу и снаружи внутрь, но не внутри внутрь.

Вы уже упомянули одно из решений в вашем вопросе - не используйте base_url. Вы также можете просто запустить сервер на внешнем IP-адресе (не IP-адрес вашей компании, но, скажем, центр обработки данных или что-то в этом роде).

...