С 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 (но для этого требуются привилегии суперпользователя), чтобы сервер мог определить, кто является клиентом.
Если вы можете использовать DNS или имена хостов, можно будет сделать следующее
Шаг 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