109

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

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

7 ответов7

56

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

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

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

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

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

После установки запустите прокси-сервер ssh socks следующим образом:

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

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

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

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

proxychains <program name>

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

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

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

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

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

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

45

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

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

6

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

4

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

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

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

-1

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

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

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

-1

ВИРТУАЛЬНЫЕ ЧАСТНЫЕ СЕТИ НА ОСНОВЕ 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).
-3

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

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

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

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

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

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

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

Ура! :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .