Сегодня листал статейки на Хабре и наткнулся на прикольную штуку. Скажу сразу, что к названию темы она не имеет отношения (впрочем и перечисленные выше способы тоже не тянут на сверханонимность). В общем мануал для лентяев-распиздяев, которым нужно по быстрому сменить ип.
Извращенные методы туннелирования трафика: часть 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-агента для коннекта:
Отроутим трафик через ssh только до определенных сетей/хостов:
Код:
root@laptop:~# SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r [email protected] 188.40.35.183/32 153.121.72.212/32 153.121.72.211/32 173.194.122.0/24 -vv
Да, ещё где-то в недрах «это ж опенсорс!» есть версия, которая умеет роутить вообще весь трафик (и icmp, и весь udp), но она не очень похожа на стабильную.
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
- вот здесь (это НЕ апстрим проекта).И если вы никуда не торопитесь — то такой туннель можно поднять и внутри любого другого VPN-соединения ;)
Статья с Хабра, где вкратце описывается эта утилита (там же есть ссылка на костыль для виндузятников)
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Оригинал обзора приведённого выше
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
(там же можно почитать "Уголок параноика")
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки