一部のAPI統合(トロポ、ペイパルなど)をテストするために、リモートサーバーからローカルマシンにWebトラフィックを転送しようとしています。基本的に、私は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(標準インストール)
EDIT(nginxオプション)
@Marcel Gが示唆したように、nginxオプションは0.0.0.0:7777から127.0.0.1:7777に変更されました。それでも非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をカールすると、ローカルマシンにヒットします。