2

Я только что арендовал сервер Amazon EC2, предназначенный для размещения приложения node.js, которое слушает клиента через порт 9001.

Я настроил группы безопасности и добавил входящие и исходящие правила для этого порта. Там нет брандмауэра (Amazon Linux), и я полностью отключил iptables.

sudo netstat -plunta | grep LISTEN возвращает это:

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2064/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2104/sendmail       
tcp        0      0 0.0.0.0:9001                0.0.0.0:*                   LISTEN      3207/node           
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2146/mongod         
tcp        0      0 :::80                       :::*                        LISTEN      2303/httpd          
tcp        0      0 :::22                       :::*                        LISTEN      2064/sshd       

Мое приложение node.js прослушивает этот порт и все адреса с помощью команды server.listen(9001, "0.0.0.0");

Тем не менее, nmap сервера возвращает это:

Portscan scan report for 172.31.47.81
Host is up.
All 1000 scanned ports on 172.31.47.81 are filtered

Portscan done: 1 IP address (1 host up) scanned in 2.32 seconds

Кроме того, выполнение Nmap на моем телефоне говорит мне, что открыт только порт 80.

Если я запускаю приложение node.js на сервере и выполняю telnet <ip_server> 9001 , оно работает. Однако, если я делаю то же самое со своего персонального компьютера, я получаю ошибку тайм-аута.

Я знаю, что этот вопрос неоднократно задавался, но ни одно из решений, которые я пробовал, не сработало. Я могу пропинговать сервер, использовать ssh для подключения к нему, но приложение node.js не будет работать, а любой из портов, которые должны быть открыты, на самом деле нет (даже попытка подключиться через браузер к веб-серверу не не работает, несмотря на то, что httpd настроен с правильным веб-сайтом, поэтому порт 80 также не открыт).

Есть идеи как это исправить?

1 ответ1

2

Все 1000 сканированных портов на 172.31.47.81 фильтруются

Как, впрочем, и должно быть.

Существует несколько диапазонов адресов IPv4, которые зарезервированы для использования в частных сетях.

10.*.*.*
172.16.*.* through 172.31.*.*
192.168.*.*

Любой адрес в этих диапазонах не может быть напрямую доступен через Интернет.

http://tools.ietf.org/html/rfc1918

https://www.arin.net/knowledge/address_filters.html

Экземпляры EC2 всегда имеют частный IP-адрес, связанный с ними, и иногда общедоступный публичный IP-адрес. Эти внешние адреса либо динамически распределяются при запуске экземпляра из пула (и освобождаются при остановке или завершении экземпляра, после чего адрес возвращается в пул), либо могут быть постоянно зарезервированы пользователем и связаны / не связаны с экземплярами. и сохраняется для последующего повторного использования клиентом (в этом случае они называются «Эластичные IP-адреса»).

Внутри одного развертывания EC2 одного клиента в данном регионе (и через VPN-туннели в VPC) экземпляры могут обращаться друг к другу по частному IP-адресу (и должны, потому что это бесплатно для передачи данных) ... но через Интернет экземпляры могут быть доступным только по их общему (так называемому "внешнему") IP-адресу, который виден в консоли ... хотя, с точки зрения экземпляра (т. е. ifconfig и т. д.), единственный известный адрес является частным.

Инфраструктура EC2 прозрачно выполняет преобразование сетевых адресов (NAT) между внешним публичным и внутренним частным адресом.

Если вы обращаетесь к экземпляру с помощью ssh извне, IP-адрес, который вы используете для установки ssh-соединения, будет тем же, который вам понадобится и для доступа к другим службам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .