自搭Ngrok实现内网穿透centos6

1.配置go编译环境

1.1 安装依赖包:

yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ build-essential  mercurial

1.2 配置git

wget https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz

1.3 安装必要环境包☆

sudo yum install build-essential golang mercurial git

1.4 检出ngrok源代码☆

git clone https://github.com/inconshreveable/ngrok.git ~/ngrok

1.5 安装lrzsz下载上传工具☆

#该工具如何使用参考 http://blog.csdn.net/zy_zhengyang/article/details/52385887
yum -y install lrzsz

1.6 安装screen多窗户工具☆

yum install -y screen

2. 配置临时环境变量

export GOPATH=~/ngrok/   #ngrok源码根目录
export NGROK_DOMAIN="ngrok.zkaiyuan.com" #映射到该服务器隧道的域名

2.1 去到源码目录

cd ~/ngrok

3.生成https安全证书,Ngrok会使用此证书加密通讯

openssl genrsa -out rootCA.key 2048

openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -days 10000 -out server.crt

3.1 将证书文件复制到指定位置

#提示是否覆盖,输入y确定
cp rootCA.pem assets/client/tls/ngrokroot.crt -i

cp server.crt assets/server/tls/snakeoil.crt -i

cp server.key assets/server/tls/snakeoil.key -i

4.编译服务器端和客户端

注:这里测试时只编译了i386的服务器端和arm的客户端,实际上可以通过改变GOOS与GOARCH来获取各个平台的客户端与服务端,GOOS可以指定为windows、linux 、 freebsd 、darwin (Mac OS X 10.5 or 10.6) 和 nacl (Chrome 的Native Client 接口) ,GOARCH可以指定为amd64 (64-bit x86) 、386 (32-bit x86) 、 和arm (32-bit ARM),可见Go语言的跨平台能力相当彪悍。

4.1服务端

#我的服务器为:linux-x86-64
export GOOS=linux
export GOARCH=386
make release-server

编译完成过后~/ngrok/bin/ngrokd即为服务端运行文件。

4.2客户端

树莓派为linux-arm架构,重新声明go env里的变量

export GOOS=linux
export GOARCH=arm
make release-client

编译完成过后~/ngrok/bin/linux_arm/ngrok即为树莓派客户端运行文件

5.部署服务端和客户端

5.1 服务端

屏幕会输出一连串日志信息,ttpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。

./ngrokd -domain="ngrok.zkaiyuan.com" -httpAddr=":80" -httpsAddr=":443"
或者
./ngrokd -domain="ngork.zkaiyuan.com" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

5.2 客户端

通过rz命令下载客户端

该目录下的ngrok
cd ~/ngrok/bin/linux_arm/ 

拷贝到客户端任意目录后。新建一个 ngrok.cfg 配置文件

 vim ngrok.cfg

内容如下

server_addr: zkaiyuan.com:4443
trust_host_root_certs: false

运行客户端,如果提示没权限,先授权

 chmod +x ngrok
#web测试
./ngrok -subdomain pi -proto=http -config=ngrok.cfg 80

#tcp转发
./ngrok -proto=tcp -config ngrok.cfg 22

如果想一次性完成多个端口转发。可以完善ngrok.cfg。特别需要注意的是配置文件为YAML语法,所有缩进都要使用空格,不能够使用tab
而且可以看出不但可以转发本机的端口,亦可以转发其它内网设备

server_addr: ngork.zkaiyuan.com:4443
trust_host_root_certs: false
tunnels:
 ssh:
  remote_port: 1122
  proto:
   tcp: 22
 ss:
  emote_port: 8388
  proto:
   tcp: 8388
 ftp:
  remote_port: 20
  proto:
   tcp: 20
 ftp2:
  remote_port: 21
  proto:
   tcp: 21
 http:
  subdomain: www
  proto:
   http: 80
   https: 192.168.1.4:443

启动后,如果可以看到如下内容,说明你已经完成了

Tunnel Status                 reconnecting                                                                                                  
Version                       1.7/1.7                                                                                                       
Forwarding                    tcp://ngork.zkaiyuan.com:38755 -> 127.0.0.1:22                                                                  
Web Interface                 127.0.0.1:4040                                                                                                
# Conn                        1                                                                                                             
Avg Conn Time                 14275.98ms                                                                                                    

到此结束。。。。正常来说就没问题了,有其他问题,自行百度

发布了5 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40210977/article/details/90599741