Простой способ создания туннеля из одного локального порта в другой?

У меня есть сервер разработки, доступный только от 127.0.0.1:8000, а не 192.168.1.x: 8000. Как быстрый взлом, есть ли способ настроить что-то для прослушивания на другом порту (скажем, 8001), так что из локальной сети я мог бы подключиться к 192.168.1.x: 8001 и туннелировать трафик между клиентом и 127.0 .0.1: 8000?

5 Solutions collect form web for “Простой способ создания туннеля из одного локального порта в другой?”

Использование ssh – самое простое решение.

ssh -g -L 8001: localhost: 8000 -f -N user@remote-server.com

Это перенаправляет локальный порт 8001 на вашу рабочую станцию ​​на адрес localhost на удаленном сервере 8000.
-g означает, что другие клиенты в моей сети могут подключаться к порту 8001 на моей рабочей станции. В противном случае только локальные клиенты на вашей рабочей станции могут подключаться к пересылаемому порту.
-N означает, что все, что я делаю, это пересылка портов, не запускать оболочку.
-f означает fork в фоновом режиме после успешного соединения SSH и входа в систему.
Порт 8001 останется открытым для многих соединений, пока ssh не умрет или не погибнет. Если вы оказались в Windows, отличный клиент SSH PuTTY может это сделать. Используйте 8001 в качестве локального порта и localhost: 8000 и пункт назначения и добавьте локальную переадресацию портов в настройках. Вы можете добавить его после успешного соединения с PuTTY.

С помощью socat на сервере:

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

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

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

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

Использование традиционного nc – самое простое решение:

 nc -l -p 8001 -c "nc 127.0.0.1 8000" 

Эта версия nc находится в netcat-traditional пакете netcat-traditional на Ubuntu. (Вы должны update-alternatives или назвать его nc.traditional .)

Обратите внимание, что в отличие от ssh это не зашифровано. Имейте это в виду, если вы используете его за пределами одного хоста.

OpenBSD netcat доступен по умолчанию в Linux, а также в OS X.

OSX:

 mkfifo a mkfifo b nc 127.0.0.1 8000 < b > a & nc -l 8001 < a > b & 

Linux:

 mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe 

Альтернативой, которая работает в OS X bash, является использование двунаправленной трубы . Он может работать и с другими Unix:

 nc 127.0.0.1 8000 <&1 | nc -l 8001 >&0 
 iptables -t nat -A PREROUTING -p tcp --dport <origin-port> -j REDIRECT --to-port <destination-port> service iptables save service iptables restart 
  • Написание TCP-сервера в bash
  • Отправить пакет TCP на тот же источник
  • Использование in / out именованных каналов для TCP-соединения
  • проверить прием пакетов tcp ниже уровня tcpdump
  • Используйте OpenVPN на TCP 443, не вмешиваясь в мой веб-сервер
  • Как мне зарезервировать порты для моего приложения?
  • nc -l в фоновом закрытии немедленно закрывается (nc -l 1234 &)
  • Значение записей журнала из конфигурации iptables
  • Как я могу определить, какая программа или пользователь подключен к определенному порту после факта?
  • Какие порты будут использовать ssh-демон?
  • Время ожидания балансировки нагрузки Apache
  • Linux и Unix - лучшая ОС в мире.