Skip to content

利用gost访问内网HTTP服务

原文地址:https://groups.google.com/g/go-gost/c/ouzBXF0Fqk8

gost在2.1中增加了远程端口转发功能,可以将内网的端口直接映射到外网的一个指定端口。不过TCP的远程端口转发有一些限制,每当有连接连到了外网的映射端口上时,这个监听端口就会关闭,等待内网的gost再主动建立连接重新开启外网端口监听。

这样就使得此功能的使用受限,只能用来转发类似于SSH这种使用单连接的服务,而像HTTP这种需要建立很多连接的服务就不可用了。

gost 2.2中增加了对HTTP2的支持,由于HTTP2可以多路复用,特别是针对HTTP,可以用单一连接来传输多组请求。那么我们就可以利用HTTP2来实现在外网也能访问到内网的HTTP服务。

假设有一台公网的机器A,IP是 1.2.3.4。

内网的机器B,IP是:192.168.1.100。

具体做法(有点绕):

先在公网机器A上跑gost:

gost -L http2://:443

在内网机器B上跑gost(**注意**这个gost一定要是http2模式):

gost -L http2://:8080

重要的一步, 在内网机器B上开启TCP远程端口转发:

gost -L rtcp://:1443/:8080 -F http2://1.2.3.4:443

上面这一步就是将内网机器B上的HTTP2代理端口直接映射到外网服务器上的1443端口,那么访问外网服务的1443端口就相当于访问内网的8080端口,也就相当于在外网直接访问到内网的HTTP2代理。

假设在机器B所在的网络中有一台路由器,IP为192.168.1.1,我们想在另外一台电脑C上(可以访问机器A的1443端口)访问这个内网路由器的管理界面:

在电脑C上跑gost:

gost -L :8888 -F http2://1.2.3.4:1443

这一步就相当于直接使用内网机器B上的HTTP2代理(8080端口),那么也就可以访问到机器B所在网络的任何服务了, 在机器C上把浏览器代理设为localhost:8888,在浏览器中直接打开192.168.1.1就可以访问到路由器的管理界面了。

Comments