Как открыть порт в внешний мир?

Вопрос или проблема

У меня есть удаленный сервер с IP – 111.222.333.444. Я хочу запустить HTTP-сервер на этой машине, который работает на localhost:8000.

Как мне сделать запросы к 111.222.333.444:6000 снаружи, с моего домашнего компьютера, чтобы достичь моего HTTP-сервера, работающего на localhost:8000 на удаленном сервере?

Я использовал ufw. Включил ip_forwarding в /etc/sysctl.conf DEFAULT_FORWARD_POLICY в /etc/default/ufw.

Пробовал это в /etc/ufw/before.rules:

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000
COMMIT

В строке -A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000 отсутствие указанного IP, с которого должен приходить трафик, устанавливает его на IP-адрес интерфейса eth0 по умолчанию?

Использую Ubuntu-20.04-amd64.

Если кто-то мог бы сказать, как бы он это написал, чтобы достичь тех же целей. Через редактирование iptables, или ufw и т. д.

Обновление: Начал с нуля. HTTP-сервер работает на localhost:8000. Мой ufw status показывает следующее:

To                         Action      From
--                         ------      ----
8000/tcp                   ALLOW       Anywhere                  
6000/tcp                   ALLOW       Anywhere 
8000/tcp (v6)              ALLOW       Anywhere (v6)             
6000/tcp (v6)              ALLOW       Anywhere (v6)

Добавил строки в /etc/ufw/before.rules перед *filter:

:PREROUTING ACCEPT [0:0]

-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000

Что должно позволить мне ввести в командной строке на удаленном сервере curl localhost:6000 или curl 127.0.0.1:6000 и получить ответ, как я понимаю. Но вместо этого я получаю – curl: (7) Не удалось подключиться к локальному хосту на порт 6000: Подключение отклонено.

Обновление: Изменил /etc/ufw/before.rules с -A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000 на:

-A INPUT -i eth0 -p tcp --dport 6000 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT
-A PREROUTING -t nat -i eth0 -p tcp --dport 6000 -j REDIRECT --to-port 8000

Теперь с новыми правилами, когда я делаю запрос curl из терминала, он висит. Вместо того, чтобы выдавать ошибку.

Проброс порта

Использование Ngrok может помочь вам, если вы хотите получить доступ к вашему localhost из публичного интернета. Ngrok “экспонирует ваш локальный сервер разработки в интернет”, предоставляя вам уникальный случайный поддомен URL, например, abcdef.ngrok.io, для доступа к вашему localhost. Вы можете выбрать пользовательский домен, если у вас есть собственный (больше информации о пользовательском домене здесь).

Примечание: К сожалению, вам не придется редактировать таблицы IP с помощью этого метода.

Пожалуйста, попробуйте эти команды на сервере:

$ rm -f /tmp/f ; mkfifo /tmp/f
$ nc -l 6000 </tmp/f | nc localhost 8000 >/tmp/f

Это перенаправит любой TCP-трафик, приходящий на порт 6000 вашего сервера, на внутренний TCP-порт 8000.

Пожалуйста, обратите внимание, что это будет работать только для одного соединения, и вторую команду выше придется повторять для каждого нового соединения. Поэтому это не является настоящим решением, а просто тест для проверки того, действительно ли это то, что вы хотите сделать.

Ответ или решение

Как открыть порт для доступа из внешнего мира

Открытие порта для внешнего доступа к вашему HTTP-серверу на удаленном сервере — это важная задача, которая требует правильно настроенной сети и файрвола. В вашем случае, вы хотите перенаправить трафик с порта 6000 на порт 8000, на котором работает ваш HTTP-сервер. Ниже приведены шаги, которые помогут вам в этом процессе, включая необходимые изменения в конфигурациях и управляющих системах.

1. Проверка состояния сервера

Убедитесь, что ваш HTTP-сервер действительно запущен и доступен на localhost:8000. Для этого выполните команду:

curl localhost:8000

Если сервер работает корректно, вы должны получить ответ.

2. Настройка UFW

Сначала убедитесь, что ufw (Uncomplicated Firewall) включен и позволяет доступ к необходимым портам. Статус ufw вы можете проверить командой:

sudo ufw status verbose

В вашем выводе указано, что порты 6000 и 8000 уже открыты для всех. Это отлично. Если этого не было, добавьте правила:

sudo ufw allow 6000/tcp
sudo ufw allow 8000/tcp

3. Настройка перенаправления портов

Поскольку вы хотите перенаправить порты, откройте файл конфигурации before.rules для ufw:

sudo nano /etc/ufw/before.rules

Перед строкой *filter добавьте следующие правила перенаправления:

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport 6000 -j REDIRECT --to-port 8000
COMMIT

4. Проверка конфигурации перенаправления

После изменения конфигурации перезапустите ufw:

sudo ufw disable
sudo ufw enable

5. Дополнительные проверки

Теперь проверьте, что ваши настройки сработали. Используйте команду curl для проверки перенаправления:

curl localhost:6000

Если вы видите зависание при попытке выполнить данную команду, это может означать, что трафик не доходит до вашего сервера на порт 6000, либо перенаправление настроено некорректно.

6. Альтернативный тест с netcat

Чтобы убедиться, что перенаправление работает, вы можете временно использовать netcat:

rm -f /tmp/f ; mkfifo /tmp/f
nc -l 6000 < /tmp/f | nc localhost 8000 > /tmp/f

Этот метод позволяет проверить, будет ли успешно перенаправлен трафик. Учтите, что этот способ работает только с одним подключением, поэтому его следует использовать для тестирования.

7. Рекомендации по диагностике

Если проблемы продолжаются, проверьте следующие моменты:

  • Логи сервера: Изучите логи вашего сервера, чтобы оценить, отражается ли попытка подключения.
  • Настройки сети: Убедитесь, что адаптер eth0 настроен правильно и активно принимает трафик.
  • Проверка статуса: Убедитесь, что ваши настройки ufw отсутствуют в конфликте с другими правилами файрвола.

Соблюдение всех этих шагов должно помочь вам успешно открыть порт и настроить доступ к вашему HTTP-серверу из внешнего мира. Если есть дополнительные вопросы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...