Jak sprawić, aby usługi IIS działały i były dostępne poza moją siecią za routerem? [Zamknięte]

9

Na moim komputerze działa system Windows 7 Ultimate. Oto co dotychczas zrobiłem (z powodzeniem):

  1. Zainstalowano IIS 7.5 z PHP przez FastCGI
  2. Mam to działa! Kiedy przechodzę do http: //localhost/index.php , moje skrypty PHP działają poprawnie.
  3. Uruchomiłem ipconfig, aby dowiedzieć się, że mój lokalny adres IP to 192.168.1.102. Potwierdziłem, że http://192.168.1.102/index.php działa dokładnie tak, jak adres localhost powyżej.
  4. Udałem się do mojej administracji routera (mam Linksys WRT54G2) i skonfigurowałem przekierowanie portów na porcie 80 na 192.168.1.102. Teraz port 80 przekierowuje na moją maszynę.
  5. Skonfiguruj regułę ruchu przychodzącego w Zaporze systemu Windows, aby zezwolić na całą aktywność na porcie 80.
  6. Dowiedz się, jaki jest mój zewnętrzny adres IP od Google. Nazwijmy to XXX.XX.XX.XX.

Jednak gdy próbuję przejść do http: //XXX.XX.XX.XX/index.php z mojej własnej maszyny lub z komputera znajdującego się daleko i nie w mojej sieci, w każdym razie ... nic nie dostaję. Próbuje się połączyć przez jakiś czas (bezskutecznie), ale w końcu po prostu się poddaje.

Oto co się zastanawiam:

  1. czego mi brakuje? Co zapomniałem / przeoczyłem? Jak mogę uzyskać to działające i dostępne poza moją siecią lokalną?
  2. Zakładając, że działam, jak mogę następnie użyć portu innego niż port 80? Jakie zmiany musiałbym wprowadzić (np. IIS, Zapora systemu Windows, administracja routera itp.), Aby było to możliwe?

Z góry dziękuję!

Soergergem
źródło
1
sprawdź, czy Twój port został pomyślnie przesłany tutaj yougetsignal.com/tools/open-ports
smohamed

Odpowiedzi:

5

To brzmi jak występujący problem HTTP.SYS.

Poniżej znajduje się fragment blogu Scotta Hanselmana, który opisuje, jak wystawić IISExpress poza localhost. Wpis na blogu jest dłuższy i opisuje także sposób połączenia SSL. Ale wierzę, że polecenia, które opublikowałem poniżej, które wyciągnąłem z jego postu, pomogą ci rozwiązać problem, który masz.

Najpierw musimy powiedzieć HTTP.SYS na poziomie jądra, że ​​OK pozwala wszystkim rozmawiać z tym adresem URL, dokonując „rezerwacji adresu URL”. Z administracyjnego wiersza polecenia:

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

Następnie, ponieważ chcę móc rozmawiać z IIS Express z zewnątrz (ludzie w mojej sieci itp. Nie tylko localhost), muszę zezwolić IIS Express za pośrednictwem Zapory systemu Windows. Mogę to zrobić graficznie z systemu Windows lub wpisać:

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

Być może nie potrzebujesz ostatniego polecenia, ponieważ stwierdzasz, że utworzyłeś już regułę zapory.

jamason1983
źródło
Uruchomiłem pierwszą komendę netsh, aby dodać rezerwację adresu URL, ale to nic nie zrobiło (nadal działało lokalnie, ale nie poza moją siecią). Jakieś inne pomysły?
soapergem
To nie wygląda dobrze. Nie powinieneś potrzebować grzebać w http.sys, aby uzyskać faktyczne przekierowanie portów do instancji IIS 7.5 (nie IIS Express).
TristanK
2
  1. (Dostęp spoza sieci) Wielu prywatnych dostawców usług internetowych (i niektórzy biznesowi dostawcy usług internetowych) będzie blokować ruch przychodzący na niektórych portach usług, takich jak port 80 lub 25. Zasadniczo ma to na celu uniemożliwienie korzystania z usług biznesowych na linii domowej ze względu na wykorzystanie przepustowości. Alternatywą jest uruchomienie go na innym porcie (patrz poniżej).

  2. (Dostęp z wnętrza sieci) Opisana przez ciebie sytuacja brzmi jak przypinka NAT. Oto dobry ogólny przegląd Hairpin NAT . Będziesz musiał dodać reguły NAT do routera, aby zawsze kierować ruch do twojego zewnętrznego adresu IP, port 80 przechodzi przez router, a nie bezpośrednio z hosta do hosta w sieci. Uwaga: Twój router może nie być w stanie tego zrobić.

  3. Zmień powiązanie portu w IIS, a następnie uruchom ponownie witrynę.

Joel E. Salas
źródło
Dodałem powiązanie do IIS, aby działało na porcie 8080, i znowu działa to lokalnie. Więc 192.168.1.102:8080/index.php działa. Dodałem również regułę ruchu przychodzącego do Zapory systemu Windows dla portu 8080, jednak nadal nie działa ona poza moją siecią. Zastanawiałem się nad dodaniem reguł NAT do mojego routera Linksys WRT54G2, a pomoc, którą znalazłem w Internecie, powiedziała, że ​​będzie to wymagało skonfigurowania opcji „Port Triggering”. Ustawiłem to, ale wciąż ... żadnych kości. Jakieś inne sugestie?
soapergem
1
Jeśli możesz uzyskać do niego dostęp wewnętrznie, Zapora systemu Windows nie stanowi problemu. Wyzwalanie portów nie jest tym, czego chcesz. Będziesz używać przekierowania portów (jeśli router go obsługuje). Przekaż ruch na porcie 8080 na zewnętrznym interfejsie routera na 192.168.1.102:8080
Joel E Salas
Już to robiłem (przekazywanie portów na obu portach 80 i 8080) ZANIM zadałem pytanie. Najwyraźniej wciąż czegoś mi brakuje.
soapergem
Czy router ma jakieś rzeczywiste reguły zapory (oprócz reguł NAT), które mogą blokować ruch? Jeśli to w ogóle możliwe, skonfiguruj urządzenie z programem pfSense, które będzie używane jako router do celów debugowania. Twój router (który nie jest przeznaczony do usług hostingowych) jest prawie na pewno przyczyną twoich nieszczęść.
Joel E Salas
Wygląda na to, że nie zrobiłeś nic złego na poziomie IIS, po prostu router nieintuicyjny / twój dostawca Internetu Cię blokuje. Możliwe jest również, jak myślisz, twoje IP jest podwójnie pośrednie; sprawdź pomysł routera na temat zewnętrznego adresu IP.
TristanK
0

Miałem ten sam problem. Zapora systemu Windows blokuje dostęp. Wyłącz i sprawdź ponownie. Domyślam się, że to zadziała.

Larry Fortna
źródło
2
Zasadniczo wyłączenie zapory ogniowej nie jest dobrym rozwiązaniem.
user9517
Zamiast tego dodaj wyjątki dla portów 80 i 443.
Najeeb,