Jak uzyskać dostęp do serwera NodeJS w sieci LAN?

16

Nie jestem najbardziej kompetentnym facetem w dziedzinie sieci, ale proszę bardzo ...

Stworzyłem aplikację w NodeJS i chciałbym przetestować ją w mojej sieci LAN z rodziną. Aplikacja nasłuchuje na porcie 1337połączeń i mogę uzyskać do niej dobry dostęp przez komputer, wpisując ją localhost:1337, 192.168.0.3:1337a nawet http://joel-pc:1337/w pasku adresu przeglądarki.

Będę również uruchamiał apache obok NodeJS i mogę uzyskać dostęp do tej grzywny, wpisując 192.168.0.3lub http://joel-pc/w pasku adresu przeglądarki, o ile jest on podłączony do tej samej sieci.

Oto dziwna część; Jeśli zatrzymam usługę Apache, zmienię aplikację węzła na nasłuchiwanie na porcie 80(http) 1337, będzie ona dostępna na moim komputerze przez wpisanie localhost, 192.168.0.3a nawet http://joel-pcw pasku adresu przeglądarki. Jednak nadal nie mogę uzyskać dostępu do NodeJS na żadnym innym komputerze w mojej sieci oprócz mojej.

Próbowałem utworzyć regułę wychodzącą w systemie Windows 7, aby umożliwić dostęp do portu 1337, ale nadal nie mogę uzyskać dostępu do mojego serwera NodeJS na innym komputerze niż mój, nawet jeśli nasłuchuje na porcie 80. Czy jest coś oczywistego Brakuje mi tutaj?

Joel Murphy
źródło
2
Co jeśli, jako test, wyłączysz zaporę sieciową?
cheesemacfly
1
Jeśli wyłączę zaporę, mam doskonały dostęp do węzła, dziękuję :) Ale na pewno musi być bezpieczniejszy sposób robienia rzeczy?
Joel Murphy
1
Założyłem go teraz, nie martw się :) Czy powinienem tam też pisać? Czy istnieje sposób na przeniesienie mojego pytania? dziękuję
Joel Murphy
2
Twoje zdrowie. I oflagowany go zbyt ponieważ czytałem w innym wątku, że to musi być oznaczone przez 3 użytkowników zanim zostaną podjęte działania przez moderatora
Joel Murphy
2
Flaga, którą podniosłem, została uznana za pomocną, więc nie jestem pewien, jak długo to potrwa!
cheesemacfly

Odpowiedzi:

11

Najprawdopodobniej aplikacja węzła wiąże się z adresem IP sprzężenia zwrotnego 127.0.0.1zamiast z „wszystkimi adresami IP”, 0.0.0.0ponieważ jest to zachowanie domyślne listen. Podaj w swoim połączeniu zarówno port, jak i adres IP, server.listen(80, '0.0.0.0');i spróbuj ponownie.

Peter Lyons
źródło
3
Jeśli to zrobię, nadal nie będę mieć dostępu do Węzła na żadnym innym urządzeniu w mojej sieci LAN. Mój kod wygląda mniej więcej tak: var io = wymagana ('socket.io'); var express = wymagany („ekspresowy”); var app = express (); var server = wymagany („http”). createServer (aplikacja) io = io.listen („80”, „0.0.0.0”);
Joel Murphy
2
To zadziałało w moim przypadku. W niektórych sieciach bezprzewodowych localhostdziała jak ciąg, ale w innych trzeba wpisać go jako127.0.0.1
Raul Rene
Jest to nieprawidłowe w świetle pytania, które jest obecnie napisane, ponieważ w rzeczywistości można uzyskać do niego dostęp na komputerze lokalnym za pomocą adresu LAN, co oznacza, że ​​nasłuchuje również pod tym adresem.
Arlen Beiler
6

Uzyskaj bieżący adres IP sieci lokalnej i uruchom serwer HTTP w następujący sposób:

server.listen(80, 'current_local_ip');
Gonzalo Bahamondez
źródło
1
to działa dla mnie.
psulek
Dokumenty NodeJS stwierdzają, że jeśli nie zostanie podany żaden adres IP, będzie nasłuchiwał na symbolach wieloznacznych (w kolejności: ::lub 0.0.0.0)
Arlen Beiler
3

Najpierw musisz dodać C:\Program Files (x86)\nodedo listy zaufanych aplikacji w zaporze.

Następnie w aplikacji węzła możesz napisać:

listen(3333, '172.24.14.26', function() {

lub:

listen(3333, '0.0.0.0', function() {

lub:

listen(3333, function() {

lub:

listen(80, '172.24.14.26', function() {

lub:

listen(80, '0.0.0.0', function() {

lub:

listen(80, function() {

Każda z tych 6 kombinacji działa w moim przypadku: node.js w systemie Windows Server 2016, chroniony przez firmowy serwer proxy.

Michael Bernheiden
źródło
3

Wykonanie następujących czynności działało dla mnie na komputerze z systemem Windows. Spróbuj tego: otwórz

Panel sterowania \ System i zabezpieczenia \ Zapora systemu Windows Defender \ Dozwolone aplikacje

Następnie poszukaj węzła node.js na liście i kliknij Zmień ustawienia> Upewnij się, że prywatny dostęp jest zaznaczony, a następnie kliknij OK.

grzmot
źródło
3

Znalazłem dobre rozwiązanie tego problemu. Zamiast wykonywać wszystkie konfiguracje (ustawianie zapory ogniowej, port przekazywania itp.) Użyłem localtunnel, który jest narzędziem do ujawniania lokalnego serwera węzłów przez Internet. Możesz go używać do programowania, testowania, udostępniania, po prostu nie używaj go do produkcji.

Najpierw musisz zainstalować localtunnel w następujący sposób:

$npm install -g localtunnel

Następnie skonfiguruj aplikację węzła tak, aby serwer węzłów działał na hoście lokalnym. Na przykład:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

Zanotuj swój_port, który w moim przypadku wynosił 3000 , i uruchom serwer węzła.

Otwórz inny terminal i wpisz następujące polecenie, aby uruchomić tunel lokalny.

$lt --port 3000

Następnie w terminalu otrzymasz adres URL, którego możesz użyć do celów programistycznych / testowych. Ten adres URL będzie dostępny w Internecie, więc możesz go również udostępnić innym osobom. Tak długo, jak działa tunel lokalny, inni mogą uzyskać dostęp do serwera lokalnego węzła.

Więcej opcji konfiguracji / pomocy można znaleźć w dokumentacji: https://www.npmjs.com/package/localtunnel

k33da_lets_debug
źródło