Как сделать перевод адреса порта для подключения к обратным порту вперед локально

С socat на сервере:

socat tcp-listen:8001,reuseaddr,fork tcp:localhost:8000

По умолчанию socat будет прослушивать TCP-порт 8001 на любом IPv4- или IPv6-адресе (если поддерживается) на аппарате. Вы можете ограничить его IPv4 / 6, заменив tcp-listen на tcp4-listen или tcp6-listen , либо конкретным локальным адресом, добавив , привязка = тот-адрес .

То же самое для соединительного сокета, к которому вы проксируете, вы можете использовать любой адрес вместо localhost и заменить tcp на tcp4 или ] tcp6 , если вы хотите ограничить разрешение адресов IPv4 или IPv6 адресами.

Обратите внимание, что для сервера, прослушивающего порт 8000, соединение будет отображаться как исходящее от прокси (в случае localhost , это будет localhost ), а не исходное. клиент. Вам нужно будет использовать подходы DNAT (но для этого требуются привилегии суперпользователя), чтобы сервер мог определить, кто является клиентом.

0
04.05.2018, 22:39
1 ответ

Если вы можете использовать DNS или имена хостов, можно будет сделать следующее

  1. открыть ssh с обратным туннелированием (лучше всего использовать ssh-соединение с ключом для автоматизации системы)
  2. после того, как туннель установлен, добавьте записи имени хоста в файл /etc/hosts, но укажите их на 127.0.0.1
  3. когда туннель выйдет из строя, удалите эти записи из файла /etc/hosts.

Шаг 1 довольно прост, доступно множество примеров.
Шаги 2 и 3 не такие прямолинейные, но достаточно простые

На высоком уровне используйте сценарий, запускаемый cron, просмотрите выходные данные netstat, чтобы определить, есть ли у вас активные обратные соединения, а затем повторно -запишите файл хоста с помощью sed или awk, чтобы он указывал на правильный адрес.

Если имена хостов на самом деле не работают, можно -переопределить настройку удаленного туннеля, чтобы использовать 127.0.0.x, а не 1, и распределить свои порты.

что-то вроде

ssh credentials -NT -R 1.2.3.1:9997:127.0.0.2:9997 
1
28.01.2020, 02:43

Теги

Похожие вопросы