Вопрос или проблема
На Fedora 24 веб-сервер (Node.js) работает (самостоятельно, без apache/nginx) на порту 5000.
http://localhost:5000 работает
Как сделать его доступным на порту 80?
Пробовал следующее
systemctl restart firewalld
firewall-cmd --add-service=http --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000
firewall-cmd --list-all
FedoraWorkstation (active)
target: default
icmp-block-inversion: no
interfaces: wlp3s0
sources:
services: mdns ssh dhcpv6-client samba-client https http
ports: 1025-65535/tcp 1025-65535/udp
protocols:
masquerade: yes
forward-ports: port=80:proto=tcp:toport=5000:toaddr=
source-ports:
icmp-blocks:
rich rules:
Дополнительная информация
Пробовал все вышеперечисленное с –zone=external тоже
Запуск node как root на порту 80 работает. Обратите внимание, что IPv4 нет:
netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:4433 0.0.0.0:* LISTEN 3977/deluge-gtk
tcp 0 0 0.0.0.0:51157 0.0.0.0:* LISTEN 3977/deluge-gtk
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 900/postgres
tcp 0 0 0.0.0.0:17500 0.0.0.0:* LISTEN 3203/dropbox
tcp 0 0 127.0.0.1:17600 0.0.0.0:* LISTEN 3203/dropbox
tcp 0 0 127.0.0.1:17603 0.0.0.0:* LISTEN 3203/dropbox
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::4433 :::* LISTEN 3977/deluge-gtk
tcp6 0 0 :::51157 :::* LISTEN 3977/deluge-gtk
tcp6 0 0 :::5432 :::* LISTEN 900/postgres
tcp6 0 0 :::17500 :::* LISTEN 3203/dropbox
tcp6 0 0 :::34017 :::* LISTEN 10532/code
tcp6 0 0 :::5858 :::* LISTEN 30394/node
tcp6 0 0 :::5000 :::* LISTEN 30394/node
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=5000 --permanent
#заставить перенаправление портов работать на localhost
iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 5000
Не забудьте запустить firewall-cmd --reload
после установки постоянных правил. В противном случае, правила не будут считаны до перезапуска службы firewalld
.
Ответ или решение
Для того чтобы перенаправить веб-сервер с порта 5000 на порт 80 на локальном хосте в Fedora, вы уже предприняли ряд полезных шагов. Рассмотрим ваши действия и добавим несколько рекомендаций для достижения цели.
Понимание задачи
Вы хотите сделать локальный Node.js сервер, работающий на порту 5000, доступным через стандартный HTTP-порт 80. Это обычно делается для удобства, поскольку пользователи в основном обращаются к веб-сайтам через порт 80.
Ваши действия
Вы использовали firewall-cmd
для настройки пересылки портов и маскарадинга. Это правильный шаг, так как функциональность firewalld позволяет управлять сетевыми правилами на Fedora.
Рекомендуемые шаги
-
Проверка существующих настроек:
- Убедитесь, что у вас нет противоречивых правил в firewall, которые могут препятствовать правильной работе перенаправления. Для этого выполните
firewall-cmd --list-all
и убедитесь, что правило пересылки портов настроено правильно.
- Убедитесь, что у вас нет противоречивых правил в firewall, которые могут препятствовать правильной работе перенаправления. Для этого выполните
-
Настройка пересылки через
iptables
:- Вы уже добавили правило для работы с локальным хостом:
iptables -t nat -I OUTPUT --source 127.0.0.1 --destination 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 5000
- Убедитесь, что это правило сохранено и будет применено после перезагрузки системы. Для этого вам может понадобиться сохранить правила
iptables
(например, с помощьюiptables-save
).
- Вы уже добавили правило для работы с локальным хостом:
-
Перезагрузка конфигурации firewall:
- Для того чтобы изменения вступили в силу, выполните
firewall-cmd --reload
. Это применит все постоянные изменения.
- Для того чтобы изменения вступили в силу, выполните
-
Проверка доступности:
- Убедитесь, что порт 80 доступен и не блокируется другими правилами или приложениями. Выполните
netstat -tpln
илиss -tpln
для проверки состояния порта.
- Убедитесь, что порт 80 доступен и не блокируется другими правилами или приложениями. Выполните
-
Диагностика и отладка:
- Если после выполнения всех шагов проблема не решена, проверяйте логи системы и firewalld (
journalctl -xe
), чтобы найти возможные ошибки или предупреждения, которые могут указать на проблемы в конфигурации.
- Если после выполнения всех шагов проблема не решена, проверяйте логи системы и firewalld (
Заключение
Следуя перечисленным шагам, вы должны настроить правильную переадресацию запросов с порта 80 на порт 5000 на вашем Fedora сервере. Это позволит пробросить ваши локальные запросы без необходимости запускать Node.js сервер от имени root на порту 80. Внимательно следите за каждым шагом и проверяйте состояние системы после внесения изменений.
Я надеюсь, что данное решение поможет вам в создании безопасной и эффективной конфигурации веб-сервера на Fedora.