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. iptables
scheint 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 yes
in Ihrer sshd_config-Datei. Ich hatte diese Zeile anfangs in der Konfigurationsdatei, musste aber /etc/init.d/ssh reload
stattdessen 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.lsof -i tcp:8888
.GatewayPorts yes
in sshd_config und ich glaube, ich habe nur einen /etc/init.d/ssh Neustart durchgeführt, aber diesmal habe ich es getanreload
. Ich bin mir nicht sicher, was der Unterschied ist, aber jetzt funktioniert es total !! Vielen Dank eine Million @sciurus.Ich bin die zweite Antwort von Sciurus, aber wenn Sie aus irgendeinem Grund Nginx verwenden müssen ... Ich vermute, dass Ihre Upstream-Definition fehlerhaft ist.
Die Art und Weise, wie Sie Ihren SSH-Reverse-Tunnel erstellen, hört nur auf localhost (127.0.0.1 und :: 1). Daher sollten Sie versuchen, die folgende Upstream-Definition zu testen:
Nur zur Veranschaulichung: Ich habe Nginx noch nie selbst konfiguriert, daher ist dies nur eine Vermutung.
quelle