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

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

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

Чтобы делать то, что вы хотите, я рекомендую sshuttle .

Вы используете его так:

 ./sshuttle -r [email protected] 0.0.0.0/0 -vv 

Он автоматически перетащит ваш TCP-трафик. Вы можете добавить аргумент --dns чтобы он туннелировал ваш DNS-трафик. На удаленном сервере должен быть установлен Python.

Если вы хотите только туннелировать определенные программы, я бы рекомендовал proxychains .

Как только он будет установлен, запустите свой ssh ​​socks proxy следующим образом:

 ssh -fND 127.0.0.1:<local port> [email protected] 

Это запустит прокси-сервер SOCKS, прослушивающий <локальный порт>.

Затем отредактируйте /etc/proxychains.conf, чтобы указать на тот же порт, что и <локальный порт>.

Наконец, запустите свою программу, которую вы хотите прокси-издать так:

 proxychains <program name> 

Он должен просто работать. Тем не менее, некоторые программы будут работать с прокси-цепочками. Также имейте в виду, что с Firefox вам нужно изменить дополнительные элементы: about config, чтобы заставить DNS выполнять поиск через прокси вместо обхода.

В качестве дополнительной заметки, в веб-браузерах. Если они поддерживают прокси-серверы socks, вам не нужно ничего делать, чтобы заставить их использовать вышеупомянутый туннель ssh, просто введите 127.0.0.1 для прокси-сервера SOCKS и <локальный порт> для прокси-порта.

РЕДАКТИРОВАТЬ 3/29/16

Поскольку этот пост по-прежнему видит некоторые обороты, я решил обновить его. Proxychains все еще находится в большинстве репозиториев Linux и по-прежнему работает в Linux. Однако проект фактически оставлен и не работает на OSX. Для Linux или OSX я настоятельно рекомендую обновить до неподвижной вилки: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Помимо работы в Linux и OSX, его легко компилировать, а также гораздо лучше поддерживать туннелирование DNS.

Я должен также упомянуть еще один вариант, который является redsocks. Он работает аналогично proxychains (-ng), а также, вероятно, на вашем репорте dist: https://github.com/darkk/redsocks

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

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

Вы должны взглянуть на sshuttle .

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

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

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

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

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

Опция, которую я думаю, что вы ищете, – это создание VPN (виртуальной частной сети)

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

SSH-ОСНОВНЫЕ ВИРТУАЛЬНЫЕ ЧАСТНЫЕ СЕТИ ssh содержит поддержку туннелирования виртуальной частной сети (VPN) с использованием псевдо-устройства сети tun (4), позволяющее надежно подключать две сети. Параметр конфигурации sshd_config (5) PermitTunnel определяет, поддерживает ли сервер это и на каком уровне (уровень 2 или 3 трафик).

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

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

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

      Ssh -fnN -L8888: localhost: 80 user @ server 

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

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

      Ssh -fnN -R8888: localhost: 80 user @ server 

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

Ура! 🙂

Давайте будем гением компьютера.