sshuttle выбирают потому, что SSH уже работает и криптография выглядит знакомой, а это рассуждение пропускает единственный вопрос, который решает, подходит ли он. Какие пакеты покидают машину, какая учётная запись несёт их на другой стороне и сколько локальных прав требует инструмент. Эти три ответа различаются в зависимости от метода пересылки, поэтому конфигурация, работающая для одного приложения, может тихо отказать для следующего. Разбор ниже начинается с протокола, который приложению действительно нужен.

Начните с протокола, который нужен приложению

Поддержка протоколов в sshuttle 2.0 зависит от выбранного метода. Методы NAT и nft в Linux обрабатывают TCP и DNS, а TPROXY добавляет общий UDP. У каждой платформы и каждого метода свои границы, а macOS перехватывает совершенно иным механизмом. Запишите установленную версию, выбранный метод и протоколы, нужные приложению, прежде чем что-то выбирать.

Поэтому работающий запрос TCP очень мало доказывает о приложении UDP или о каждом запросе DNS. sshuttle также рассматривает TCP как потоки, а не туннелирует целые пакеты IP, поэтому вывод о пропускной способности, взятый у обычного VPN, здесь не переносится. Сравните механизм, который вы действительно запускаете, с нагрузкой, которая у вас действительно есть.

ApproachWhat it carriesWhat it needs locally
SSH local forwardOne explicitly named TCP destinationNothing beyond the SSH client
sshuttle, nft or nat methodTCP and DNS to the routed prefixesRoot or sudo for firewall rules
sshuttle, tproxy methodTCP, DNS and general UDPRoot or sudo, and kernel support
IP VPNRouted IP traffic in a tunnelA client with the required privileges

Что нужно клиенту локально

Документированная схема клиента требует root или sudo, потому что она устанавливает локальные правила перехвата, а не создаёт интерфейс туннеля. Этот единственный факт меняет историю безопасности: процесс с такими правами может перенаправлять трафик всей машины, а не только одного приложения. Относитесь к правам как к части проекта, а не как к детали установки.

Убедитесь, какие правила установил инструмент и что они исчезают при выходе. Сеанс, который упал и оставил правила перехвата, может отправить трафик в чёрную дыру намного позже того, как оператор считает, что соединение пропало, и симптом выглядит как сбой сети, а не как забытое правило.

sudo sshuttle --method nft --dns 172.19.4.0/24
nft list ruleset | grep -i sshuttle
ip route

Первая команда — это форма типичного вызова с действительно нужным префиксом. Вторая показывает, что установил инструмент, а третья подтверждает, что интерфейс туннеля не появился, что и ожидается для этого проекта.

Что запускает удалённая сторона

Удалённая сторона — это авторизованная учётная запись SSH плюс совместимая среда помощника на Python. Вход, который удаётся в ограниченной оболочке, не даёт автоматически разрешения запускать этого помощника, а учётная запись, способная запускать помощника, не достигает автоматически каждой целевой службы. Оба факта относятся к запросу доступа, а не к заметкам по устранению неполадок.

Защищайте проверку подлинности узла и аутентификацию учётной записи. Принятие неизвестного ключа узла, чтобы первое соединение заработало, убирает проверку того, что удалённая сторона — нужная машина, и здесь это весит больше, чем при пересылке для одной цели.

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

Где проходит граница доверия

Пересылка частного соединения API через SSH не даёт прав на каждую операцию API. TLS приложения и вход в приложение по-прежнему действуют, и инструмент не может сделать безопасной службу без аутентификации. Следующий переход с удалённого узла тоже не становится автоматически тем же защищённым сегментом, что и канал SSH, потому что это второе соединение следует той политике, которая есть на удалённом узле.

Запишите границу одним предложением: трафик к этим префиксам выходит через эту учётную запись на том узле. Если предложению нужен абзац исключений, проект делает больше, чем заявляет его документация, и заслуживает второго взгляда до выхода в производство.

Докажите это по каждому протоколу, затем выбирайте инструмент

Проверьте каждый нужный протокол безвредным запросом, включая путь распознавателя и семейства адресов, которые использует приложение. Включите в тест и обрыв соединения, чтобы допустимое поведение приложения при сбое стало известным результатом, а не неожиданностью во время инцидента. Сеанс, который пересылал правильно, пока работал, ничего не говорит о том, что происходит после его падения.

Для нескольких явно названных служб обычная локальная пересылка проще в обслуживании и аудите. Для трафика приложений, который подходит его методу, sshuttle предлагает законную середину. Когда требование — широкая связность IP, проектирование VPN и есть честный ответ, и выбор следует за охватом и операционной ответственностью, а не за рейтингом алгоритмов шифрования.

Похожие статьи