一部のAPI統合(tropo、Paypalなど)をテストするために、リモートサーバーからローカルマシンに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を実行するよりもエレガントなソリューションのようです。どんな助けでも大歓迎です。ありがとう!
[〜#〜] edit [〜#〜](サーバー情報の追加)
サーバーの詳細:Ubuntu 10.10 maverick(標準インストール)
[〜#〜] edit [〜#〜](nginxオプション)
@Marcel Gが示唆したように、nginxオプションは0.0.0.0:7777から127.0.0.1:7777に変更されました。それでも非nginxソリューションを探しています。
[〜#〜] edit [〜#〜](最終的なソリューションの更新)
@sciurusが指摘したように、sshd_configファイルの_GatewayPorts yes
_を確認してください。最初は設定ファイルにこの行がありましたが、restart
ではなく_/etc/init.d/ssh reload
_を発行する必要がありました(少なくとも、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デーモン構成(/ etc/ssh/sshd_configである必要があります)にGatewayPortsをclientspecifiedに設定し、再読み込みします。これは、他のシステムがトンネルに接続できるようにするために必要です。これがないと、サーバーで実行されているプログラムだけが使用できます。
あとは、ポート7777ではなくポート8888でリッスンするようにsshコマンドを変更するだけです。これは次のようになります。
ssh -nNT -R '*:8888:localhost:5000' user@server
アスタリスクは、ループバックインターフェイスだけでなく、すべてのインターフェイスでポート8888をリッスンするようにsshdに指示します。 GatewayPortsを変更していない場合、これは失敗します。
私はsciurusの答えを2番目にしますが、何らかの理由でnginxを使用する必要がある場合...私の推測では、上流の定義が壊れています。
Ssh逆トンネルを作成する方法は、ローカルホスト(127.0.0.1および:: 1)でのみリッスンするため、次の上流の定義を試してみるとよいでしょう。
upstream tunnel {
server 127.0.0.1:7777;
}
参考までに、私はまだnginxを自分で構成したことがないので、これは推測にすぎません。