Я пытаюсь перенаправить веб-трафик с удаленного сервера на мой локальный компьютер, чтобы проверить некоторую интеграцию API (tropo, paypal и т. Д.). По сути, я пытаюсь настроить что-то похожее на то, что предоставляет tunnlr.com.
Я инициировал SSH туннель с помощью команды
$ssh –nNT –R :7777:localhost:5000 user@server
Тогда я вижу, что сервер сейчас прослушивает порт 7777 с
user@server:$netstat -ant | grep 7777
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN
tcp6 0 0 ::1:7777 :::* LISTEN
$user@server:curl localhost:7777
Hello from local machine
Так что работает отлично. Запрос curl фактически подается с локальной машины.
Теперь, как я могу включить server.com:8888 для маршрутизации через этот туннель?
Я пытался использовать nginx так:
upstream tunnel {
server 0.0.0.0:7777;
}
server {
listen 8888;
server_name server.com;
location / {
access_log /var/log/nginx/tunnel-access.log;
error_log /var/log/nginx/tunnel-error.log;
proxy_pass http://tunnel;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
Из журнала ошибок nginx я вижу:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Я пытался использовать iptables
, но не добился никакого прогресса. iptables
кажется более элегантным решением, чем запуск nginx только для туннелирования. Любая помощь очень ценится. Спасибо!
РЕДАКТИРОВАТЬ (добавить информацию о сервере)
Детали сервера: Ubuntu 10.10 Maverick (стандартная установка)
РЕДАКТИРОВАТЬ (опция nginx)
Настройки nginx изменились с 0.0.0.0:7777 на 127.0.0.1:7777, как предложила @Marcel G. Тем не менее, все еще ищем не-nginx решение.
РЕДАКТИРОВАТЬ (обновление окончательного решения)
Как указал @sciurus, убедитесь, что GatewayPorts yes
в вашем файле sshd_config. У меня изначально была эта строка в файле конфигурации, но мне нужно было выдать /etc/init.d/ssh reload
вместо restart
(по крайней мере, так кажется в Ubuntu).
Последняя команда, используемая на локальной машине:
ssh -nNT -R '*:8888:localhost:5000' user@server
Затем сервер должен указать, что он прослушивает *: 8888 с lsof -i tcp:888
user@server:~$ sudo lsof -i tcp:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 14711 user 8u IPv4 1791013 0t0 TCP *:8888 (LISTEN)
sshd 14711 user 9u IPv6 1791014 0t0 TCP *:8888 (LISTEN)
curl http://server.com:8888
я получаю ошибкуcurl: (7) couldn't connect to host
. Я все еще могу свернуть localhost: 8888 из оболочки сервера, и он попадает на локальную машину.lsof -i tcp:8888
.GatewayPorts yes
sshd_config, и я думаю, что я только сделал /etc/init.d/ssh перезапуск, но на этот раз я сделалreload
. Я не уверен, в чем разница, но теперь это полностью работает !! Спасибо миллион @sciurus.Я второй ответ sciurus, но если по какой-то причине вам нужно использовать nginx ... я думаю, что ваше определение выше по течению не работает.
При создании вашего обратного туннеля ssh он слушает только на локальном хосте (127.0.0.1 и :: 1), поэтому вы можете попробовать попробовать следующее определение восходящего потока:
Для справки: я никогда не настраивал nginx, так что это всего лишь предположение.
источник