Apache Mina SSHD переадресация портов типа NGROK - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь реализовать «динамический» прокси-сервер пересылки для доступа к локальному хосту из Интернета, как Ngrok в чистой Java.

Этот парень, по сути, делает то же самое: https://serveo.net/#intro (но без клиента)

Идея заключалась бы в том, чтобы использовать один и тот же порт на сервере и создать динамический прокси для каждого клиента на основе субдомена

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

org.apache.sshd.common.forward.DefaultForwardingFilter # doBind

У кого есть идеи, как это реализовать? Преимущество этого в том, что вам даже не нужен КЛИЕНТ, такой как Ngrok, для этого ... просто использование обычного ssh было бы возможно.

ssh -R http2: 9000: localhost: 8002 localhost -p 4440
ssh -R http2: pSERVER: localhost: pLOCAL localhost -p SSHD_PORT

вариант, который я себе представлял, - это динамическое создание портов на сервере: игнорирование порта 'pSERVER' и создание HttpProxy для перенаправления каждого порта. Но я нахожу это очень неэффективным, я полагаю, что это можно будет сделать, только проанализировав заголовок запроса и сделав перенаправления для соответствующих каналов / соединений

1 Ответ

0 голосов
/ 05 мая 2019

После слишком сильной головной боли. Код очень низкого качества, просто подтверждение концепции, которая может быть реализована.

Реализованная идея была создана путем изменения sshd-netty и добавления функции для распаковки http-запроса и удаления заголовка HOST (это необходимо улучшить здесь).

Используется только 1 порт на сервере, и это своего рода обратный прокси для клиентов ...

Мне бы хотелось, чтобы разработчики улучшили данный код. Мои знания в Нетти и Мине очень ограничены.

Цените:
Источник: https://github.com/ricardojlrufino/sshd-dyn-tunneling

Тестирование: открыть 2 соединения:

ssh -v -R http1:9000:localhost:8001 localhost -p 4440   
ssh -v -R http2:9000:localhost:8002 localhost -p 4440

Делать запросы:

curl -v -H "Host: http1" http1:9000  
curl -v -H "Host: http2" http2:9000  

Запуск тестовых серверов: https://github.com/ricardojlrufino/sshd-dyn-tunneling/blob/tunel/src/test/resources/setup_remotes.sh

...