Рейтинг:0

Как перенаправить весь трафик, поступающий на данный порт, на другой порт?

флаг gb

Как перенаправить весь трафик, поступающий на данный порт, на другой порт?

Определите макет и проблему

Расположение

Вот макет того, что я пытаюсь сделать...

+--------+ +---------------------+ +---------------- +
| БЛЕДНАЯ | <---> | 6789 | | |
| Клиент | | Шлюз | | Хост |
| | | 4567 | <---> | 2345 Сервис |
+--------+ +---------------------+ +---------------- +

Я хочу прозрачно перенаправить весь трафик, поступающий на порт 6789, на порт 4567. Клиент в глобальной сети и служба на хосте не должны ничего знать о шлюзе.

Шлюз - Debian 10 с firewalld.

Эта проблема

Я не могу перенаправить трафик, поступающий на порт 6789 шлюза, на порт 4567.


Текущая установка

Шаг 01. Откройте порт на брандмауэре и убедитесь, что порт открыт.

Откройте порт на шлюзе

  1. Запустите брандмауэр-cmd команда: брандмауэр-cmd --добавить порт = 6789

  2. Проверьте состояние брандмауэра...

root@gateway:~# firewall-cmd --list-all
публичный (активный)
  цель: по умолчанию
  icmp-инверсия блока: нет
  интерфейсы: это0
  источники: 
  сервисы: dhcpv6-клиент http https ssh
  порты: 6789/TCP
  протоколы: 
  маскарад: да
  форвард-порты: 
  исходные порты: 
  icmp-блоки: 
  богатые правила:
  1. Подтвердите, что порт открыт.
  • На шлюзе запустите прослушиватель: нк -vvlp 6789 &
  • Подтвердите, что прослушиватель в порядке...
root@gateway:~# netstat -tulnp | грэп 6789
TCP 0 0 0.0.0.0:6789 0.0.0.0:* ПРОСЛУШИВАТЬ 2274/nc
  • С клиента попытайтесь получить доступ к шлюзу:
client@client123:~$ nc -vvN gateway.example.org 6789
Подключение к порту 6789 gateway.example.org [tcp/*] выполнено успешно!

Вывод: Порт 6789 открыт на брандмауэре.

Очистить, убив нк процесс как на клиенте, так и на шлюзе.

Шаг 02. Подтвердите соединение между шлюзом и службой на хосте.

root@gateway:~# телнет локальный хост 4567
Пытаюсь 127.0.0.1...
Подключен к локальному хосту.
Экранирующий символ '^]'.
220 backendhost.backendhost MyService (Debian/GNU)

Вывод: Туннель между шлюзом и службой на хосте работает.

Шаг 03. Добавьте переадресацию порта на шлюз и проверьте состояние брандмауэра.

root@gateway:~# firewall-cmd --add-forward-port=port=6789:proto=tcp:toport=4567`
root@gateway:~# firewall-cmd --list-all
публичный (активный)
  цель: по умолчанию
  icmp-инверсия блока: нет
  интерфейсы: это0
  источники: 
  службы: dhcpv6-клиент ssh
  порты: 6789/TCP
  протоколы: 
  маскарад: нет
  переадресация портов: порт = 6789: proto = tcp: toport = 4567: toaddr =
  исходные порты: 
  icmp-блоки: 
  богатые правила: 

Вывод: Проброс порта находится в брандмауэре.


В этот момент, если я попытаюсь подключиться к хосту от клиента, я получаю...

client@client123:~$ telnet gateway.example.org 6789
Попытка <IP_of_gateway>...
telnet: невозможно подключиться к удаленному хосту: в соединении отказано

На данный момент я хочу увидеть то, что я видел на шаге 02 выше.

Вопросы

Вот тут я не уверен...

Когда я бегу netstat -тулнп на шлюзе он НЕ показывает ничего, прослушивающего порт 6789. Я не ожидаю этого, поскольку у меня нет запущенной службы, которая прослушивает порт 6789.

Нужна ли мне какая-то служба для прослушивания порта 6789? Если да, то? Или я что-то упускаю в настройках брандмауэра? Нужен ли мне какой-то прозрачный прокси, как упоминается здесь?

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

Редактировать

В ответ на @A.B.

Хост работает за брандмауэром. Когда хост запускается, он автоматически создает туннель к шлюзу, используя переадресацию порта SSH.

Вот команда, которую хост запускает при загрузке: ssh -N -R 4567:localhost:2345 туннель@gateway.example.org

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

С чем я борюсь, так это с тем, чтобы трафик, поступающий на шлюз, был успешно передан на хост. Шлюз должен быть «прозрачным». Сертификат безопасности хранится у хоста, и клиент должен думать, что он общается напрямую с хостом.

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

Michael Hampton avatar
флаг cz
Вам нужно что-то прослушивающее порт 4567.
user371793 avatar
флаг gb
@MichaelHampton - Спасибо за ваш ответ. На хосте есть перенаправление порта SSH, настроенное на автоматическое подключение к шлюзу. Переадресация порта подключена, и, насколько я понимаю и показываю на шаге 02, он прослушивает порт 4567. Или я что-то неправильно понимаю в том, что вы имеете в виду, когда упоминаете, что мне «нужно что-то, прослушивающее порт 4567»? Еще раз спасибо.
A.B avatar
флаг cl
A.B
Словарь, который следует использовать (и ожидать от людей, читающих ваш вопрос), - это «переслать на хост через порт 2345», а не «переслать на порт 4567». Некоторые порты в вашей схеме указаны как назначения, другие как источники (или я не понял, как читать схему). Вы должны уточнить свой вопрос.
Michael Hampton avatar
флаг cz
Давайте вернемся к основам здесь. Какой смысл менять порт с помощью firewalld? Вы можете просто перенаправить порт ssh для прослушивания непосредственно на нужном вам порту.
Рейтинг:0
флаг gb

Спасибо за различные комментарии.

Мне не хватало двух вещей...

  1. Порты шлюза в /etc/ssh/sshd_config необходимо изменить значение по умолчанию нет к клиенты указаны
  2. ssh Команда должна быть изменена с прослушивания обратной петли на прослушивание всех адресов. Обновленная команда выглядит так: ssh -N -R 0.0.0.0:4567:localhost:2345 туннель@шлюз.example.org (Обратите внимание на 0.0.0.0: который был добавлен перед портом 4567.)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.