Если Вы предпочитаете простые и красивые решения, или Вам нравится всё, что попадает под категорию It Just Works, то эта статья для Вас. Для запуска шифрованного подключения достаточно иметь на своем компьютере SSH-клиент, установить sshuttle (об этом чуть позже) и приобрести VPS с любым тарифным планом в интересующей Вас стране. На удалённой VPS-машине в большинстве случаев абсолютно ничего настраивать не нужно (достаточно, чтобы были установлены пакеты python и сервер SSH).



На своем компьютере установим 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)


  1. BlackRaven86
    29.12.2016 01:23
    +1

    Какая у такого решения скорость/насколько сильно загружается процессор?


    1. foxin
      29.12.2016 01:32

      Локальный процессор или VPS?


      1. BlackRaven86
        29.12.2016 01:58

        Локальный.


    1. Ivan_83
      29.12.2016 03:01
      +3

      Это сильно зависит от настроек ссш сервера, клиента, ОС с обоих сторон и опций с которым собран сервер и клиент.
      Если используется AES и в проце есть AES-ni либо используется chacha20 то проц сильно грузить не будет, но помимо шифра нужно ещё смотреть какой MAC выбран.
      Сильнее всего грузит проц сжатие трафика.

      Для скорости есть патч HPN, но его в базу OpenSSH почему то не берут.
      Ещё на скорость влияют sysctl связанные с настройкой размеров буферов, tcp_no_delay, ecn, алгоритм контроля перегрузки (cc), потери в линии, RTT.
      Не давно перекидывал файл по sshfs, получилось почти 6 мегабайт/сек по мск.
      Дома 15 мегабайт/сек, при этом ssh упирается в проц — он у меня без aes-ni (коредуо е8400) со сжатием на 6, без сжатия 60 мегабайт/сек и только половина одного ядра загружена ссш клиентом.

      В общем и целом скорость получается как у одного TCP соединения, с оверхэдом на служебку ссш.


      1. dglushenok
        29.12.2016 09:22

        Для передачи файлов часто пользуюсь "-c arcfour" — быстрее на порядок дефолтных шифров, менее безопасный, но все-же шифр.


        1. bykvaadm
          29.12.2016 10:42
          -1

          А чтоб вам в автомобиле не пользоваться воздушным шариком вместо подушки безопасности? более дешево и просто в эксплуатации. Что заморачиваться


          1. dglushenok
            29.12.2016 10:47
            +1

            Шарик не предназначен для использования в качестве подушки безопасности. Не вводите людей в заблуждение.


  1. Ranckont
    29.12.2016 10:33

    stunnel — винда и линукс, но подсети не умеет
    Есть даже статья на https://habrahabr.ru/post/247167/


    1. trim777
      29.12.2016 10:34

      Насколько я понял, с задачей, рассмотренной в этой статье, справится и Putty с преднастроенным SSH-туннелем.


      1. bykvaadm
        29.12.2016 10:44
        -1

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


  1. vconst
    29.12.2016 11:11

    Мобильного решения нет, это сейчас большой минус.
    Я на Андроид пользуюсь SSH Tunnel, на сервере не нужно никаких настроек — только работающий SSH


  1. E_STRICT
    29.12.2016 12:25

    Автризация через SSH ключи поддерижвается?


    1. mkll
      29.12.2016 22:03

      Ему пофиг, он просто запускает SSH, а уж какая там авторизация — неважно. Это «теория». А на практике — работает, только что пробовал.


      1. E_STRICT
        29.12.2016 22:19

        У меня почему то не завелось.


        1. mkll
          29.12.2016 22:30

          А в чем это заключается?


          1. E_STRICT
            30.12.2016 14:15

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


            1. mkll
              30.12.2016 14:42

              У меня он запросил локальный пароль для sudo.


  1. 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, но мне кажется лектор по безопасности загнался.


    1. trim777
      29.12.2016 12:41
      +3

      По поводу скорости: нашёл только одно более-менее нормальное сравнение OpenVPN vs SSH.


    1. E_STRICT
      29.12.2016 22:01

      Для веб серфинга можно использовать Оперу, которая с недавних пор имеет встроенный ВПН.


    1. mkll
      29.12.2016 22:29

      В итоге на канале США-Европа скорость sftp падает до 20кб\сек там, где ftp/s дает 100мбит не надуваясь.


      Когда-то столкнулся с тем, что при перекачке больших объемов данных даже простой ftp не выбирал имеющуюся полосу и близко. Поискал, нашел и с тех пор пользуюсь bbcp. Очень рекомендую. Выжимает из канала всё.


    1. mkll
      29.12.2016 22:31

      https://github.com/trailofbits/algo


    1. ValdikSS
      30.12.2016 13:02

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


  1. At0mik
    29.12.2016 13:25

    Для информации, ocserv(сервер)+openconnect(клиент) можно настроить практически так-же быстро.
    1) Установка сервера и клиента
    2) сгенерить серверный ключ и сертификат: одна команда openssl
    (а лучше скормить ему готовый сертификат от letsencrypt )
    3) Убрать комент на паре линий в настройке сервера (активировать PAM аутентификацию + дать путь на server-cert/key)
    4) использовать клиент: openconnect remote_server
    5) профит :)

    Но решение автора тоже интересна. Именно тем что не надо быть админом на сервере. Спасибо за информацию.


    1. SpiritOfVox
      29.12.2016 14:08

      При использовании ssh по сути не нужно даже на сервере команд выполнять. Вбиваешь логин и пароль в локальный прокси и всё.


    1. stychos
      29.12.2016 14:31

      Да и strongSwan и SoftEther, и уж тем более PPTP моно также быстро сделать.


  1. SpiritOfVox
    29.12.2016 14:06

    Не забывайте, что это, вероятно, единственный простой способ на Windows удобно направлять в туннель только тот трафик который вы хотите. Допустим весь сёрфинг в туннель, а YouTube напрямую. Для этого нужно настроить или программы «проксифаеры» или дополнение к браузеру, например foxyproxy


  1. Evengard
    29.12.2016 21:31

    Под windows для аналогичной задачи можно воспользоваться badvpn-tun2socks. Единственный drawback то, что по дефолту оно поддерживает только tcp соединения, дропая udp, но если поставить badvpn-udpgw на сервере и соответственно всё настроить (там не очень сложно), то можно и udp тоже так прокинуть. К сожалению ничего кроме tcp или udp таким способом не прокинуть, но это и не так часто требуется, а если уж потребуется можно и полноценный vpn сервер поднять.


  1. ErhoSen
    30.12.2016 01:11

    Про It just works — InstaVPN. Поднял года полтора назад — ни единого нарекания.


  1. DiDAN
    03.01.2017 17:56

    Если речь идет о простом серфинге без заморочек — чем плох Betternet?


    1. ckr
      04.01.2017 14:11

      В Betternet можно выбрать страну? Есть Россия?


      1. DiDAN
        05.01.2017 07:53

        USA & UK


  1. Antispammer
    06.01.2017 22:30

    На Виндовс я поднимал реверсный SSH-туннель (при помощи PuTTY), который в браузер прописывался как прокси, работает на ура.