Saya mencoba untuk meneruskan lalu lintas web dari server jauh ke mesin lokal saya untuk menguji beberapa integrasi API (tropo, paypal, dll). Pada dasarnya, saya mencoba mengatur sesuatu yang mirip dengan apa yang disediakan oleh tunnlr.com.
Saya telah menginisiasi ssh tunnel dengan perintah
$ssh –nNT –R :7777:localhost:5000 user@server
Maka saya dapat melihat server yang sekarang mendengarkan pada port 7777 dengan
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
Jadi itu berfungsi dengan baik. Permintaan curl sebenarnya dilayani dari mesin lokal.
Sekarang, bagaimana cara mengaktifkan server.com:8888 untuk dialihkan melalui terowongan itu?
Saya sudah mencoba menggunakan nginx seperti:
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;
}
}
Dari log kesalahan nginx saya melihat:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Saya sudah mencari cara untuk menggunakan iptables
, tetapi belum membuat kemajuan. iptables
sepertinya solusi yang lebih elegan daripada menjalankan nginx hanya untuk tunneling. Setiap bantuan sangat dihargai. Terima kasih!
EDIT (menambahkan info server)
Detail server: Ubuntu 10.10 maverick (instalasi standar)
EDIT (opsi nginx)
Opsi nginx bekerja dengan mengubah 0.0.0.0:7777 menjadi 127.0.0.1:7777 seperti yang disarankan @Marcel G. Masih mencari solusi non-nginx.
EDIT (pembaruan pada solusi akhir)
Seperti yang ditunjukkan oleh @sciurus, pastikan itu ada GatewayPorts yes
di file sshd_config Anda. Saya awalnya memiliki baris ini di file konfigurasi, tapi saya perlu mengeluarkan /etc/init.d/ssh reload
bukan restart
(setidaknya sepertinya begitu di ubuntu).
Perintah terakhir yang digunakan pada mesin lokal:
ssh -nNT -R '*:8888:localhost:5000' user@server
Maka server harus mengindikasikan sedang mendengarkan pada *: 8888 dengan 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
, saya mendapatkan kesalahancurl: (7) couldn't connect to host
. Saya masih bisa meringkuk localhost: 8888 dari shell server dan hits mesin lokal.lsof -i tcp:8888
.GatewayPorts yes
di sshd_config dan saya pikir saya hanya melakukan /etc/init.d/ssh restart, tapi kali ini saya lakukanreload
. Saya tidak yakin apa bedanya, tapi sekarang benar-benar berfungsi !! Terima kasih sejuta @sciurus.Saya menjawab sciurus kedua, tetapi jika karena alasan tertentu Anda perlu menggunakan nginx ... tebakan saya adalah definisi hulu Anda rusak.
Cara Anda membuat ssh reverse tunnel hanya mendengarkan di localhost (127.0.0.1 dan :: 1), jadi Anda mungkin ingin mencoba memberikan definisi upstream berikut:
Sebagai catatan: Saya belum pernah mengkonfigurasi nginx saya sendiri jadi ini hanya tebakan.
sumber