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