Tôi đang cố gắng chuyển tiếp lưu lượng truy cập web từ một máy chủ từ xa đến máy cục bộ của mình để kiểm tra một số tích hợp API (tropo, paypal, v.v.). Về cơ bản, tôi đang cố gắng thiết lập một cái gì đó tương tự như những gì tunnlr.com cung cấp.
Tôi đã khởi tạo đường hầm ssh bằng lệnh
$ssh –nNT –R :7777:localhost:5000 user@server
Sau đó tôi có thể thấy rằng máy chủ hiện đang lắng nghe trên cổng 7777 với
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
Vì vậy, nó hoạt động tốt. Yêu cầu curl thực sự được phục vụ từ máy cục bộ.
Bây giờ, làm cách nào để cho phép server.com:8888 được chuyển qua đường hầm đó?
Tôi đã thử sử dụng nginx như vậy:
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;
}
}
Từ nhật ký lỗi nginx tôi thấy:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Tôi đã xem xét việc thử sử dụng iptables
, nhưng không có tiến triển gì. iptables
có vẻ như là một giải pháp tao nhã hơn là chạy nginx chỉ để đào hầm. Bất kỳ trợ giúp nào cũng được đánh giá rất cao. Cảm ơn!
EDIT (thêm thông tin máy chủ)
Chi tiết máy chủ: Ubuntu 10.10 maverick (cài đặt chuẩn)
EDIT (tùy chọn nginx)
Các tùy chọn nginx hoạt động bằng cách thay đổi 0.0.0.0:7777 thành 127.0.0.1:7777 như @Marcel G đề xuất. Vẫn đang tìm giải pháp không nginx mặc dù.
EDIT (cập nhật về giải pháp cuối cùng)
Như @sciurus đã chỉ ra, hãy đảm bảo rằng GatewayPorts yes
trong tệp sshd_config của bạn. Ban đầu tôi có dòng này trong tệp cấu hình, nhưng tôi cần phải phát hành /etc/init.d/ssh reload
thay vì restart
(ít nhất là có vẻ như vậy trên ubfox).
Lệnh cuối cùng được sử dụng trên máy cục bộ:
ssh -nNT -R '*:8888:localhost:5000' user@server
Sau đó, máy chủ sẽ cho biết nó đang nghe trên *: 8888 với 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
, tôi nhận được lỗicurl: (7) couldn't connect to host
. Tôi vẫn có thể cuộn cục bộ localhost: 8888 từ vỏ máy chủ và nó chạm vào máy cục bộ.