ssh đến ip riêng


18

Tôi có một máy tính có CentOS (máy tính A) có cấu hình là ip riêng 10.150.5.141 (với tường lửa bị hạn chế), có thể truy cập internet và ArchLinux VPS (máy tính B) của tôi với ip thật wxyz

Làm cách nào tôi có thể tạo một máy tính khác (máy tính C) có thể truy cập máy tính B để kết nối với máy tính A, nhưng máy tính C không thể kết nối trực tiếp với máy tính A (vì nó nằm trên mạng riêng của A)?

Tôi biết rằng một đường hầm có thể mở các cổng cục bộ sang một máy tính khác: cổng, nhưng làm thế nào để làm điều ngược lại?

Tôi muốn truy cập máy tính A bằng sshmáy tính B nhưng máy tính B không thể truy cập máy tính A, vì mạng trên máy tính A bị hạn chế (có thể ra ngoài, nhưng không thể vào được, vì tôi không có quyền truy cập vào bộ định tuyến của họ)

Tôi muốn một cái gì đó như thế này:

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

để khi tôi ssh w.x.y.z:vvvtừ máy tính C, nó sẽ chuyển tiếp đến mạng riêng 10.150.5.141:22.

Câu trả lời:


14

Những gì bạn đang tìm kiếm được gọi là một đường hầm ngược. sshcung cấp nó thông qua công -Rtắc:

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

Khi OP phát hiện ra với câu trả lời của họ, cú pháp như sau:

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

Thí dụ

Tôi có 2 máy tính trên mạng, lappyremotey. Vì vậy, tôi chạy lệnh sau trên lappy:

$ ssh -f -N -R 12345:localhost:22 remotey

Tôi có thể xác nhận rằng nó hoạt động:

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

Bây giờ nếu tôi sshtách riêng với hệ thống từ xa remoteyvà chạy lệnh này, tôi có thể thấy rằng hiện tại nó đang chấp nhận các kết nối trên cổng 12345 trên giao diện cục bộ của hệ thống từ xa:

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

Kiểm tra kết nối

Bạn có thể thấy rằng đường hầm ssh ngược đang hoạt động như sau.

  1. đăng nhập vào remotey

    [user@lappy ~]$ ssh remotey
    
  2. kiểm tra cổng hầm ngược

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. bây giờ nên trở lại với lappy

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

Các cổng trên các giao diện khác ngoài localhost ( lo)?

Bạn có thể gãi đầu nếu bạn thử một lệnh như thế này và nó dường như không hoạt động hoặc nó luôn liên kết với một cổng trên logiao diện localhost ( ).

Ví dụ:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

LƯU Ý: Lệnh này nói để mở cổng 12345 @ remotey và đường hầm bất kỳ kết nối nào đến cổng 22 @ lappy.

Sau đó trên remotey:

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

Những gì đang diễn ra là sshdcấu hình không cho phép bạn làm điều này. Trong thực tế không có tính năng này được kích hoạt ( GatewayPorts), bạn sẽ không thể liên kết bất kỳ sshcổng đường hầm nào với bất cứ thứ gì ngoại trừ localhost.

Kích hoạt GatewayPorts

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

Để kích hoạt nó, chỉnh sửa tập tin này /etc/ssh/sshd_config:

GatewayPorts clientspecified

Và khởi động lại sshd:

remotey$ sudo service sshd restart

Bây giờ hãy thử lại và chúng ta sẽ thấy hiệu quả sau:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

Và kiểm tra lại lần này trên remotey:

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

LƯU Ý: Ở phần trên chúng ta có thể thấy rằng sshdquy trình hiện đang lắng nghe trên giao diện có địa chỉ IP 192.168.1.3, cho các kết nối trên cổng 12345.

Kiểm tra kết nối (phần deux)

Bây giờ với thiết lập đã thay đổi của chúng tôi khi chúng tôi kiểm tra lần này. Sự khác biệt chính là chúng ta không còn phải kết nối với localhost!

  1. đăng nhập vào remotey

    [user@lappy ~]$ ssh remotey
    
  2. kiểm tra kết nối ngược

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. bây giờ nên trở lại với lappy

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

Tài liệu tham khảo


Có cách nào để tạo đường hầm từ 0.0.0.0:12346 đến 127.0.0.1:12345 trên cùng một máy không?
Kokizzu

1
@Kokizzu - Tôi đã thử thiết lập tính năng này và tôi đang quấn quanh sợi trục trên những gì bạn yêu cầu. Tôi tìm thấy cái này nghe giống như những gì bạn muốn, anattatechnology.com/q/2012/08/chained-ssh-tunnels . Tôi sẽ thử và giải quyết nó sau tối nay, thoải mái chơi với nó và cho tôi biết nếu bạn có bất kỳ tiến triển nào với nó.
slm

đó không phải là ý tôi, tôi muốn nó liên kết với wxyz: vvv2 thay vì 127.0.0.1 (trên máy tính B), vì vậy những người khác cũng có thể sử dụng nó ..
Kokizzu

1
@Kokizzu - xem cập nhật.
slm

2

Vì máy tính B không thể truy cập máy tính A, trước tiên bạn cần mở một đường hầm từ máy tính A.

ssh user@computerB -R vvv:localhost:22

cảm ơn, nhưng có cách nào để mở một cổng trên IP của eth0 được chuyển tiếp đến một dịch vụ nghe localhost không?
Kokizzu

1

đừng bận tâm, tôi đã tìm thấy câu trả lời:

ssh -f -N -R vvv:localhost:22 w.x.y.z

từ máy tính A

EDIT: TL; DR, giải pháp đúng:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.