2009-10-29 00:51:34 +0000 2009-10-29 00:51:34 +0000
120
120

Jak mogę tunelować cały mój ruch sieciowy przez SSH?

Ilekroć korzystam z internetu z niezabezpieczonej lokalizacji (np. publiczne wifi), lubię używać tunelu ssh (ssh -D port host), aby upewnić się, że mój ruch nie może być sniffowany. Niestety, wydaje się, że istnieje wiele aplikacji, które nie zapewniają sposobu na określenie proxy (Flash jest jednym z głównych przykładów).

Wydaje mi się, że powinien istnieć jakiś sposób, aby użyć tunelu dla wszystkiego ruchu sieciowego z mojego komputera, ale jestem kompletnym ignorantem jak to zrobić. Każda pomoc będzie bardzo doceniona.

Odpowiedzi (7)

65
65
65
2014-05-23 16:08:57 +0000

Aby zrobić to, co chcesz, polecam sshuttle .

Używasz go w ten sposób:

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

Będzie on tunelował cały twój ruch TCP automatycznie dla ciebie. Możesz dodać argument --dns, aby tunelować również ruch DNS. Zdalny serwer musi mieć tylko zainstalowany Python.

Jeśli chcesz tylko tunelować określone programy, polecam proxychains .

Po zainstalowaniu, uruchom ssh socks proxy w następujący sposób:

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

To uruchomi proxy “SOCKS” nasłuchujące na {local port>.

Następnie edytuj /etc/proxychains.conf, aby wskazać ten sam port co <lokalny port>.

Na koniec uruchom swój program, który ma być proxy-owany w następujący sposób:

proxychains <program name>

To powinno po prostu działać. Jednakże, kilka programów będzie miało problemy z obsługą łańcuchów proxy. Należy również pamiętać, że w przypadku Firefoksa trzeba zmienić dodatkowe pozycje w about:config, aby zmusić go do wykonywania wyszukiwania DNS przez proxy zamiast omijania go.

Jako dodatkowa uwaga, na temat przeglądarek internetowych. Jeśli obsługują one serwery proxy socks, nie musisz robić nic dodatkowego, aby użyć wyżej wymienionego tunelu ssh, wystarczy wpisać 127.0.0.1 dla serwera proxy SOCKS i \u2002 dla portu proxy.

EDIT 3/29/16

Ponieważ ten post wciąż widzi kilka upvotes, pomyślałem, że go zaktualizuję. Proxychains jest nadal w większości repozytoriów Linuksa i nadal działa na Linuksie. Jednakże, projekt jest skutecznie porzucony i nie działa na OSX. Zarówno dla Linuksa jak i OSX, gorąco polecam aktualizację do wciąż utrzymywanego forka: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Poza tym, że działa zarówno w Linuksie jak i OSX, jest łatwy do skompilowania, a także ma znacznie lepsze wsparcie dla tunelowania DNS.

Powinienem również wspomnieć o innej opcji, którą jest redsocks. Działa on podobnie do proxychains(-ng) i prawdopodobnie znajduje się również w twoim dist repo: https://github.com/darkk/redsocks

EDIT 11/27/19 Jeśli pójdziesz drogą proxychains, proszę użyj proxychains-ng. Jest tam kilka poważnych poprawek błędów w stosunku do wersji legacy, jak: https://github.com/rofl0r/proxychains-ng/issues/292

50
50
50
2011-07-18 10:24:01 +0000

man ssh podaje przykład dokładnie tego. Vpn oparty o 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

snip

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).

Gdy masz już ten nowy interfejs up, musiałbyś po prostu uczynić go domyślną trasą, co jest innym pytaniem.

6
6
6
2009-11-01 17:40:29 +0000

Poszukaj opcji “Tunnel” w ssh. Tworzy ona urządzenie tunelowe, do którego możesz przypisać adres IP, a następnie zmienić domyślną trasę tak, aby korzystała z tego tunelu.

4
4
4
2011-07-18 08:55:38 +0000

Stworzyłem oprogramowanie, które pozwala na przekierowanie wszystkich TCP i opcjonalnie UDP przez proxy SOCKS5, w całym systemie. http://code.google.com/p/badvpn/wiki/tun2socks

Można go nawet zainstalować na routerze, aby przekazywał wszystkie połączenia z komputerów w sieci LAN.

0
0
0
2013-03-12 22:57:21 +0000

WIRTUALNE SIECI PRYWATNE OPARTE NA SSH ssh zawiera wsparcie dla tunelowania wirtualnych sieci prywatnych (VPN) za pomocą pseudo-urządzenia sieciowego tun(4), pozwalającego na bezpieczne połączenie dwóch sieci. Opcja konfiguracyjna sshd_config(5) PermitTunnel kontroluje, czy serwer to obsługuje i na jakim poziomie (warstwa 2 lub 3 trafu).

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).
-2
-2
-2
2009-10-29 01:43:30 +0000

Chciałem tylko wyjaśnić, że (ssh -D port hosta) nie jest w 100% bezpiecznym sposobem na to, aby ruch nie był sniffowany. Dodanie (ssh -D -c blowfish port host) byłoby lepszym wyborem, ponieważ przynajmniej dodajesz szyfrowanie do sesji. Jest więcej opcji, które możesz dodać, ale jest to na tyle proste, że wystarczy wpisać “man ssh” w terminalu lub Google aby uzyskać pełną listę.

Opcją, której moim zdaniem szukasz, jest założenie VPN (Virtual Private Network)

Zajrzyj do tego artykułu, aby zrozumieć różnicę między nimi SSH vs. VPN ) lub do dobrej streszczonej wersji , zanim zajmiesz się założeniem własnego VPN. Jeśli zdecydujesz się na VPN, polecam OpenVPN , jest darmowy, ma dużo dokumentacji i wsparcia.

-3
-3
-3
2009-11-01 17:47:59 +0000

Użyj tych przykładów:

  • Forward port 80 from a remote host to 8888 on your localhost

  • Forward port 80 from yourlocalhost to 8888 on a remote host

Cheers! :)