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

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

Моя машина работает под управлением 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, администрирование маршрутизатора и т. Д.), Чтобы это стало возможным?

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

Похоже на возникшую у вас проблему HTTP.SYS.

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

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

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

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

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

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

  1. (Доступ из-за пределов вашей сети) Многие домашние интернет-провайдеры (и некоторые бизнес-провайдеры) блокируют входящий трафик на определенных сервисных портах, таких как порт 80 или 25. Обычно это делается для того, чтобы вы не могли запускать бизнес-сервисы на жилой линии из-за использования полосы пропускания. Альтернативой является запуск его на другом порту (см. Ниже).

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

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

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