Tüm ağ trafiğimi SSH üzerinden nasıl tünelleyebilirim?


117

Ne zaman interneti güvensiz bir yerden (halka açık wifi gibi) kullanıyorum, ssh -D port hosttrafiğimin engellenmemesini sağlamak için ssh tüneli ( ) kullanmayı seviyorum . Ne yazık ki, bir proxy belirtmenin bir yolunu sağlamayan pek çok uygulama var gibi görünüyor (Flash bir ana örnektir).

Bilgisayarımdaki tüm ağ trafiği için bir tünel kullanmanın bir yolu olması gerektiğini hissediyorum , ancak bunun nasıl yapılacağı konusunda tamamen bilgiliyim. Herhangi bir yardım çok takdir edilecektir.


16
Elbette ssh ile TÜM trafiğinizi tünelden çıkaramazsınız, çünkü bu ssh'i kendi içinden tünellemek anlamına gelir, ancak ne demek istediğinizi biliyorduk. :)
CarlF

1
bu iyi bir fikir ancak yalnızca bilgisayarınız ile ssh uç noktalarınız arasında korunuyorsunuz. Ondan sonra, trafiğiniz berraktır (aksi halde korunmadıkça, örneğin SSL). Bir tel üzerinden geçme olasılığı çok daha yüksek, ama yine de ... kontrol etmediğin kablolara gerçekten güvenemezsin.
quack quixote

6
Ancak, İnternet’te olduğunuzda milyarlarca paketten sadece biri olarak güvende olabilirsiniz, değil mi? Halka açık bir Wi-Fi'ye bağlandığınızda, belki 3 bağlantıdan birisiniz, kişisel olarak tanımlanabiliyorsunuz, vb.
Endolith

Yanıtlar:


62

İstediğini yapmak için, sshuttle tavsiye ederim .

Bunu böyle kullanıyorsun:

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

Tüm TCP trafiğini sizin için otomatik olarak tünelleyecektir. --dnsArgümanı, DNS trafiğinizi de tünel etmesi için ekleyebilirsiniz . Uzak sunucunun yalnızca Python kurulu olması gerekir.

Yalnızca belirli programları tünellemek istiyorsanız, vekilleri tavsiye ederim .

Kurulduktan sonra ssh socks proxy'nizi şöyle başlatın:

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

Bu, <yerel port> üzerinde dinleyen bir "SOCKS" proxy'si başlatır.

Ardından /etc/proxychains.conf dosyasını <yerel bağlantı noktası> ile aynı bağlantı noktasına işaret edecek şekilde düzenleyin.

Sonunda proxy-ed istediğiniz gibi programınıza başlayın:

proxychains <program name>

Sadece çalışması gerekir. Ancak, birkaç program Proxy Zincirleri ile çalışmakta zorlanacaktır. Ayrıca, Firefox’ta, aşağıdakiler altında ek öğeleri değiştirmeniz gerektiğini unutmayın: DNS'i atlamak yerine proxy üzerinden arama yapmaya zorlamak için.

Ek bir not olarak, web tarayıcılarında. Eğer çorap proxy'lerini destekliyorlarsa, yukarıda belirtilen ssh tünelini kullanmalarını sağlamak için ek bir şey yapmanıza gerek yoktur, SOCKS proxy sunucusu için 127.0.0.1, proxy portu için <yerel port> yazmanız yeterlidir.

EDIT 3/29/16

Bu gönderi hala bazı artılar görmeye başladığından, güncellemeyi düşündüm. Proxychains hala çoğu Linux deposunda ve hala Linux üzerinde çalışmaktadır. Ancak, proje etkin bir şekilde terk edildi ve OSX üzerinde çalışmıyor. Hem Linux hem de OSX için, sabit bir çatalı yükseltmeyi şiddetle tavsiye ederim: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Hem Linux hem de OSX'te çalışmanın yanı sıra, derlenmesi kolaydır ve DNS tünelleme için çok daha iyi desteği vardır.

Ayrıca redsocks olan başka bir seçenekden de bahsetmeliyim. Proxychain'lere (-ng) benzer şekilde çalışır ve aynı zamanda deponuzda da olabilir: https://github.com/darkk/redsocks


Sshuttle kullanan daha yeni Linux sistemleri için not: Yazarken, size kırılan boru verebilecek bir çekirdek böceği var. Bu durumda, şunları kullanın:sshuttle -r root@host -x host 0/0
aggregate1166877

49

man sshtam olarak bu bir örnek verir. Bir ssh tabanlı vpn:

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

Bu yeni arayüze sahip olduğunuzda, onu farklı bir soru olan varsayılan yol yapmak zorunda kalacaksınız.


1
Biraz daha açıklayabilir misiniz? İfconfig komutu, tun0 adlı yeni bir arayüz oluşturur, değil mi? Veya tun0 ssh tarafından yaratılmış ve daha sonra ifconfig tarafından yapılandırılmış mı? Belki soruyla alakalı bir örnek ekleyebilirim?
Kimse

6

Ssh içindeki "Tünel" seçeneğini arayın. Bu, bir IP adresi atayabileceğiniz bir tünel aygıtı oluşturur ve ardından bu tüneli kullanmak için varsayılan rotayı değiştirirsiniz.



0

SSH TABANLI SANAL ÖZEL AĞLAR ssh, tun (4) ağ sözde aygıtını kullanarak Sanal Özel Ağ (VPN) tünelini destekleyerek iki ağın güvenli bir şekilde birleştirilmesini sağlar. Sshd_config (5) yapılandırma seçeneği PermitTunnel, sunucunun bunu destekleyip desteklemediğini ve hangi düzeyde (katman 2 veya 3 trafik) kontrol eder.

 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
Lütfen bilgileriniz için bir kaynak ekleyin. not: Bu eski bir soru.
Lorenzo Von Matterhorn

-2

Sadece (ssh -D port host) trafiğin engellenmemesi için% 100 güvenli bir yol olmadığını temizlemek istedim. Oturumunuza şifreleme ekleyebileceğiniz için (ssh -D -c blowfish port host) eklemek daha iyi bir seçim olacaktır. Ekleyebileceğiniz daha fazla seçenek var, ancak tam bir liste için terminalinize veya Google’a "man ssh" yazmanız yeterli.

Aradığımı düşündüğüm seçenek bir VPN (Sanal Özel Ağ) kurma

Kendi VPN'inizi kurmadan önce , ikisi ( SSH - VPN ) veya iyi bir özet sürüm arasındaki farkları anlamak için bu makaleye bir göz atın . VPN yoluna gitmeye karar verirseniz, OpenVPN'i ücretsiz ve çok sayıda belge ve destekle tavsiye ederim .


6
kötü tavsiye. "blowfish" bir SSH-1 şifresidir; hızlı, güvenli olduğu düşünüldü (1999 itibariyle: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), ama yine de. Muhtemelen istediğiniz ssh -2 -C -D [...](SSH2 zorla, sıkıştırma kullanın) ve bırakın -c. sistemime göre man sshSSH2 deki şifre listesi varsayılan olarak aes128-cbc,3des-cbc,blowfish-cbc,[etc]. -c blowfishDemek istediğim , eğer talep ederseniz, SSH2'den çok daha az güvenli olan SSH1 ile sonuçlanabilirsiniz.
quack quixote

2
Doğru, ama Jeremy bağlantının sadece -D 8080 ile güvenli olduğu izlenimi altındaydı, sadece kullandığından daha iyi olduğunu söylemiştim. Geçerli bir noktaya değiniyorsunuz ve bu yüzden daha fazla seçenek için kılavuzdan söz ediyorum.
ricbax

Belki de cevabınızı değiştirmelisiniz, çünkü aksi takdirde yardımcı olur.
Endolith

Unuttum bunu sordum, bu siteyi düzenli kullanmayın. Açıklama için teşekkürler ... SSH'nin varsayılan olarak güvenli olduğuna dair güçlü bir izlenim edindim.
Jeremy Banks

9
WTF varsayılan olarak şifreleme kullanarak SSH değildir ??
LatinSuD

-3

Bu örnekleri kullanın:

  • Bağlantı noktasını 80 uzak bir ana bilgisayardan yerel ana makinenizde 8888'e iletin

    ssh -fnN -L8888: yerel bilgisayar: 80 kullanıcı @ sunucu

    Bunu yalnızca orada kullanılabilen uzaktaki bir ana bilgisayardaki servislere erişmek için kullanın.

  • Uzaktaki bir ana makinede 80 numaralı bağlantı noktasını yerel ana makinenizden 8888'e yönlendirin

    ssh -fnN -R8888: yerel ana bilgisayar: 80 user @ server

    Bunu, kullanıcıların hizmetlerinize erişmesine izin vermek için kullanın: web sunucusu veya başka bir şey.

Şerefe! :)


İyi yorum, ama burada neyden bahsettiğimizle ilgili değil. Ters ssh, bir SUNUCU’nun bir MÜŞTERİ’nin kendisine BİR TİP bağlantı noktası yönlendirmesini istemesini sağlar. Bu trafiği internete yönlendirmek için daha fazla konfigürasyon gerekli olacaktır. Ayrıca her port için bir SSH tüneli kurmanız gerekir. VE istemciden değil, sunucudan başlatılmalıdır - bunu yapmak zorunda olmadıkça neden böyle yaptın?
Beachhouse
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.