Сегодня листал статейки на Хабре и наткнулся на прикольную штуку. Скажу сразу, что к названию темы она не имеет отношения (впрочем и перечисленные выше способы тоже не тянут на сверханонимность). В общем мануал для лентяев-распиздяев, которым нужно по быстрому сменить ип.
Извращенные методы туннелирования трафика: часть 1. Прощай openvpn, привет sshuttle
Кажется, что я вспомнил про свой блог и решил сюда чего-нибудь написать. Точнее, не чего-нибудь, а самый прекрасный способ быстренько организовать себе VPN-соединение через другой сервер.
На «другой сервер» вам нужен только ssh (при том — не обязательно под рутом). Ещё на той стороне понадобится установленный python 2.3+ (а это все дебианы, начиная с 4-ки, кажется, и все убунты, начиная с 8.04). Ну и понадобится рутовый доступ на своём любимом ноутбучке. Всё — этого достаточно для того, чтобы зароутить весь трафик системы через ssh через сервер у нормального провайдера.
Заинтригованы? Поехали.
Для начала, поставим виновника торжества — пакет sshuttle
Теперь цепляем VPN:
Последней командой мы завернули весь ipv4-трафик (0.0.0.0/0) своей системы через ssh-туннель до remoteserver. Всё.
Когда я первый раз наткнулся на эту утилиту у меня на лице выражение было с тегом «WAT?». Это же действительно гениально, ей б-гу. SSH-ей у всех хватает, OpenVPN поднимать ради «раз в неделю из открытой wifi-сети посидеть» лениво (окей-окей, не всем).
Ну да ладно, теперь о технических деталях. Сначала о минусах. Первый минус — нет поддержки ipv6. Второй — медленно, блеа! 2 мегабита в секунду через hetzner (с RTT всё хорошо, тем не менее). Но с медленно — это понятно, это ssh, он зашифрован на отличненько, хочет хороший процессор с обеих сторон (а у меня на второй стороне виртуалка с одним ядром). Ещё к минусам можно отнести то, что из коробки он пробрасывает через себя только tcp (и udp пробрасывает хреново, хотя и справляется с dns-трафиком).
Плюсы — мало кто догадывается, что можно делать так. Сами знаете о чём я. Следующий плюс — оно действительно «Just works» и не нужно ни с чем извращаться.
Теперь о том, как работает.
1) в момент запуска sshuttle копирует на удаленный сервер некий assembler.py (/usr/lib/sshuttle/assembler.py с ноута)
2) запускает assembler.py на удаленном сервере (python2 -c import sys; skip_imports=1; verbosity=2; exec compile(sys.stdin.read(764), «assembler.py», «exec»))
3) запускает на локалхосте /usr/lib/sshuttle/main.py
4) в iptables добавляет правило, по которым весь tcp трафик заворачивается в ssh-туннель.
Ещё несколько примеров. Завернем DNS трафик через туннель тоже:
(учтите, что если у вас в resolv.conf прописаны провайдерские dns-резолверы, то к ним вас после этой команды могут «не пустить». Впрочем — кто такой херней страдает и оставляет провайдерские dns?)
Используем ssh-ключ для коннекта:
Используем ssh-агента для коннекта:
Отроутим трафик через ssh только до определенных сетей/хостов:
Да, ещё где-то в недрах «это ж опенсорс!» есть версия, которая умеет роутить вообще весь трафик (и icmp, и весь udp), но она не очень похожа на стабильную. - вот здесь (это НЕ апстрим проекта).
И если вы никуда не торопитесь — то такой туннель можно поднять и внутри любого другого VPN-соединения ;)
Статья с Хабра, где вкратце описывается эта утилита (там же есть ссылка на костыль для виндузятников)
Оригинал обзора приведённого выше (там же можно почитать "Уголок параноика")
Извращенные методы туннелирования трафика: часть 1. Прощай openvpn, привет sshuttle
Кажется, что я вспомнил про свой блог и решил сюда чего-нибудь написать. Точнее, не чего-нибудь, а самый прекрасный способ быстренько организовать себе VPN-соединение через другой сервер.
На «другой сервер» вам нужен только ssh (при том — не обязательно под рутом). Ещё на той стороне понадобится установленный python 2.3+ (а это все дебианы, начиная с 4-ки, кажется, и все убунты, начиная с 8.04). Ну и понадобится рутовый доступ на своём любимом ноутбучке. Всё — этого достаточно для того, чтобы зароутить весь трафик системы через ssh через сервер у нормального провайдера.
Заинтригованы? Поехали.
Для начала, поставим виновника торжества — пакет sshuttle
Код:
root@laptop:~# apt-get install sshuttle
Теперь цепляем VPN:
Код:
root@laptop:~# sshuttle -r user@remoteserver 0.0.0.0/0 -vv
Последней командой мы завернули весь ipv4-трафик (0.0.0.0/0) своей системы через ssh-туннель до remoteserver. Всё.
Когда я первый раз наткнулся на эту утилиту у меня на лице выражение было с тегом «WAT?». Это же действительно гениально, ей б-гу. SSH-ей у всех хватает, OpenVPN поднимать ради «раз в неделю из открытой wifi-сети посидеть» лениво (окей-окей, не всем).
Ну да ладно, теперь о технических деталях. Сначала о минусах. Первый минус — нет поддержки ipv6. Второй — медленно, блеа! 2 мегабита в секунду через hetzner (с RTT всё хорошо, тем не менее). Но с медленно — это понятно, это ssh, он зашифрован на отличненько, хочет хороший процессор с обеих сторон (а у меня на второй стороне виртуалка с одним ядром). Ещё к минусам можно отнести то, что из коробки он пробрасывает через себя только tcp (и udp пробрасывает хреново, хотя и справляется с dns-трафиком).
Плюсы — мало кто догадывается, что можно делать так. Сами знаете о чём я. Следующий плюс — оно действительно «Just works» и не нужно ни с чем извращаться.
Теперь о том, как работает.
1) в момент запуска sshuttle копирует на удаленный сервер некий assembler.py (/usr/lib/sshuttle/assembler.py с ноута)
2) запускает assembler.py на удаленном сервере (python2 -c import sys; skip_imports=1; verbosity=2; exec compile(sys.stdin.read(764), «assembler.py», «exec»))
3) запускает на локалхосте /usr/lib/sshuttle/main.py
4) в iptables добавляет правило, по которым весь tcp трафик заворачивается в ssh-туннель.
Ещё несколько примеров. Завернем DNS трафик через туннель тоже:
Код:
root@laptop:~# sshuttle -r user@remoteserver 0.0.0.0/0 -vv --dns
(учтите, что если у вас в resolv.conf прописаны провайдерские dns-резолверы, то к ним вас после этой команды могут «не пустить». Впрочем — кто такой херней страдает и оставляет провайдерские dns?)
Используем ssh-ключ для коннекта:
Код:
root@laptop:~# sshuttle -r user@remoteserver 0.0.0.0/0 -vv --dns --ssh-cmd "ssh -i /home/username/.ssh/id_dsa"
Используем ssh-агента для коннекта:
Код:
root@laptop:~# sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r root@messer.qs.biz 0.0.0.0/0 -vv
Отроутим трафик через ssh только до определенных сетей/хостов:
Код:
root@laptop:~# SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r root@messer.qs.biz 188.40.35.183/32 153.121.72.212/32 153.121.72.211/32 173.194.122.0/24 -vv
Да, ещё где-то в недрах «это ж опенсорс!» есть версия, которая умеет роутить вообще весь трафик (и icmp, и весь udp), но она не очень похожа на стабильную. - вот здесь (это НЕ апстрим проекта).
И если вы никуда не торопитесь — то такой туннель можно поднять и внутри любого другого VPN-соединения ;)
Статья с Хабра, где вкратце описывается эта утилита (там же есть ссылка на костыль для виндузятников)
Оригинал обзора приведённого выше (там же можно почитать "Уголок параноика")