Вопрос или проблема
Как я могу преобразовать следующую команду (sshuttle) в команду SSH-туннеля?
sshuttle -r [email protected] 172.16.20.0/24
ssh [email protected]
Единственный метод, который я знаю для SSH-туннелирования, включает использование конкретной машины (например, машина с адресом 172.16.20.111 является туннелем для 172.16.20.113) Например:
ssh [email protected] -L 6661:172.16.20.111:22 -fnNT
ssh USER@localhost -p 6661 -L6662:172.16.20.113:22 -fnNT
ssh USER@localhost -p 6662
Тем не менее, я хотел бы туннелировать всю сеть 172.16.20.0 (как команда sshuttle). Я не хочу туннелировать к конкретной машине, такой как 172.16.20.111.
Ответ или решение
Тоннелирование всей сети с использованием SSH — это задача, которая требует глубокого понимания сетевых технологий и возможностей Secure Shell (SSH). Перед тем как перейти к конкретным шагам, рассмотрим теоретическую базу, усилим её примером и применением на практике.
Теория
SSH обозначает Secure Shell и представляет собой протокол для безопасного удалённого доступа. Этот инструмент поддерживает не только удалённый вход на сервер, но и тоннелирование — передачу данных через защищённое соединение. Однако стандартная утилита SSH не поддерживает полный VPN, который бы охватывал всю сеть. Чтобы обойти это ограничение и сделать возможным тоннелирование всей сети, можно использовать определённые методы и утилиты.
SSH-тоннелирование реализуется посредством переадресации портов (port forwarding). Существует два типа переадресации:
- Локальная переадресация портов (Local Port Forwarding) — позволяет перенаправить трафик с локальных машин на удалённый сервер.
- Удалённая переадресация портов (Remote Port Forwarding) — позволяет перенаправить трафик с удалённого сервера на клиентскую машину.
- Динамическая переадресация портов (Dynamic Port Forwarding) — позволяет создавать динамическое портовое соединение, используя протокол SOCKS.
Пример
Ваша задача подразумевает замену функциональности sshuttle
, который позволяет перенаправлять трафик для всей сети, на соответствующую команду SSH. sshuttle
работает, создавая прозрачный прокси, маршрутизируя весь сетевой трафик через SSH-соединение. Однако, поскольку стандартный SSH не поддерживает такого поведения напрямую, нужно использовать динамическую переадресацию портов с поддержкой SOCKS-прокси.
Реализация
Рассмотрим, как заменить команду sshuttle
аналогичным функционалом через SSH, используя концепцию динамической переадресации портов для SSH с SOCKS-прокси.
Шаги по настройке
-
Создание SOCKS-прокси-сервера с использованием SSH:
ssh -D 1080 [email protected]
Эта команда создаёт SOCKS5-прокси на локальном порту 1080. Все приложения, которые поддерживают работу через SOCKS5-прокси (например, браузеры), могут использовать этот порт для перенаправления своего сетевого трафика через удалённый сервер.
-
Настройка маршрутизации трафика через SOCKS-прокси:
Чтобы маршрутизировать весь сетевой трафик с вашего устройства через этот SOCKS-прокси, можно использовать инструменты, такие как
tsocks
илиproxychains
, которые позволяют перенаправлять трафик приложений через SOCKS-прокси.Пример с использованием
proxychains
:-
Установите
proxychains
:sudo apt-get install proxychains
-
Настройте
proxychains
для использования локального SOCKS-прокси, изменив конфигурационный файл/etc/proxychains.conf
:socks5 127.0.0.1 1080
Теперь любая команда, выполненная через
proxychains
, будет проходить через ваш SOCKS-прокси:proxychains curl http://example.com
-
-
Расширение для тоннелирования всей сети:
В случае если вы хотите перенаправить весь системный трафик, включая DNS-запросы, вам придётся использовать дополнительное программное обеспечение, которое бы создавало полноценный VPN-подобный туннель, или конфигурировать маршрутные таблицы, чтобы направить весь трафик через созданный SOCKS-прокси.
Заключение
Таким образом, стандартное SSH-тоннелирование может выступать достойной заменой sshuttle
, когда используется динамическая переадресация портов и соответственно настроенные приложения для поддержки SOCKS5-прокси. Хотя это решение не предоставляет прямого пути для маршрутизации всего сетевого трафика подобно VPN, оно открывает значительное пространство для манёвра, позволяя подключать и перенаправлять нужные ресурсоёмкие процессы через защищённый туннель.