Рубрики
Uncategorized

SShuttle — лучший SSH-туннель

VPN бедняка человека. Теги с сетью, дежоптом.

Мотивация

Когда-нибудь назад мне пришлось получить доступ к серверу API Kubernetes, который был бранджирован в частную сеть VPC. Я не хотел настроить отдельный экземпляр Bastion, просто чтобы получить доступ к этому кластеру, причина, потому что бастионы TBH являются избыточными в K8S, так как каждая задача может быть выполнена через API-адресов клиент-сервера, используя kubectl . Итак, все, что мне нужно было доступ к этому серверу API из доверенной сети безопасным способом. Благодаря моему другу @sarat. Я узнал о СШТЛЫ . sshuttle вполне уникален в том смысле, что это не совсем VPN, а действует как один (для большинства практических целей). sshuttle Позволяет получить доступ к внутренней сети через надежный узел внутри VPC, без необходимости иметь дело с беспорядком переадресации портов или VPN.

Основная идея довольно простая, sshuttle Начинается местный Python Сервер в вашем хозяином машине и создает iptables Правила для маршрута пакетов назначения указанных блоков CIDR на этот локальный сервер. На сервере пакеты мультиплексируются над SSH сеанс и отправлен на сервер. Сервер разбирается мультиплексированный пакет и маршруты их для выше по потоку. Таким образом, в основном это умный взлом, чтобы избежать TCP на TCP (который снова беспорядок на ненадежных сетях). Мультиплексированные потоки на SSH это всего лишь одно состояние TCP (по сравнению с VPN-соединениями, которые являются безграждающимися). Теперь вам должно быть интересно, как придет целевой сервер разбирает пакеты. Да, должен быть какой-то sshuttle Запуск демона, который делает это для вас. Это где СШТЛЫ Есть ли магия, это автоматически Развертывает сценарий Python на вашем целевом хосте для выполнения этой задачи. Так да, для sshuttle Работать, как клиент, так и цель должны иметь Python и iptables установлены.

использование

sshuttle -r user @ port x.x.x.x

Все пакеты, направляемые на блок CIDR, теперь будут проходить sshuttle Демон, так как он настроил iptables правила для них. Также СШТЛЫ Запускает локальный сервер Python на вашем хостом. Вы можете увидеть это, используя Netstat :

$ sudo netstat -tunapl | grep python
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:12300         0.0.0.0:*               LISTEN      27425/python         

Есть Python Сервер слушает порт 12300 в моем хост-машине. На самом деле проверять, это действительно начинается СШТЛЫ , вы можете использовать PSTREE -P |. меньше и искать СШТЛЫ . Здесь вы можете увидеть sshuttle действительно начал Python Сервер и PID ( 27425 ) совпадает с тем, что мы видели в Netstat команда.

    -zsh(13201)---sshuttle(27425)-+-ssh(27446)---ssh(27447)
                                    `-sudo(27427)---python(27445)

Вы можете даже пересылать DNS-запросы с --dns флаг. Это супер полезно, если у вас есть что-то вроде Route 53, чтобы провести ваши DNS-записи в частной зоне (например, TLD, как . Innernal ).

Лучше, чем SSH Tunnels?

Да, вы также можете перейти вперед с SSH, используя: ssh -nnt -l <локальный порт>: {upstream-хозяин}: {upstream-port} user @ пульт

Проблема с SSH Туннели состоит в том, что они испытывают частые потери пакетов на нормальном соединении WiFi, и это довольно неприятно, чтобы иметь дело с ними. Более того, иногда вам нужен доступ к нескольким портам в вашей частной сети, который требует, чтобы вы придумывали их -L Флаг, который я нахожу это как громоздким. Кроме того, вы не можете пересылать DNS-запросы (через UDP) с SSH может сделать только TCP.

sshuttle сделал мою жизнь так просто!

Плавник!

Первоначально опубликовано в моем блог

Оригинал: «https://dev.to/mrkaran/using-sshtunnel-2h24»