Ich versuche, Webdatenverkehr von einem Remote-Server an meinen lokalen Computer weiterzuleiten, um einige API-Integrationen (Tropo, Paypal usw.) zu testen. Grundsätzlich versuche ich, etwas Ähnliches wie tunnlr.com einzurichten.
Ich habe den SSH-Tunnel mit dem Befehl initiiert
$ssh –nNT –R :7777:localhost:5000 user@server
Dann kann ich sehen, dass der Server jetzt Port 7777 mit abhört
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
Das funktioniert also gut. Die Curl-Anforderung wird tatsächlich vom lokalen Computer bereitgestellt.
Wie kann ich nun aktivieren, dass server.com:8888 durch diesen Tunnel geleitet wird?
Ich habe versucht, Nginx wie folgt zu verwenden:
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;
}
}
Aus dem Nginx-Fehlerprotokoll sehe ich:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Ich habe versucht zu verwenden iptables, aber keine Fortschritte gemacht. iptablesscheint eine elegantere Lösung zu sein, als Nginx nur zum Tunneln auszuführen. Jede Hilfe wird sehr geschätzt. Vielen Dank!
BEARBEITEN (Hinzufügen von Serverinformationen)
Serverdetails: Ubuntu 10.10 Maverick (Standardinstallation)
BEARBEITEN (Nginx-Option)
Die Nginx-Optionen, mit denen gearbeitet wurde, haben 0.0.0.0:7777 in 127.0.0.1:7777 geändert, wie von @Marcel G vorgeschlagen. Immer noch auf der Suche nach einer Nicht-Nginx-Lösung.
BEARBEITEN (Update zur endgültigen Lösung)
Stellen Sie, wie @sciurus hervorhob, sicher, dass GatewayPorts yesin Ihrer sshd_config-Datei. Ich hatte diese Zeile anfangs in der Konfigurationsdatei, musste aber /etc/init.d/ssh reloadstattdessen eine ausgeben restart(zumindest scheint es auf Ubuntu so zu sein).
Letzter Befehl, der auf dem lokalen Computer verwendet wird:
ssh -nNT -R '*:8888:localhost:5000' user@server
Dann sollte der Server anzeigen, dass er *: 8888 mit abhört 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, bekomme ich den Fehlercurl: (7) couldn't connect to host. Ich kann localhost: 8888 immer noch aus der Server-Shell locken und es trifft den lokalen Computer.