Как я могу туннелировать весь мой сетевой трафик через SSH?

157736
user

Всякий раз, когда я пользуюсь Интернетом из небезопасного места (такого как общедоступный Wi-Fi), я люблю использовать ssh туннель ( ssh -D port host), чтобы гарантировать, что мой трафик не может быть прослушан. К сожалению, кажется, что есть много приложений, которые не предоставляют способ указать прокси (Flash является одним из основных примеров).

Такое ощущение, что должен быть какой-то способ использовать туннель для всего сетевого трафика с моего компьютера, но я совершенно не знаю, как это сделать. Любая помощь будет принята с благодарностью.

108
Конечно, вы не можете туннелировать буквально ВСЕ ваш трафик через ssh, потому что это будет означать туннелирование ssh через себя, но мы знали, что вы имеете в виду. :) CarlF 14 лет назад 14
Это хорошая идея, но вы защищены только между вашим компьютером и конечной точкой ssh. после этого ваш трафик остается открытым (если не защищено иное, например, SSL). Конечно, это гораздо вероятнее, чем через провод, но все же ... вы не можете доверять проводам, которые не контролируете. quack quixote 14 лет назад 1
Но когда вы выходите в широкий Интернет, вы можете быть в безопасности, будучи лишь одним из миллиардов пакетов, верно? Когда вы подключаетесь к общедоступному Wi-Fi, у вас одно из трех подключений, вас могут идентифицировать лично и т. Д. endolith 14 лет назад 6

7 ответов на вопрос

54
shellster

To do what you are wanting, I recommend sshuttle.

You use it like this:

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

It will tunnel all your TCP traffic automatically for you. You can add the --dns argument to have it tunnel your DNS traffic as well. The remote server only needs to have Python installed.

If you only want to tunnel specific programs I would recommend proxychains.

Once it is installed, start your ssh socks proxy like this:

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

This will start a "SOCKS" proxy listening on <local port>.

Then edit /etc/proxychains.conf to point to the same port as <local port>.

Finally start your program that you want proxy-ed like so:

proxychains <program name> 

It should just work. However, a few programs will have trouble working with Proxy Chains. Also keep in mind, that with Firefox, you have to change additional items under about:config to force it to do DNS lookups through the proxy instead of bypassing it.

As an additional note, on web browsers. If they support socks proxies, you don't need to do anything additional to get them to use the above mentioned, ssh tunnel, just enter 127.0.0.1 for the SOCKS proxy server and the <local port> for the proxy port.

EDIT 3/29/16

Since this post is still seeing some upvotes, I thought I'd update it. Proxychains is still in most Linux repos and still works on Linux. However, the project is effectively abandoned and does not work on OSX. For either Linux or OSX, I highly recommend upgrading to a still-maintained fork: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Besides working in both Linux and OSX, it is easy to compile, and also has much better support for DNS tunneling.

I should also mention another option, which is redsocks. It works similarly to proxychains(-ng) and is also likely in your dist repo: https://github.com/darkk/redsocks

44
PriceChild

man sshдает пример именно этого. ВПН на основе 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). 

Как только у вас появится этот новый интерфейс, вам просто нужно будет сделать его маршрутом по умолчанию, а это другой вопрос.

Не могли бы вы объяснить немного больше? Команда ifconfig создает новые интерфейсы с именем tun0, верно? Или tun0 создается с помощью ssh и просто настраивается с помощью ifconfig? Может быть, добавить пример, имеющий отношение к вопросу? Nobody 7 лет назад 0
7
Peter Eisentraut

Ищите опцию «Туннель» в ssh. Это создаст туннельное устройство, которому вы можете назначить IP-адрес, а затем вы измените маршрут по умолчанию для использования этого туннеля.

4
Ambroz Bizjak

Я разработал программное обеспечение, которое позволяет вам пересылать все TCP и, опционально, UDP через прокси-сервер SOCKS5 для всей системы.

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

Он даже может быть установлен на маршрутизаторе для пересылки всех соединений с компьютеров в локальной сети.

-1
ricbax

Я просто хотел прояснить, что (хост порта ssh -D) не является 100% безопасным способом для отслеживания трафика. Добавление (ssh -D -c хозяина порта blowfish) будет лучшим выбором, потому что вы как минимум добавляете шифрование в свой сеанс. Вы можете добавить больше опций, но достаточно просто набрать «man ssh» в своем терминале или в Google, чтобы получить полный список.

Я думаю, что вам нужен вариант настройки VPN (виртуальная частная сеть)

Перед тем, как приступить к настройке собственной VPN, ознакомьтесь с этой статьей, чтобы понять разницу между этими двумя понятиями ( SSH и VPN ) или хорошую обобщенную версию . Если вы решите пойти по VPN-маршруту, я рекомендую OpenVPN, его бесплатное и множество документации и поддержки.

плохой совет. «blowfish» - это шифр SSH-1; это быстро, считается безопасным (по состоянию на 1999: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1), но все же. вы, вероятно, хотите `ssh -2 -C -D [...]` (принудительно использовать SSH2, использовать сжатие) и удалить `-c`. в соответствии с `man ssh` моей системы список шифров в SSH2 по умолчанию равен` aes128-cbc, 3des-cbc, blowfish-cbc, [etc] `. моя точка зрения такова: если вы запросите `-c blowfish`, вы можете получить SSH1, который намного менее безопасен, чем SSH2. quack quixote 14 лет назад 6
Правда, но у Джереми сложилось впечатление, что соединение было защищено только с -D 8080, я просто заявил, что это было лучше, чем то, что он использовал. Вы делаете правильное замечание, и поэтому я упоминаю руководство для большего количества вариантов. ricbax 14 лет назад 2
Может быть, вы должны изменить свой ответ, так как это полезно в противном случае. endolith 14 лет назад 0
Забыл, я спросил об этом, не пользуйтесь этим сайтом регулярно. Спасибо за разъяснения ... У меня сложилось впечатление, что SSH по умолчанию безопасен. user 13 лет назад 0
WTF не использует SSH по умолчанию шифрование ?? LatinSuD 12 лет назад 8
-1
Kristian Hermansen

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 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). 
пожалуйста, добавьте источник вашей информации. примечание: это старый вопрос. Lorenzo Von Matterhorn 11 лет назад 1
-3
kolypto

Используйте эти примеры:

  • Перенаправить порт 80 с удаленного хоста на 8888 на вашем локальном хосте

    ssh -fnN -L8888: localhost: 80 пользователь @ сервер

    Используйте это для доступа к службам на удаленном хосте, которые доступны только там

  • Перенаправьте порт 80 с вашего локального хоста на 8888 на удаленном хосте

    ssh -fnN -R8888: localhost: 80 пользователь @ сервер

    Используйте это, чтобы предоставить пользователям доступ к вашим услугам: веб-серверу или как угодно.

Ура! :)

Хороший комментарий, но никак не связанный с тем, о чем мы здесь говорим. Обратный ssh ​​позволяет СЕРВЕРУ запрашивать, чтобы КЛИЕНТ направил ОДИН порт трафика к нему. Потребовалось бы больше конфигурации, чтобы затем направить этот трафик в Интернет. Вам также необходимо настроить туннель SSH для каждого порта. И это должно быть инициировано с сервера, а не с клиента - зачем вам это когда-либо делать, если бы вам не пришлось? Beachhouse 10 лет назад 0

Похожие вопросы