Рассмотрим следующую ситуацию:
У меня дома есть маршрутизатор (который подключен к интернету), сервер (S) и мой основной компьютер (M). S доступен из Интернета (у него статический IP), и он работает 24/7, а M нет.
Иногда я хочу сделать какое-то приложение (которое слушает какой-то порт на M, например 8888) доступным из внешнего интернета.
Для этого я хотел настроить некоторый порт на S (2222) для переадресации на порт М 8888, чтобы любой, кто обращается к S: 2222, чувствовал, что он обращается к М: 8888.
Я попытался использовать переадресацию порта ssh, моя лучшая попытка была следующей:
ssh -L 2222:M:8888 -N M
Но это только позволяет мне получить доступ к порту 2222 с самого сервера, а не с других машин.
Есть ли способ сделать это правильно? Желательно, чтобы это была простая команда, которую я мог бы запускать и завершать с помощью ^ C, когда мне больше не нужна такая пересылка.
источник
Ответы:
Да, это называется
GatewayPorts
в SSH. Выдержка изssh_config(5)
:И вы можете использовать
localhost
вместоM
переадресации, так как вы пересылаете на тот же компьютер, на котором вы используете SSH - если я правильно понимаю ваш вопрос.Итак, команда станет такой:
и будет выглядеть так
netstat -nltp
:Теперь любой, кто получает доступ к этой машине через порт 2222, TCP будет на самом деле общаться с localhost: 8888, как видно на машине M. Обратите внимание, что это не то же самое, что обычная переадресация на порт 8888 M.
источник
netstat
команду, чтобы узнать, что именно. Вероятно, другой подобный SSH все еще работает в фоновом режиме и уничтожает его с помощью netstat PID.Есть другой способ. Вы можете настроить переадресацию портов с S: 2222 на W: 8888 с помощью iptables. Одиночная команда:
где 1.2.3.4 - IP-адрес М. Это называется NAT (трансляция сетевых адресов).
источник
Больше альтернатив:
netcat
(традиционный) илиsocat
На сервере (С):
или
Подробности см. В: Простой способ создания туннеля от одного локального порта к другому?
источник