У меня есть сервер разработки, который доступен только с 127.0.0.1:8000, а не с 192.168.1.x: 8000. Как быстрый взлом, есть ли способ настроить что-то для прослушивания на другом порту (скажем, 8001), чтобы из локальной сети я мог подключить 192.168.1.x: 8001, и это туннелирует трафик между клиентом и 127.0 .0.1: 8000?
networking
tcp
tunneling
port-forwarding
waitinforatrain
источник
источник
Ответы:
Использование ssh - самое простое решение.
Это перенаправляет локальный порт 8001 на вашей рабочей станции на адрес localhost на порту 8000 remote-server.com. Это
-g
означает, что другие клиенты в моей сети могут подключаться к порту 8001 на моей рабочей станции. В противном случае только локальные клиенты на вашей рабочей станции могут подключаться к перенаправленному порту.-N
означает, что все, что я делаю, это переадресация портов, а не запуск оболочки.-f
означает переход в фоновый режим после успешного подключения SSH и входа в систему.Порт 8001 будет оставаться открытым для многих соединений, пока ssh не умрет или не будет убит. Если вы оказались в Windows, превосходный SSH-клиент PuTTY также может это сделать. Используйте 8001 в качестве локального порта и localhost: 8000 и пункт назначения и добавьте переадресацию локального порта в настройках. Вы можете добавить его после успешного соединения с PuTTY.
источник
user@remote-server.com
? Это определенно не нужно для переадресации портов, однако ssh требует этого аргумента, более того, он пытается подключиться туда. И после установки этой надоедливой опции на hostname он выводит…port 22: Connection refused
(нет, я не использовал 22 порт) . Если я что-то упустил, команда явно не работает.user@remote-server.com
это всего лишь пример, и не стоит воспринимать это буквально. Вы должны заменить его именем компьютера, к которому хотите подключиться, и своим именем пользователя на этом компьютере. Эта информация необходима для установки ssh-соединения. Только после установления ssh-соединения порты могут быть перенаправлены через это соединение.-N
не означает, что нет SSH-соединения. Это просто означаетdo not execute a remote command
(см. Справочную страницу ).<user>@<host>
Аргумент необходимо, потому что это делает открыть соединение SSH к<host>
(который для случая ФП был быlocalhost
), и передает требуемый порт через этот туннель SSH. Это одно из решений проблемы ОП, но не самое простое. Чтобы переслать на localhost без использования ssh, вы можете использоватьsocat
илиnetcat
как в StephaneChazelas и не-пользовательские ответыС
socat
на сервере:По умолчанию
socat
будет прослушивать TCP-порт 8001 на любом IPv4 или IPv6-адресе (если поддерживается) на машине. Вы можете ограничить его IPv4 / 6, заменивtcp-listen
наtcp4-listen
илиtcp6-listen
, или указав локальный адрес, добавив a,bind=that-address
.То же самое для соединительного сокета, к которому вы используете прокси, вы можете использовать любой адрес вместо
localhost
и заменитьtcp
наtcp4
или,tcp6
если вы хотите ограничить разрешение адресов адресами IPv4 или IPv6.Обратите внимание, что для сервера, прослушивающего порт 8000, соединение будет выглядеть как исходящее от прокси-сервера (в случае
localhost
, если оно будетlocalhost
), а не от исходного клиента. Вам нужно будет использовать подходы DNAT (но требующие привилегий суперпользователя), чтобы сервер мог определить, кто является клиентом.источник
range
иtcpwrap
наsocat
странице руководства ).Использование традиционного
nc
- самое простое решение:Эта версия
nc
находится вnetcat-traditional
пакете на Ubuntu. (Вы должныupdate-alternatives
или позвонитеnc.traditional
.)Обратите внимание, что в отличие от ssh это не зашифровано. Имейте это в виду, если вы используете его за пределами одного хоста.
источник
netcat-openbsd
?netcat
версии , которая входит вbusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Описание параметров )nc
команда заканчивается после первого удаленного подключения. Добавьте,-k
если вам нужно, чтобы он работал.nc: cannot use -p and -l
на CentOS 6.4. Есть ли работа вокруг?NetBSD Netcat доступен по умолчанию в Linux, а также в OS X.
OSX:
Linux:
Альтернатива, которая работает на OS X Bash, - это использовать двунаправленный канал . Может работать на других Unixes:
источник
ss -tan
илиnetstat -tan
.Процитировать Дэвида Spillett «сек ответ на ServerFault
Это простой двоичный файл, который принимает файл конфигурации в формате
bindaddress bindport connectaddress connectport
Например:
192.168.1.1 8001 127.0.0.1 8000
или же
0.0.0.0 8001 127.0.0.1 8000
если вы хотите привязать входящий порт ко всем интерфейсам.
источник
источник
dport
, как вnc -v localhost 2345
, я получаюConnection refused
. Я не очень хорош в iptables, но, думаю, у dport должно быть приложение для прослушивания.Основываясь на ответе Марка А. , мне пришлось сделать небольшую настройку, чтобы заставить его работать на моем Mac (по крайней мере, на MacOS Mojave версии 10.14.4)
Это заявление printf кажется решающим. В противном случае команда netcat для подключения к порту 8000 фактически никогда не попытается подключиться, а команда netcat для прослушивания порта 8001 никогда не будет прослушивать порт 8001. Без printf каждый раз, когда я пытаюсь подключиться к порту 8001, я получаю В соединении отказано.
Я предполагаю, что netcat должен каким-то образом блокировать стандартный ввод (может быть, он пытается прочитать его по какой-то причине) перед выполнением каких-либо операций с сокетом. Таким образом, без записи оператора printf в fifo a команда netcat никогда не начнет прослушивать порт 8001.
Примечание: я бы оставил ответ на пост Марка, но у меня пока нет репутации.
источник
Это новый способ туннелирования двух портов udp на сервере: https://github.com/9crk/udpeer
udpeer 8001 8002
Тестировать:
источник