Как пересылать TCP-пакеты с помощью SSH [закрыто]

Вопрос или проблема

Контекст

Есть 3 хоста:

  • Мой локальный компьютер
  • устройство1, к которому я могу подключиться через ssh
  • устройство2, которое находится в одной сети с устройством1 и отправляет данные на IP устройства1 10.0.0.10:8001

Устройство2 — это TCP-клиент, который периодически пытается подключиться к TCP-серверу на устройстве1 (отправляет SYN сообщения)

Моя цель — иметь TCP-сервер на моем локальном компьютере, к которому устройство2 может подключиться и обмениваться данными, используя устройство1 в качестве прокси.

Проблема в том, что устройство2 во время подключения использует разные, не предопределенные порты, но один и тот же IP (10.0.0.2). Именно поэтому при использовании туннелирования ssh я не знаю точного порта.

Что я пробовал

Я попробовал использовать туннелирование ssh для IP устройства1 (10.0.0.10) и порта (8001), вводя на моем локальном компьютере:

 ssh -L 8001:0.0.0.0:8001 user@Device1

но при запуске сервера на моем локальном компьютере у меня нет подключения, и Wireshark на loopback с фильтром tcp.port == 8001 ничего не показывает.

Когда запускаю тот же сервер на устройстве1 — подключение устанавливается.

На Устройстве1 в sshd_config AllowTcpForwarding и GatewayPorts установлены на yes. В sysctl.cnf у меня net.ipv4.ip_forward=1.

Вопрос:

Могу ли я достичь своей цели, используя туннелирование ssh? Если нет, то как тогда я могу это сделать?

Ответ или решение

Теория

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

Главная концепция заключается в создании туннеля, который прокидывает указанные порты через узкие места сети, такие как брандмауэры или NAT (Network Address Translation). SSH-туннелирование может быть организовано в трех основных режимах:

  • Локальное (Local),
  • Удаленное (Remote) и
  • Динамическое (Dynamic).

В вашем случае интересен вариант локального туннелирования, где ваш локальный TCP-сервер может взаимодействовать с TCP-клиентом на Device2 через Device1.

Пример

В вашей сетевой конфигурации есть три хоста: ваш локальный компьютер, Device1 и Device2. Device2 является TCP-клиентом, который периодически пытается подключиться к TCP-серверу на Device1, используя IP-адрес 10.0.0.10 и порт 8001.

Вашей задачей является настройка вашего локального компьютера в качестве TCP-сервера, чтобы Device2 мог связываться с ним, используя Device1 в качестве прокси-сервера. Однако существует сложность: Device2 использует разные порты для подключения. Это исключает возможность точного определения порта, что приводит к проблемам при попытке использования статического SSH-туннеля.

Вы пробовали использовать следующий SSH-туннель:

ssh -L 8001:0.0.0.0:8001 user@Device1

Тем не менее, это не дало ожидаемых результатов, так как туннель не перехватывал трафик.

Применение

Если стандартное SSH-туннелирование не даёт нужного результата из-за неопределенности портов, возможное решение — использование IP-маскарадинга (NAT) или динамической перенаправляющей конфигурации на уровне сетевого интерфейса Device1.

Несколько шагов к разрешению проблемы:

  1. Настройка IP-маскарадинга: Убедитесь, что на Device1 включено перенаправление IP (что вы уже сделали) и выполните настройку iptables для пересылки пакетов от Device2 на ваш локальный компьютер. Это может выглядеть примерно так:

    iptables -t nat -A PREROUTING -p tcp --dport 8001 -j DNAT --to-destination YOUR_LOCAL_IP:8001
    iptables -t nat -A POSTROUTING -p tcp -d YOUR_LOCAL_IP --dport 8001 -j MASQUERADE

    Это гарантирует, что все пакеты, приходящие на порт 8001 на Device1, будут перенаправлены на ваш локальный TCP-сервер.

  2. Использование SSH-доступа: Убедитесь, что SSH соединение с Device1 устанавливается корректно и для туннелирования присутствуют необходимые права. Полезно удостовериться, что SSH-доступ может использовать динамическое туннелирование, если это необходимо.

  3. Сетевые службы и файлы конфигурации: Перепроверьте конфигурацию SSH на Device1 (sshd_config) и убедитесь, что она позволяет проброску портов и не имеет ограничений, препятствующих вашей задаче. Настройки AllowTcpForwarding и GatewayPorts зачастую играют ключевую роль.

  4. Обновление сети и маршрутизации: Если предыдущие подходы не решили проблему, можно рассмотреть использование продвинутых сетевых технологий либо прокси-серверов, таких как VPN, которые могут упростить перекрестное соединение узлов через защищенные каналы.

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

Заключение: Ваше требование к динамическому перебросу TCP-пакетов через SSH может требовать комплексного подхода, учитывающего как положения устройства, так и сетевые топологии узлов.

Оцените материал
Добавить комментарий

Капча загружается...