Làm cách nào tôi có thể tạo đường hầm cho tất cả lưu lượng truy cập mạng của mình thông qua SSH?


117

Bất cứ khi nào tôi đang sử dụng internet từ một vị trí không an toàn (như wifi công cộng), tôi thích sử dụng đường hầm ssh ( ssh -D port host) để đảm bảo lưu lượng truy cập của tôi không thể bị đánh hơi. Thật không may, dường như có nhiều ứng dụng không cung cấp cách chỉ định proxy (Flash là một ví dụ chính).

Có vẻ như nên có một số cách để sử dụng một đường hầm cho tất cả lưu lượng truy cập mạng từ máy tính của tôi, nhưng tôi hoàn toàn không biết làm thế nào để làm điều này. Mọi sự trợ giúp sẽ rất được trân trọng.


16
Tất nhiên bạn không thể đường hầm TẤT CẢ lưu lượng truy cập của bạn thông qua ssh, bởi vì điều đó có nghĩa là đường hầm ssh thông qua chính nó, nhưng chúng tôi biết ý của bạn là gì. :)
CarlF

1
đây là một ý tưởng tốt nhưng bạn chỉ được bảo vệ giữa máy tính và điểm cuối ssh của bạn. sau đó, lưu lượng truy cập của bạn rõ ràng (trừ khi được bảo vệ theo cách khác, ví dụ: SSL). được cho phép, nhiều khả năng là qua dây, nhưng vẫn ... bạn không thể thực sự tin tưởng dây bạn không kiểm soát.
quack quixote

6
Nhưng khi bạn ra ngoài Internet, bạn sẽ an toàn khi chỉ là một trong hàng tỷ gói, phải không? Khi bạn kết nối vào mạng Wi-Fi công cộng, bạn là một trong những lẽ 3 kết nối, bạn có thể xác định cá nhân, vv
endolith

Câu trả lời:


62

Để làm những gì bạn muốn, tôi khuyên bạn nên ssh mực .

Bạn sử dụng nó như thế này:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

Nó sẽ tự động lưu trữ tất cả lưu lượng TCP của bạn. Bạn cũng có thể thêm --dnsđối số để có đường hầm lưu lượng DNS của mình. Máy chủ từ xa chỉ cần cài đặt Python.

Nếu bạn chỉ muốn đường hầm các chương trình cụ thể, tôi muốn giới thiệu proxy .

Sau khi được cài đặt, hãy khởi động proxy ssh vớ của bạn như thế này:

ssh -fND 127.0.0.1:<local port> username@sshserver

Điều này sẽ bắt đầu một proxy "SOCKS" nghe trên <cổng cục bộ>.

Sau đó chỉnh sửa /etc/proxychains.conf để trỏ đến cùng một cổng với <cổng cục bộ>.

Cuối cùng bắt đầu chương trình của bạn mà bạn muốn proxy-ed như vậy:

proxychains <program name>

Nó chỉ nên làm việc. Tuy nhiên, một vài chương trình sẽ gặp sự cố khi làm việc với Proxy Chains. Ngoài ra, hãy nhớ rằng với Firefox, bạn phải thay đổi các mục bổ sung trong about: config để buộc nó thực hiện tra cứu DNS thông qua proxy thay vì bỏ qua nó.

Như một lưu ý bổ sung, trên các trình duyệt web. Nếu họ hỗ trợ proxy proxy, bạn không cần phải làm gì thêm để khiến họ sử dụng đường hầm ssh đã đề cập ở trên, chỉ cần nhập 127.0.0.1 cho máy chủ proxy SOCKS và <cổng cục bộ> cho cổng proxy.

CHỈNH 3/29/16

Vì bài đăng này vẫn còn thấy một số upvote, tôi nghĩ tôi sẽ cập nhật nó. Proxychains vẫn có trong hầu hết các repos Linux và vẫn hoạt động trên Linux. Tuy nhiên, dự án bị bỏ rơi một cách hiệu quả và không hoạt động trên OSX. Đối với Linux hoặc OSX, tôi khuyên bạn nên nâng cấp lên một ngã ba vẫn được duy trì: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Bên cạnh hoạt động trong cả Linux và OSX, nó rất dễ biên dịch và cũng hỗ trợ tốt hơn cho đường hầm DNS.

Tôi cũng nên đề cập đến một lựa chọn khác, đó là redsocks. Nó hoạt động tương tự như proxychains (-ng) và cũng có khả năng trong repo dist của bạn: https://github.com/darkk/redsocks


Lưu ý đối với các hệ thống Linux mới hơn sử dụng sshript: tại thời điểm viết có một lỗi kernel sẽ khiến bạn bị hỏng đường ống. Trong trường hợp đó, sử dụng:sshuttle -r root@host -x host 0/0
tổng hợp1166877

49

man sshđưa ra một ví dụ về chính xác điều này. Một vpn dựa trên ssh:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~ ~ bắn tỉa ~ ~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

Khi bạn có giao diện mới đó, bạn chỉ cần đặt tuyến đường mặc định, đây là một câu hỏi khác.


1
Bạn có thể giải thích thêm một chút? Lệnh ifconfig tạo một giao diện mới có tên tun0, phải không? Hoặc là tun0 được tạo bởi ssh và chỉ được cấu hình thêm bởi ifconfig? Có thể thêm một ví dụ liên quan đến câu hỏi?
Không ai vào

6

Tìm tùy chọn "Đường hầm" trong ssh. Điều này tạo ra một thiết bị đường hầm mà bạn có thể gán địa chỉ IP và sau đó bạn thay đổi tuyến đường mặc định để sử dụng đường hầm đó.


4

Tôi đã phát triển phần mềm cho phép bạn chuyển tiếp tất cả TCP và UDP tùy chọn thông qua proxy SOCKS5, toàn hệ thống.

http://code.google.com.vn/p/badvpn/wiki/tun2socks

Nó thậm chí có thể được cài đặt trên bộ định tuyến để chuyển tiếp tất cả các kết nối từ các máy tính trong mạng LAN.


0

MẠNG LƯỚI RIÊNG TƯ VIRTUAL-BASED ssh chứa hỗ trợ cho đường hầm Mạng riêng ảo (VPN) sử dụng thiết bị giả mạng điều chỉnh (4), cho phép hai mạng được kết nối an toàn. Tùy chọn cấu hình sshd_config (5) PermitTunnel kiểm soát xem máy chủ có hỗ trợ điều này không, và ở mức nào (lớp 2 hoặc 3 traf‐ fic).

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).

1
vui lòng thêm một nguồn cho thông tin của bạn. lưu ý: đây là một câu hỏi cũ
Lorenzo Von Matterhorn

-2

Chỉ muốn làm rõ rằng (máy chủ cổng ssh -D) không phải là cách an toàn 100% để lưu lượng truy cập không bị đánh hơi. Thêm (ssh -D -c máy chủ cổng blowfish) sẽ là lựa chọn tốt hơn vì bạn ít nhất thêm mã hóa vào phiên của mình. Có nhiều tùy chọn bạn có thể thêm nhưng thật dễ dàng để chỉ cần gõ "man ssh" trong thiết bị đầu cuối của bạn hoặc Google để có danh sách đầy đủ.

Tùy chọn tôi nghĩ rằng bạn đang tìm kiếm là thiết lập VPN (Mạng riêng ảo)

Hãy xem bài viết này để hiểu về sự khác biệt giữa hai ( SSH so với VPN ) hoặc một phiên bản tóm tắt tốt , trước khi bạn giải quyết việc thiết lập VPN của riêng mình. Nếu bạn quyết định đi theo lộ trình VPN, tôi khuyên bạn nên sử dụng OpenVPN , nó miễn phí và rất nhiều tài liệu và hỗ trợ.


6
lời khuyên tệ. "blowfish" là một mật mã SSH-1; nó nhanh, nghĩ an toàn (kể từ năm 1999: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), nhưng vẫn còn. bạn có thể muốn ssh -2 -C -D [...](buộc SSH2, sử dụng nén) và thả -c. theo hệ thống của tôi, man sshdanh sách mật mã trong SSH2 mặc định aes128-cbc,3des-cbc,blowfish-cbc,[etc]. Quan điểm của tôi là, nếu bạn yêu cầu -c blowfishbạn có thể kết thúc với SSH1, nó kém an toàn hơn nhiều so với SSH2.
quack quixote

2
Đúng, nhưng Jeremy có ấn tượng rằng kết nối được bảo mật chỉ với -8080, tôi chỉ nói rằng nó tốt hơn những gì anh ta đang sử dụng. Bạn đưa ra một điểm hợp lệ và đó là lý do tại sao tôi đề cập đến hướng dẫn để có thêm tùy chọn.
ricbax

Có lẽ bạn nên thay đổi câu trả lời của mình, vì nó rất hữu ích.
endolith

Quên tôi hỏi điều này, không sử dụng trang web này thường xuyên. Cảm ơn đã làm rõ ... Tôi có ấn tượng mạnh mẽ rằng SSH được bảo mật theo mặc định.
Jeremy Banks

9
WTF không phải là SSH sử dụng mã hóa theo mặc định ??
LatinSuD

-3

Sử dụng các ví dụ sau:

  • Chuyển tiếp cổng 80 từ máy chủ từ xa đến 8888 trên localhost của bạn

    ssh -fnN -L8888: localhost: 80 người dùng @ máy chủ

    Sử dụng điều này để truy cập các dịch vụ trên một máy chủ từ xa chỉ có sẵn ở đó

  • Chuyển tiếp cổng 80 từ yourlocalhost sang 8888 trên máy chủ từ xa

    ssh -fnN -R8888: localhost: 80 người dùng @ máy chủ

    Sử dụng điều này để cho phép người dùng có quyền truy cập dịch vụ của bạn: máy chủ web hoặc bất cứ điều gì.

Chúc mừng! :)


Nhận xét tốt, nhưng hoàn toàn không liên quan đến những gì chúng ta đang nói ở đây. Reverse ssh cho phép một SERVER yêu cầu CLIENT định tuyến MỘT cổng lưu lượng truy cập đến nó. Cần thêm cấu hình để định tuyến lưu lượng truy cập đó đến internet. Bạn cũng sẽ phải thiết lập một đường hầm SSH cho mỗi cổng. VÀ nó phải được bắt đầu từ máy chủ, không phải máy khách - đó là lý do tại sao bạn sẽ làm điều đó trừ khi bạn phải làm vậy?
Beachhouse
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.