我正在尝试实现一个“动态”代理,以便从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,以对每个端口进行重定向。但是我发现这种方法效率很低,我相信只有通过分析请求标头并为相应的通道/连接进行重定向
答案 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