Home > Learning > 搭建ngrok–内网转发工具的服务端和客户端配置

搭建ngrok–内网转发工具的服务端和客户端配置

0x00 为啥会想到用ngrok

国内有个出名的厂商叫花生壳,说是用内网动态域名,价格不算便宜而且用了感觉体验挺差的。最近正好看到ngrok的文章,索性自己搭建一个。其实也可以直接用客户端使用ngrok官方的服务端,但是被墙了,还不如自己动手。ngrok介绍跟原理我就不班门弄斧了,谷歌有好多大神写的文章。

 

0x01 环境配置

因为ngrok是go语言开发的,所以环境肯定要有go。

我在腾讯云的机器上装了ubuntu16.04LTS的系统,不重要,系统影响几乎不存在。

装一波必要的软件包:

sudo apt-get install build-essential golang mercurial git

获取ngrok代码:

git clone https://github.com/inconshreveable/ngrok.git ngrok
git clone https://github.com/tutumcloud/ngrok.git ngrok
#因为google被墙,上面地址下在后需修改log4go的地址,下面地址已经修改好

生成证书并且替换自带的证书,因为要用自己服务器的域名和地址:

NGROK_DOMAIN="doubledoge.cn"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

基于刚才生成的证书进行服务器端和客户端的可执行文件的编译:

#因为服务器端在本机完成编译,所以不需要加参数
make release-server
#针对各版本的系统进行客户端的编译
GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
GOOS=darwin GOARCH=amd64 make release-client
#GOARCH是系统对应架构,386(32位)、amd64(64位)、arm
#bin目录下出现ngrok和各系统的文件夹里有ngrokd就说明编译成功

 

0x02 服务器端和客户端的运行测试

服务器端:

#两个端口分别对应http跟https的端口
sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="doubledoge.cn" -httpAddr=":6060" -httpsAddr=":6061" -tunnelAddr=":6062"

运行成功如图所示:

打开任何一个子域名的6060端口可以看到如下:

客户端:

我在我的win7上运行

要写一个简单的配置文件例如ngrok.cfg

server_addr: "www.aiesst.com:6062"
trust_host_root_certs: false

运行客户端可执行文件

#-log参数可以得到连接时遇到的问题,便于发现问题
ngrok.exe -log=ngrok_log.txt -subdomain=abc -config="ngrok.cfg" 80

连接成功后会出现online和forwarding字样。

 

0x03 有可能遇到的一些问题

1.域名的泛解析: 登录域名控制台,会有提示主机记录添加一条为*的即可

2.连接报错:大概就是无法解析域名的意思,当时很奇怪,然后突然发现要解析的事doubledoge.cn这个域名,所以添加主域名的解析即可

3.默认tunnel端口4443连接不上: 运行服务器端时自定义tunnel端口,就如上文所写即可

其实就算问题应该也没啥的。加个log参数好处就是不怕找不到错误了,日志在手,天下我有。

You may alo like...

(1) Comment

  1. 匿名

    大黑阔,你好。

发表评论

邮箱地址不会被公开。 必填项已用*标注