Не удается получить доступ к Node.JS через Интернет

Я пытаюсь получить доступ к простому приложению node.js/express через Интернет, но я не могу понять, почему оно не работает. Я могу получить к нему доступ, используя http://localhost:3000 и http://192.168.xx:3000, но без использования моего внешнего IP-адреса.

Порт 3000 открыт на моем маршрутизаторе (дважды проверен с помощью онлайн-инструментов проверки портов), и я добавил правило в брандмауэр, разрешающее порт (Windows 10).

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, "0.0.0.0")

netstat, кажется, предполагает, что порт 3000 разрешен через брандмауэр, верно?

C:\WINDOWS\system32>netstat -n -a

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:3000            0.0.0.0:0              LISTENING

person user2441398    schedule 06.12.2018    source источник
comment
Укажите доменное имя и поделитесь содержимым файла C:\Windows\System32\drivers\etc\hosts.   -  person Vimal Maheedharan    schedule 06.12.2018
comment
@VimalMahi В данный момент я не использую доменное имя. Просто пытаюсь использовать свой внешний IP-адрес. Мой файл hosts - это просто файл по умолчанию, созданный Windows. Все закомментировано.   -  person user2441398    schedule 06.12.2018


Ответы (2)


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

  • Чтобы перенаправить порт, добавьте правило переадресации на свой маршрутизатор [Подробнее]
  • Для туннелирования вы можете использовать ngrok

Сделав это, вы можете подключиться к серверу по адресу http://<your_external_ip>:<forwarded_port>.

person Aritra Chakraborty    schedule 06.12.2018
comment
Порт 3000 открыт на моем маршрутизаторе (дважды проверен с помощью онлайн-инструментов проверки портов). Я посмотрел на ngrok, но я не хочу платить за статический URL. Я действительно не хочу использовать туннелирование. - person user2441398; 06.12.2018
comment
какой URL вы используете? вы используете свой внешний IP правильно? (IP-адрес, который можно найти, выполнив поиск моего IP-адреса в Google) - person Aritra Chakraborty; 06.12.2018
comment
Правильный. Я использую свой внешний IP-адрес без домена. - person user2441398; 06.12.2018
comment
Тогда, возможно, он заблокирован провайдером. Маршрутизатор на верхнем уровне вашего маршрутизатора блокирует трафик. - person Aritra Chakraborty; 06.12.2018
comment
canyouseeme.org тогда не сможет увидеть открытый порт, верно? Пишет, что порт 3000 открыт. - person user2441398; 06.12.2018

Наконец-то я разобрался с проблемой! Это связано с тем, что я тестировал соединение внутри локальной сети на маршрутизаторе, который не поддерживает закрепление (см. пункт 2 в этом ответе на stackoverflow). Простой доступ к приложению на устройстве за пределами моей локальной сети делает свое дело.

person user2441398    schedule 07.12.2018