Ubuntu下搭建Ngrok实现内网穿透 | kTWO-个人博客

正在阅读:

Ubuntu下搭建Ngrok实现内网穿透

top

引言

从早上10点钟左右就开始做这个测试了,我是在学生,使用的是学校里面的校园网,没有路由器,不能做端口映射做内网穿透。当然使用花生壳等内网穿透工具还是可以得,但是有时候满足不了我的需求,比如我需要指定固定端口做转发,同时需要http和TCP的转发,并且直接局域网内的某台主机穿透,还有一点就是用自己的域名看着比较爽。经过几个小时的奋战,最终还是成功了,中间遇到了很多的坑。。结合了多个教程才完成的。下面简单记录一下。

Ngrok简介

Ngrok是一款可以搭建在Linux端上作为转发工具的服务,可以将自己定义的域名解析到该服务器,然后利用Ngrok服务,将指定端口发送来的数据转发到内网的主机上面,当然,内网主机也是需要Ngrok的客户端和服务器相连接的。这样就可以实现外网访问内网,在做web开发的时候,可以直接以内网服务器作为web服务端,直接使用域名访问,在渗透测试的时候,可以直接将靶机的TCP反弹连接反弹到内网服务器,实现控制靶机的功能。总之,Ngrok用起来还是比较爽的。

Ngrok服务器搭建

搭建之前首先需要有一台外网服务器和一个域名。我这里以waitgg.cn做测试,我已经将waitggl.cn泛解析为*.ngrok.waitggl.cn

1、安装go环境

因为Ngrok是用go语言编写的,所以我们首先安装go环境。


1
2
wget https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.4.3.linux-amd64.tar.gz

这样我们就把go解压到了/usr/local目录下面,但是这时候输入go命令是无效的,这里需要做一下软连接。

ln -/usr/local/go/bin/* /usr/bin/

3、下载Ngrok并生成口令

在这之前请确保服务器上面已经安装了最新版的git,若没有请自行百度安装方法。

下载Ngrok


1
2
3
4
5
cd /usr/local
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="ngrok.waitggl.com"
cd ngrok

ps:上面的export是创建变量其中NGROK_DOMAIN 的值要改为你的域名。

生成证书,并拷贝到指定目录



1
2
3
4
5
6
7
8
9
10
#生成
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.dou2b.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.dou2b.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
#复制
cp -n rootCA.pem ./ngrok/assets/client/tls/ngrokroot.crt
cp -n device.crt ./assets/server/tls/snakeoil.crt
cp -n device.key ./assets/server/tls/snakeoil.key

编译服务端


1
2
3
4
cd /usr/local/go/src
GOOS=linux GOARCH=386 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=386 make release-server

ps:注意上面的GOOS和GOARCH可以通过命令go env看到,GOARCH=386代表的是32的操作系统,如果是64位的应该是amd64

编译客户端

客户端的编译分为多动,不同的操作系统对应着不同的客户端。

1)Windows客户端编译


1
2
3
4
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client

ps:上面的GOOS和GOARCH注意一下。代表Windows x64

2)Linux客户端编译


1
make release-client

3)mac客户端编译


1
2
3
4
cd /usr/local/go/src/
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
cd /usr/local/ngrok
GOOS=darwin GOARCH=amd64 make release-client

4)树莓派客户端


1
2
3
4
cd /usr/local/go/src/
GOOS=linux GOARCH=arm CGO_ENABLED=0 ./make.bash
cd /usr/local/ngrok
GOOS=linux GOARCH=arm make release-client

到此为止,我们的准备工作基本上就做完了,只要选择相应的客户端进行编辑就好。

我用的是window64位的操作系统,我们就以此为例

服务端和客户端都编译完成之后会在/usr/local/ngrok/bin目录下面有一个ngrok文件和windows_amd64文件夹,其中ngrok就是我们的服务端,windows_amd64下面会有一个ngrok.exe文件,这个就是我们的Windows客户端文件,我们把ngrok.exe文件复制到Windows机器上面。

4、运行Ngrok服务端和客户端

服务端启动


1
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8081"

ps:上面的$NGROK_DOMAIN就是我们的域名

当服务启动之后,服务器会监听8081、443、4443端口。所以在这之前最好不要有端口占用。当然这几个端口是可以指定的

客户端启动

在运行客户端之前,需要在ngrok.exe目录下面新建一个ngrok.cfg,内容如下:


1
2
server_addr: "ngrok.waitggl.cn:4443"
trust_host_root_certs: false

在cmd中进入到ngrok.exe目录下面,执行命令

ngrok -proto=http -config=./ngrok.cfg -subdomain=test 80

上面的-proto指定了转发方式,-cofig指定了刚才新建的文件,-subdomain指定的是域名域名的子域名,80是本地的端口,一般web的端口。

如果使用转发TCP命令如下:


1
ngrok -subdomain=test -proto=tcp -config=./ngrok.cfg 80

但是这种方式转发的TCP外网的端口是随机的,如果我们要使用固定的端口要用下面方式启动客户端:

修改ngrok.cfg文件为:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server_addr: "ngrok.waitggl.cn:4443"
trust_host_root_certs: false
tunnels:
    http:
        proto:
            http: 127.0.0.1:80
        subdomain: test
    https:
        proto:
            https: 443
        subdomain: test2
    ssh:
        remote_port: 5555
        proto:
            tcp: 5555

上面的127.0.0.1可以修改为局域网任何一个ip下面同样,不写默认127.0.0.1,ssh中的remote是服务器的tcp短发端口,proro中的tcp是本地的tcp端口。

启动命令如下


1
ngrok -config=ngrok.cfg start http https ssh

上面的http、https、ssh是可选的,单个启动或者多个启动都可以

启动完成后的界面应该是这样:

s1

这时候访问域名http://test.ngrok.waitggl.cn:8081/访问的就是本地的127.0.0.1:80 了。

结束语

Ngrok服务器的搭建基本的过程就是这样,若有什么错误,还请指正。

最后感谢以下参考文章:

http://www.sunnyos.com/article-show-48.html

http://www.tuicool.com/articles/aUJF7zf

http://www.07net01.com/2016/09/1676429.html

http://www.mamicode.com/info-detail-1368658.html

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌