Golang实现的域名式访问内网穿透

先回答下疑问:

为什么写这个东西?

网上好多用go实现的内网穿透都是以ip地址加端口形式访问的,虽然可以实现功能,但是用不了微信开发平台和需要域名授权的开发中使用。

为什么不用花生壳和ngrok?

花生壳免费版非常卡,在域名上必须使用购买花生壳官方域名,ngrok没用过貌似是收费的。而大部分企业或者个人开发者基本上都有服务器,所以成本很低。

这个软件我命名为small-proxy,免费开源并且跨平台,下载地址:proxy.zip,这个压缩包里包含着6个平台的x86和x64CPU架构的可执行文件(20个),理论安卓也能使用(未经测试),源码请移步github:https://github.com/2654709623/small-proxy求星星。

使用教程:

解压压缩包打开,如下图,server文件夹需要传到服务器上(如果是FTP上传需要注意使用二进制文件传输),client文件夹留在本机。

WX20181014-140808@2x.png

服务端配置

然后我们打开server文件夹,如下图,hosts是反向代理软件包,proxy是内网穿透软件包。

WX20181014-141710@2x.png

服务端配置-内网穿透

然后cmd命令进入proxy目录内开启内网穿透服务,需要注意的是你服务器的操作系统选择对应的执行文件,例如:windows系统64位=proxy_windows_amd64.exe。

命令行执行:./proxy_darwin_amd64 start -d -l 5531(用户访问的端口) -r 2001(与客户端通信的端口),命令行说明可输入./proxy_darwin_amd64 help获取,特殊说明下-d参数为守护进程运行,建议加上如果不加关闭终端,服务也跟着关闭了。

关闭守护进程命令为./proxy_darwin_amd64 stop。TIPS:阿里云服务器开启端口需要在阿里云控制台安全组内添加相应端口。

服务端配置-反向代理 

这一步为可选配置,如果不配置这一步只能用ip:端口进行访问。

cmd进入hosts目录内vim编辑配置文件hosts.conf保存,如下图

WX20181014-145126@2x.png

域名解析A记录wx.5lazy.cn到你服务IP地址上,然后执行./hosts_darwin_amd64 start -d

需要注意的是运行反向代理默认监听80端口,如果之前有nginx或者apache请更换端口,后面会讲到如何设置反向代理接管nginx。需要注意的是修改配置文件后需重启反向代理服务。

客户端配置

回到本机client文件夹中,然后执行./proxy_darwin_amd64 start -d -l 127.0.0.1:80 -h 44.44.44.44 -r 2001

支持转发到docker内的web服务只需把127.0.0.1换成docker的ip地址。

本地的nginx或者apache网站需配置域名为wx.5lazy.cn,然后访问wx.5lazy.cn就可以访问到你刚才绑定的目录了。

hosts反向代理接管nginx或者apache请求

以nginx举例,假设你之前的nginx监听的端口是80,有两个虚拟主机域名分别为a.5lazy.cn和b.5lazy.cn,这时候80端口已经被我们hosts反向代理监听,我们需要把nginx之前的80端口改成其他端口(这里为8888)。

进入nginx的安装目录下的conf目录下更改nginx.conf文件把listen  80;改成listen    8888;然后进入vhost目录更改虚拟主机配置文件同上,重启nginx。

这时候需要进入我们服务端的server/hosts下编辑hosts.conf文件加入如下两行,然后重启hosts。

a.5lazy.cn=127.0.0.1:8888

b.5lazy.cn=127.0.0.1:8888


Comments : 8

有问题可在下面发表评论,当然没事也可以在下面吹吹牛皮、扯扯淡!
  1. 回复
    佩服, 想谈就这个技术方面的合作, 有空的话回个信息?
  1. 回复
    @STONE:这是我的邮箱:albertzhan666@gmail.com

发表评论

*