На своем компьютере установим sshuttle:
- либо с помощью
pip install sshuttle
- либо с помощью копирования исходников с github
git clone https://github.com/sshuttle/sshuttle.git && python setup.py install
- пользователи debian могут это сделать так:
apt-get install sshuttle
Далее нужно выполнить простую команду:
sudo sshuttle -r username@sshserver 0.0.0.0/0
где username — логин на удаленном виртуальном сервере, sshserver — его IP-адрес или доменное имя, параметр 0.0.0.0/0 означает, что мы собираемся добавить в нашу таблицу маршрутизации правило, благодаря которому весь исходящий трафик будет отправляться на удалённый сервер, за исключением DNS-запросов. Разработчик намеренно не включает по умолчанию этот функционал для DNS, потому что у некоторых пользователей для выхода в интернет должны использоваться провайдерские серверы разрешения имен. Если мы можем пользоваться любыми DNS-серверами, то и запросы к ним можем “завернуть” в наш шифрованный SSH-туннель:
sshuttle --dns -r username@sshserver 0.0.0.0/0
Помимо этого мы можем направлять в туннель наш исходящий трафик не полностью, а только для определенных IP-подсетей, указывая соответствующий параметр:
sshuttle -r username@sshserver 11.12.13.14/0
Преимущества этого решения в следующем:
- у Вас нет необходимости иметь права администратора на удалённом сервере, используемом для выхода в интернет
- Вам не нужно создавать правила SSH для форварда каждого порта
Недостаток только один (если это можно назвать недостатком): sshuttle не поддерживает Windows, пользователям этой ОС можно сделать костыль в виде VM.
Комментарии (33)
Ranckont
29.12.2016 10:33stunnel — винда и линукс, но подсети не умеет
Есть даже статья на https://habrahabr.ru/post/247167/trim777
29.12.2016 10:34Насколько я понял, с задачей, рассмотренной в этой статье, справится и Putty с преднастроенным SSH-туннелем.
bykvaadm
29.12.2016 10:44-1Наверное в статье речь идет о маршрутизации, а путти у меет в проксирование. Не все программы могут в прокси, нужен доп.софт. А этот, вероятно, позволяет обойтись без него.
vconst
29.12.2016 11:11Мобильного решения нет, это сейчас большой минус.
Я на Андроид пользуюсь SSH Tunnel, на сервере не нужно никаких настроек — только работающий SSH
sotnikdv
29.12.2016 12:38-1Я добавлю ложку дегтя.
К огромному сожалению этого хватит только для нетребовательного к скорости серфинга при хорошем канале и низком пинге. TCP плохо туннелируется через TCP и потери плюс высокий пинг очень сильно просаживает скорость из-за особенности протокола в автоподстройке.Это известная проблема tcp-over-tcp.
Хотя, как быстрое решение sshuttle просто великолепен, не нужно руками прописывать правила в iptables.
В обем, понимайте ограничения решения. Если нужен VPN всерьез и надолго, ставьте что-то типа OpenVPN.
И sftp тоже тормоз еще тот при высокой latency, но там другая проблема, которую не пофиксят уже не первый десяток лет AFAIK. В итоге на канале США-Европа скорость sftp падает до 20кб\сек там, где ftp/s дает 100мбит не надуваясь.
Поэтому многие советы по ssh-туннеленгу и даже советы обеспечения безопасности через вывешивание сервера на локалхост и затем ssh-туннель они несколько вредительские, т.к. забывают о проблеме скорости.
P.S. Нагрузка на современных процессорах смешная, т.к. там гибридное шифрование, в основном шифрование потока данных на AES, а он мало того, что феерически быстрый, так еще и аппаратно ускорен. Скажем так, 200 мбайт\сек (не мбит) ваш проц выдаст не надуваясь. Да и EC и RSA, ходят байки, ускорен на consumer segment, но мне кажется лектор по безопасности загнался.trim777
29.12.2016 12:41+3По поводу скорости: нашёл только одно более-менее нормальное сравнение OpenVPN vs SSH.
E_STRICT
29.12.2016 22:01Для веб серфинга можно использовать Оперу, которая с недавних пор имеет встроенный ВПН.
mkll
29.12.2016 22:29В итоге на канале США-Европа скорость sftp падает до 20кб\сек там, где ftp/s дает 100мбит не надуваясь.
Когда-то столкнулся с тем, что при перекачке больших объемов данных даже простой ftp не выбирал имеющуюся полосу и близко. Поискал, нашел и с тех пор пользуюсь bbcp. Очень рекомендую. Выжимает из канала всё.
ValdikSS
30.12.2016 13:02sshuttle assembles the TCP stream locally, multiplexes it statefully over an ssh session, and disassembles it back into packets at the other end. So it never ends up doing TCP-over-TCP. It’s just data-over-TCP, which is safe.
At0mik
29.12.2016 13:25Для информации, ocserv(сервер)+openconnect(клиент) можно настроить практически так-же быстро.
1) Установка сервера и клиента
2) сгенерить серверный ключ и сертификат: одна команда openssl
(а лучше скормить ему готовый сертификат от letsencrypt )
3) Убрать комент на паре линий в настройке сервера (активировать PAM аутентификацию + дать путь на server-cert/key)
4) использовать клиент: openconnect remote_server
5) профит :)
Но решение автора тоже интересна. Именно тем что не надо быть админом на сервере. Спасибо за информацию.SpiritOfVox
29.12.2016 14:08При использовании ssh по сути не нужно даже на сервере команд выполнять. Вбиваешь логин и пароль в локальный прокси и всё.
SpiritOfVox
29.12.2016 14:06Не забывайте, что это, вероятно, единственный простой способ на Windows удобно направлять в туннель только тот трафик который вы хотите. Допустим весь сёрфинг в туннель, а YouTube напрямую. Для этого нужно настроить или программы «проксифаеры» или дополнение к браузеру, например foxyproxy
Evengard
29.12.2016 21:31Под windows для аналогичной задачи можно воспользоваться badvpn-tun2socks. Единственный drawback то, что по дефолту оно поддерживает только tcp соединения, дропая udp, но если поставить badvpn-udpgw на сервере и соответственно всё настроить (там не очень сложно), то можно и udp тоже так прокинуть. К сожалению ничего кроме tcp или udp таким способом не прокинуть, но это и не так часто требуется, а если уж потребуется можно и полноценный vpn сервер поднять.
Antispammer
06.01.2017 22:30На Виндовс я поднимал реверсный SSH-туннель (при помощи PuTTY), который в браузер прописывался как прокси, работает на ура.
BlackRaven86
Какая у такого решения скорость/насколько сильно загружается процессор?
foxin
Локальный процессор или VPS?
BlackRaven86
Локальный.
Ivan_83
Это сильно зависит от настроек ссш сервера, клиента, ОС с обоих сторон и опций с которым собран сервер и клиент.
Если используется AES и в проце есть AES-ni либо используется chacha20 то проц сильно грузить не будет, но помимо шифра нужно ещё смотреть какой MAC выбран.
Сильнее всего грузит проц сжатие трафика.
Для скорости есть патч HPN, но его в базу OpenSSH почему то не берут.
Ещё на скорость влияют sysctl связанные с настройкой размеров буферов, tcp_no_delay, ecn, алгоритм контроля перегрузки (cc), потери в линии, RTT.
Не давно перекидывал файл по sshfs, получилось почти 6 мегабайт/сек по мск.
Дома 15 мегабайт/сек, при этом ssh упирается в проц — он у меня без aes-ni (коредуо е8400) со сжатием на 6, без сжатия 60 мегабайт/сек и только половина одного ядра загружена ссш клиентом.
В общем и целом скорость получается как у одного TCP соединения, с оверхэдом на служебку ссш.
dglushenok
Для передачи файлов часто пользуюсь "-c arcfour" — быстрее на порядок дефолтных шифров, менее безопасный, но все-же шифр.
bykvaadm
А чтоб вам в автомобиле не пользоваться воздушным шариком вместо подушки безопасности? более дешево и просто в эксплуатации. Что заморачиваться
dglushenok
Шарик не предназначен для использования в качестве подушки безопасности. Не вводите людей в заблуждение.