学海无涯苦作粥(舟)

Ubuntu服务器安装Ngrok做内网穿透

摘要:如果你做微信开发,一次又一次的发布、发现错误、调试、发布、发现错误、调试…的

  • 导出为PDF
  • 导出为Markdown

如果你做微信开发,一次又一次的发布、发现错误、调试、发布、发现错误、调试…的循环一定让你个人或是团队感到厌倦;
如果你接外包项目,在开发过程中,客户想要看一看开发中的进展,你一定为还没有可预览环境或者搭建环境产生的消耗而苦恼。

这一切的原因仅仅是因为你深处复杂的内网环境,被一个局域网阻断了与外部的直接联系。你一定希望有一样东西,能够冲破这层阻隔,为你的工作提高效率。
这篇文章我们介绍 ngrok,一个开源软件,可以用于提供内网穿透。

以下我记录下ngrok服务的搭建过程

一、准备工作

需要一个有公网IP的VPS
需要一个能够自由解析的域名

二、解析域名

使用自己的域名,把域名解析到 VPS 的地址,解析方式如下:

ngrok.uprogrammer.cn ----------> A记录到你的 VPS IP
*.ngrok.uprogrammer.cn ----------> CNAME到ngrok.uprogrammer.cn

三、VPS 服务端安装 go 环境

因为 ngrok 是由 go 语言开发的,所以需要安装 go 环境。

  • 从 go 官网下载最新的 go 版本,并解压到 /usr/local 目录下。
方法一
#32位 https://storage.googleapis.com/golang/go1.8.1.linux-386.tar.gz
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar zxvf go1.8.3.linux-amd64.tar.gz
mv go /usr/local/

方法二
apt-get install golang
  • 2.设置相关环境变量,使用第二种方式可以省略

    #可以根据自己需要调整路径  
    echo 'export GOROOT=/usr/local/go' >> /etc/profile
    echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile
    echo 'export GOPATH=$HOME/go' >> /etc/profile
    echo 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
    source /etc/profile
    
  • 3.检查是否安装成功

    go version

四、安装 Git 环境

由于我们通过 github 上的源码来安装 ngrok,所以需要先安装下 git。如果已经有 git环境,则直接跳过。

ubuntu 上可以直接通过 apt-get install git 来安装 git。完成以后,做相应的 git 配置,此处略过。

五、Ubuntu 安装 ngrok

  • 1 下载 ngrok,并修改参数
方法一:
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=~/ngrok
export NGROK_DOMAIN="ngrok.uprogrammer.cn"
cd ngrok

方法二:
wget htps://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/ngrok.tar.gz
tar zxvf ngrok.tar.gz 
export GOPATH=~/ngrok
export NGROK_DOMAIN="ngrok.uprogrammer.cn"
cd ngrok
  • 2.生成签名证书

    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -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 -out server.crt -days 5000
    
  • 3 将源代码目录下生成的证书文件复制到指定的位置

    cp rootCA.pem assets/client/tls/ngrokroot.crt
    cp server.crt assets/server/tls/snakeoil.crt
    cp server.key assets/server/tls/snakeoil.key
    
  • 4 如果是在国内的服务器,需要执行下面的修改,否则会由于网络原因产生库的依赖问题。香港或者国外的服务器就不需要了。

    vim /usr/local/ngrok/src/ngrok/log/logger.go
    log "github.com/keepeye/log4go"
    
  • 5 编译文件

在ngrok目录下执行如下命令,编译ngrokd:

GOOS 有linux windows 和 darwin
GOARCH 有 386 amd64 
GOOS=linux GOARCH=amd64 make release-server
make release-server GOOS=linux GOARCH=386
make release-client GOOS=linux GOARCH=amd64
make release-client GOOS=linux GOARCH=386
make release-client GOOS=windows GOARCH=amd64
make release-client GOOS=windows GOARCH=386
make release-client GOOS=darwin GOARCH=amd64

六、服务端运行与使用

把当前目录下的 ngrok目录bin下的ngrokd复制到 /usr/bin下
执行 ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":81"

检查一下服务的80 和 81端口是否被占用,如果没问题的话,应该可以显示出如日志

[21:50:50 EST 2018/01/23] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[21:50:50 EST 2018/01/23] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:808
[21:50:50 EST 2018/01/23] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:809
[21:50:50 EST 2018/01/23] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[21:50:50 EST 2018/01/23] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

七、客户端的运行与使用

  • 1 把刚刚从 VPS 服务器上生成的客户端服务器下载到本机,可以通过 scp 命令

scp username@servername:/path/filename /var/www/local_dir(本地目录)

mac 客户端位置: /ngrok/bin/darwin_amd64/ngrok
windows 客户端位置: /ngrok/bin/windows_amd64/ngrok.exe
linux 客户端位置 : /ngrok/bin/ngrok

  • 2 在本地同一目录下新建名为 ngrok.cfg 的文件

文件内容如下
server_addr: "ngrok.uprogrammer.cn:4443"

trust_host_root_certs: false

  • 3 运行客户端

./ngrok -config=./ngrok.cfg -subdomain=test 8080

-subdomain参数指的是域名,例如这里是test.ngrok.uprogrammer.cn
后面的80是指本机端口,这里是指把本机的8080端口开放穿透
windows运行客户端,请把./改成win风格的目录方式

  • 4 返回类似如下的结果,则说明客户端运行成功
Tunnel Status                 online
....

发表评论

首次评论需要等待20分钟,以后评论间隔为12分钟,剩余:19分59秒