Сервер VPS NodeJS недоступен на общедоступном IP Oracle Compute Cloud

Я пытаюсь запустить свой сайт nodejs на Oracle Cloud Compute VPS (навсегда бесплатно) с Ubuntu 18.04. (В данном случае очень важно, что это сервер Oracle). Я могу скрутить localhost (затем он возвращает HTML), но я не могу получить к нему доступ через общедоступный IP-адрес со своего компьютера.

Чтобы обойти sudo для порта 80, я применил:

sudo apt-get install libcap2-bin
sudo setcap 'cap_net_bind_service=+ep' `which node`

Он работает внутри:

pm2 start bin/www

│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ www                │ fork     │ 496  │ online    │ 0%       │ 15.5mb   |

pm2 log не возвращает ошибок.

sudo netstat -tulpn | grep 80 возвращает:

tcp6       0      0 :::80                   :::*                    LISTEN      26444/node /opt/por

Если вы думаете, что нет, он работает на ipv6, вы должны добавить listen (port, 0.0.0.0) в nodejs, я пробовал, затем он возвращает это ниже и по-прежнему имеет ту же проблему:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26487/node /opt/por

curl localhost возвращает мою домашнюю страницу html. Доступ к нему через общедоступный IP-адрес в браузере моего компьютера является проблемой, поэтому проблема где-то в брандмауэре, созданном Oracle.

Я обнаружил, что Oracle установила некоторые правила iptables. Некоторые люди просто говорят: отключите их все, но я считаю это немного рискованным для безопасности. Поэтому я хочу открыть только нужный мне порт (порт 80). Поэтому я пробовал почти все команды, которые мог найти для этого (приведенные ниже и многие другие, которые я не могу вспомнить).

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp  --sport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

sudo netfilter-persistent save

Мои текущие таблицы iptables доступны по адресу: sudo iptables -L -n -v https://pastebin.com/ibqWUqjA

Таблицы IP-адресов NAT доступны по адресу: sudo iptables -t nat -L -n -v https://pastebin.com/QGxdTsJ1 < / а>

Должен сказать, я не специалист по нетворкингу. Я просто знаю, как настроить базовый сервер NodeJs на сервере, отличном от Oracle Cloud (мой малиновый пирог дома, с конфигурациями в моем модеме). Так что я не имел дела с iptables и продвинутыми облачными средами в такой степени. Я попытался прочитать тему iptables, просмотрев видео, и среду Oracle на: https://docs.oracle.com/en-us/iaas/Content/Network/Tasks/managingpublicIPs.htm Однако я должен сказать, что это довольно большая информационная перегрузка. По ссылке написано:

  • Экземпляр должен находиться в общедоступной подсети. (проверить)
  • Экземпляр должен иметь общедоступный IP-адрес. (также проверьте)
  • VCN экземпляра должен иметь интернет-шлюз. (А что? Я не могу понять, как это проверить или сделать это. Даже после дополнительного чтения).
  • В общедоступной подсети должны быть настроены таблицы маршрутизации и списки безопасности. (Думаю, я пробовал ??)

В одном сообщении stackoverflow, которое я обнаружил с точно такой же проблемой, говорится: я использую облако Oracle. Я проверю настройки брандмауэра вне сервера. ... Спасибо. Проблема заключалась в настройке брандмауэра самого сервера Oracle. Проблема решена (Nodejs в Linux недоступен вне сервера) Но он делает не скажу где :(. Я много искал это, но не нашел варианта.

Может ли кто-нибудь указать мне правильное направление?


person Amber Elferink    schedule 10.02.2021    source источник
comment
Сделайте примечание перед тем, как кто-нибудь упомянет об этом как о решении. В какой-то момент я также попробовал вариант перенаправления, чтобы перенаправить его на другой порт, а также отредактировал это в моем файле bin / www в nodejs. `` sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 `` После этого я сбросил свои iptables, используя резервную копию, которую я сохранил в файле ( это не помогло, и опция setcap отлично работала для избегания sudo).   -  person Amber Elferink    schedule 12.02.2021


Ответы (1)


Действительно, было еще одно место, где нужно было открыть брандмауэр за пределами терминала.

  • Перейдите в раздел "Вычисления" ›Экземпляры
  • Щелкните имя своего экземпляра. Вы увидите подробную страницу, описывающую множество свойств.
  • Щелкните подсеть.
  • Щелкните список безопасности по умолчанию для vcn -...
  • Добавить правила входа

Добавьте следующие правила:  Правила HTTP и HTTPS

Попробуйте снова перейти на свой общедоступный IP-адрес, пока ваш сайт работает, и он работает!

Чтобы узнать больше об этом и узнать, где я это нашел, см .:

https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm#Default

https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securityrules.htm#stateful

person Amber Elferink    schedule 12.02.2021