Apache Mina SSHD端口转发(如NGROK)

时间:2019-05-04 15:14:21

标签: java netty apache-mina

我正在尝试实现一个“动态”代理,以便从Internet访问本地主机,例如纯Java中的Ngrok。

这个人基本上做同样的事情:https://serveo.net/#intro(但没有客户)

想法是使用服务器上的SAME端口,并基于子域为每个客户端创建一个动态代理

问题是默认实现在第二个连接上引发错误..说端口已经打开。

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

谁有实现此想法的想法? 这样做的好处是,您甚至不需要像Ngrok这样的CLIENT ...就可以使用普通的ssh。

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

我想象的一个选项是在服务器上动态生成端口:忽略'pSERVER'端口,并创建HttpProxy,以对每个端口进行重定向。但是我发现这种方法效率很低,我相信只有通过分析请求标头并为相应的通道/连接进行重定向

1 个答案:

答案 0 :(得分:0)

头痛太多之后。 该代码的质量很低,只是可以实现的概念证明。

通过更改sshd-netty并添加一个函数来解压缩http请求并删除HOST HEADER(此处需要改进)来实现这一想法。

仅使用服务器上的1个端口,这是客户端的反向代理...

我希望在开发人员的帮助下改进相关代码。我对Netty和Mina的了解非常有限。

欣赏:
来源: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