Назад | Перейти на главную страницу

Обратный туннель SSH

Я пытаюсь перенаправить веб-трафик с удаленного сервера на свой локальный компьютер, чтобы протестировать интеграцию 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)

Нет необходимости использовать nginx.

В вашей конфигурации демона ssh (это должно быть / и т.д. / SSH / sshd_config) устанавливать GatewayPorts к указаны клиенты и перезагрузите его. Это необходимо, чтобы другие системы могли подключиться к вашему туннелю. Без него его смогут использовать только программы, запущенные на вашем сервере.

Теперь все, что вам нужно сделать, это изменить вашу команду ssh для прослушивания порта 8888 вместо порта 7777. Это может выглядеть так:

ssh -nNT -R '*:8888:localhost:5000' user@server

Звездочка указывает sshd прослушивать порт 8888 на всех интерфейсах, а не только на интерфейсе обратной связи. Это не получится, если вы не измените GatewayPorts.

Я второй ответ sciurus, но если по какой-то причине вам нужно использовать nginx ... я предполагаю, что ваше определение восходящего потока нарушено.

Как вы создаете обратный туннель ssh, он прослушивает только localhost (127.0.0.1 и :: 1), поэтому вы можете попробовать дать следующее определение восходящего потока:

upstream tunnel {
    server 127.0.0.1:7777;
}

Для записи: я еще никогда не настраивал nginx сам, так что это всего лишь предположение.