sshuttle заворачивает TCP и DNS в обычное SSH-соединение. Получается почти VPN, только без VPN-сервера на удалённой стороне: на сервере нужен SSH-доступ и Python, на клиенте сама утилита и права root. Свежая версия 2.0.0 вышла 28 сентября 2026 года. Ниже установка, основные сценарии и полезные ключи.
Что делает sshuttle
На клиенте sshuttle ставит правила файрвола для выбранных подсетей и перехватывает исходящие TCP-соединения в них. Дальше трафик идёт по SSH на сервер, где копия sshuttle открывает те же соединения уже из своей сети и гоняет данные туда и обратно. Пакеты внутри TCP не заворачиваются, поэтому нет проблемы TCP поверх TCP, из-за которой обычный туннель через SSH тормозит.
Ставить sshuttle на сервер не нужно. Он сам загружает свой код в удалённый Python и запускает его. Root нужен только на клиенте, чтобы менять правила файрвола, на сервере хватает обычного пользователя.
Зачем так, а не полноценный VPN
- Просто: на сервере нет демона WireGuard или OpenVPN, только sshd.
- Шифрует SSH, то есть канал, который у вас уже настроен и которому вы доверяете.
- Гибко: можно пустить через сервер весь IPv4 или только нужные подсети, например офисную сеть за бастионом.
- Работает там, где наружу открыт только 22-й порт.
Требования и методы
С версии 2.0 и клиенту, и серверу нужен Python 3.10 или новее, поддержку 3.9 убрали. Способ перехвата трафика называется методом и выбирается автоматически, но его можно задать ключом --method:
natна Linux через iptables: TCP и DNS, IPv4 и IPv6;nftна Linux через nftables: то же самое;tproxyна Linux: единственный метод, который умеет ещё и UDP;pfна macOS, FreeBSD, OpenBSD и pfSense;- на Windows экспериментальный метод
windivert.
Установка
Пакет есть почти во всех дистрибутивах, полный список в документации. Учтите, что в репозиториях дистрибутива версия может быть старше 2.0.
# Debian, Ubuntu sudo apt install sshuttle # Fedora, RHEL и похожие (на RHEL нужен EPEL) sudo dnf install sshuttle # Arch sudo pacman -S sshuttle # macOS brew install sshuttle # свежая версия из PyPI sudo pip install sshuttle
Базовое использование
Пустить весь IPv4 через сервер:
sshuttle -r user@remote_host 0.0.0.0/0 # то же короче sshuttle -r user@remote_host 0/0
Здесь user это логин на сервере, remote_host его адрес или имя. Сам адрес SSH-сервера sshuttle исключает из туннеля автоматически. Если подключение идёт через ProxyCommand, исключать нужно руками ключом -x.
Только нужная подсеть, например сеть за бастионом, без всего интернета:
sshuttle -r user@remote_host 192.168.1.0/24
DNS через туннель, когда нужно резолвить имена так, как их видит сервер, например внутренние:
sshuttle --dns -r user@remote_host 0/0
Быстрый вариант на случай, когда сломался рабочий VPN и надо срочно попасть во внутренние адреса. Ключ -N сам подбирает подсети с сервера, -H подтягивает имена хостов:
sshuttle --dns -NHr user@remote_host 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
Чтобы не вводить пароль при каждом запуске, настройте вход по ключу:
ssh-keygen -t ed25519 ssh-copy-id user@remote_host
Полезные ключи
-x подсетьисключает адреса из туннеля, например локальную сеть.-Dуводит sshuttle в фон, вместе с ним пригодятся--pidfileи--syslog.--disable-ipv6выключает перехват IPv6.-vвключает подробный вывод, когда что-то не работает.--sudoers-no-modifyпечатает файл для sudoers, чтобы запускать без пароля sudo. Авторы предупреждают, что это небезопасно: через--ssh-cmdтакой пользователь сможет выполнить что угодно от root.
Полный список ключей в справке sshuttle.
Windows
На Windows есть экспериментальная поддержка через метод windivert: нужен пакет pydivert и консоль администратора, а работает только TCP по IPv4, без IPv6, UDP и DNS. Второй вариант из документации: запустить sshuttle в Linux-виртуалке с сетевым мостом и направить через неё маршрут Windows.
Ограничения
Вся нагрузка ложится на одно SSH-соединение, UDP работает только в режиме tproxy, а значит QUIC и голосовые сервисы через обычный режим не пойдут. Для постоянного корпоративного доступа и высокой скорости обычно ставят WireGuard.
В итоге sshuttle удобен, когда нужен быстрый защищённый выход в интернет или доступ к внутренней сети через бастион без отдельного VPN-стека. Поставили пакет, указали -r user@host и подсети, при необходимости добавили --dns, и можно работать.
Источники и ссылки
-r, --dns, -N, -H и файл для sudoers.
Документация: Microsoft Windows
Метод windivert и вариант с Linux-виртуалкой.