Как заставить IIS работать и быть доступным вне моей сети за маршрутизатором? [закрыто]

9

Моя машина работает под управлением Windows 7 Ultimate. Вот что я сделал (успешно) до сих пор:

  1. Установленный IIS 7.5 с PHP поверх FastCGI
  2. Работай! Когда я захожу на http: //localhost/index.php , мои PHP-скрипты работают нормально.
  3. Запустил ipconfig, чтобы узнать, что мой локальный IP-адрес - 192.168.1.102. Я подтвердил, что http://192.168.1.102/index.php работает точно так же, как адрес localhost выше.
  4. Зашел в администрацию моего роутера (у меня есть Linksys WRT54G2) и настроил переадресацию портов на порт 80 на 192.168.1.102. Теперь порт 80 пересылается на мою машину.
  5. Настройте правило для входящих подключений в брандмауэре Windows, чтобы разрешить все действия на порту 80.
  6. Выяснил, что мой внешний IP-адрес от Google. Давайте назовем это XXX.XX.XX.XX.

Тем не менее, когда я пытаюсь зайти на http: //XXX.XX.XX.XX/index.php со своей собственной машины или с компьютера, находящегося далеко и не находящегося в моей сети, в любом случае ... я ничего не получаю. Он пытается подключиться некоторое время (безуспешно), но в итоге просто сдается.

Вот что мне интересно:

  1. Что мне не хватает? Что я забыл / упустил из виду? Как мне сделать это работающим и доступным за пределами моей собственной локальной сети?
  2. Предполагая, что это работает, как я могу использовать порт, отличный от порта 80? Какие изменения мне нужно будет сделать (например, IIS, брандмауэр Windows, администрирование маршрутизатора и т. Д.), Чтобы это стало возможным?

Большое спасибо заранее!

soapergem
источник
1
посмотрите, успешно ли переадресован ваш порт здесь yougetsignal.com/tools/open-ports
Smohamed

Ответы:

5

Это звучит как проблема HTTP.SYS, которая у вас возникла.

Ниже приведен отрывок из блога Скотта Хансельмана, в котором описывается, как раскрыть IISExpress вне localhost. Пост в блоге длиннее, в котором также описывается, как подключить SSL. Но я верю, что команды, которые я разместил ниже и которые я извлек из его поста, помогут вам решить проблему, с которой вы столкнулись.

Во-первых, нам нужно сообщить HTTP.SYS на уровне ядра, что можно разрешить всем общаться с этим URL, сделав «резервирование URL». Из административной командной строки:

netsh http add urlacl url=http://<LocalComputerName>:80/ user=everyone

Далее, поскольку я хочу иметь возможность общаться с IIS Express извне (люди в моей сети и т. Д., А не только с локальным хостом), мне нужно разрешить IIS Express через брандмауэр Windows. Я могу сделать это графически из Windows, или введите:

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

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

jamason1983
источник
Я запустил первую команду netsh, чтобы добавить резервирование URL-адреса, но ничего не сделал (все еще работал локально, но не за пределами моей сети). Есть еще идеи?
soapergem
Это не выглядит правильно. Вам не нужно возиться с http.sys, чтобы получить фактический перенаправленный порт экземпляра IIS 7.5 (не IIS Express).
TristanK
2
  1. (Доступ извне вашей сети) Многие провайдеры (и некоторые провайдеры бизнеса) блокируют входящий трафик через определенные сервисные порты, такие как порты 80 или 25. Обычно это не позволяет вам запускать бизнес-сервисы на домашней линии из-за использования полосы пропускания. Альтернатива - запустить его на другом порту (см. Ниже).

  2. (Доступ из вашей сети) Ситуация, которую вы описываете, звучит как шпилька NAT. Вот хороший общий обзор Hairpin NAT . Вам нужно будет добавить правила NAT к вашему маршрутизатору, чтобы всегда направлять трафик на ваш внешний IP-адрес, порт 80 проходит через ваш маршрутизатор, а не напрямую от хоста к хосту в вашей сети. Предостережение: Ваш маршрутизатор может быть не в состоянии сделать это.

  3. Измените привязку порта в IIS, затем перезапустите веб-сайт.

Джоэл Э Салас
источник
Я добавил привязку к IIS, чтобы он работал на порту 8080, и опять же, это работает локально. Так что 192.168.1.102:8080/index.php работает. Я также добавил правило для входящих подключений в брандмауэр Windows для порта 8080, однако оно все еще не работает за пределами моей сети. Я рассмотрел добавление правил NAT для моего маршрутизатора Linksys WRT54G2, и в справке, которую я нашел в Интернете, говорилось, что это будет связано с настройкой параметров «Запуск по портам». Я настроил это, но все еще ... без игры в кости. Любые другие предложения?
soapergem
1
Если вы можете получить к нему доступ изнутри, то проблема не в брандмауэре Windows. Запуск порта не то, что вы хотите. Вы собираетесь использовать переадресацию портов (если ваш маршрутизатор поддерживает это). Переадресация трафика через порт 8080 на внешнем интерфейсе вашего маршрутизатора на 192.168.1.102:8080
Джоэл Э. Салас
Я уже делал это (Переадресация портов на оба порта 80 и 8080) ДО того, как я задал вопрос. Я все еще что-то упускаю, по-видимому.
soapergem
Есть ли у маршрутизатора какие-либо действительные правила брандмауэра (кроме правил NAT), которые могут блокировать трафик? Если это вообще возможно, установите для себя программу, запускающую pfSense, для использования в качестве маршрутизатора в целях отладки. Ваш роутер (который не предназначен для хостинга) почти наверняка является причиной ваших проблем.
Джоэл Э Салас
Похоже, вы не сделали ничего плохого на уровне IIS, просто маршрутизатор не интуитивен / ваш интернет-провайдер блокирует вас. Возможно также то, что вы думаете, ваш IP двунаправленный; проверьте представление маршрутизатора о том, что внешний IP-адрес.
TristanK
0

У меня такая же проблема. Брандмауэр Windows блокирует доступ. Выключите и проверьте это снова. Я думаю, что это будет работать.

Ларри Фортна
источник
2
Как правило, плохое решение просто отключить брандмауэр.
user9517
Вместо этого добавьте исключения для портов 80 и 443.
Наджиб