ngrok 介绍

目录

  我们如何在外网连接我们内网中的服务,可以用花生壳之类的软件,但是这些软件并不是很方便和稳定,而且需要用第三方的服务器,如果你不是
很放心的话,可以试一下 ngrok 这个软件。在我家的树莓派上安装了 client,在我的阿里云上安装 server,这样我就可以随时随地的 ssh 到我家
中的树莓派了,如果在弄一个摄像头,就可以随时随地的监控家里的情况,用处还是非常大的。

golang 环境安装

# 如果是编译安装必须要安装 golang 环境
wget http://www.golangtc.com/static/go/1.6/go1.6.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz

cat >>/etc/profile<<EOF
export PATH=$PATH:/usr/local/go/bin
EOF

source /etc/profile

go version

服务器安装

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

export NGROK_DOMAIN="v5b7.com"  

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 device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp -f rootCA.pem assets/client/tls/ngrokroot.crt
cp -f device.crt assets/server/tls/snakeoil.crt
cp -f device.key assets/server/tls/snakeoil.key  

GOOS=linux GOARCH=amd64
make release-server release-client  

# 启动服务器
bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="v5b7.com" -httpAddr=":8081" -httpsAddr=":8082"

树莓派客户端安装

wget https://storage.googleapis.com/golang/go1.6.2.linux-armv6l.tar.gz 

sudo tar -C /usr/local -xzf go1.6.2.linux-armv6l.tar.gz

cat >>/etc/profile<<EOF
export PATH=$PATH:/usr/local/go/bin
EOF

source /etc/profile

# 注意客户端和服务端的 key 都用一样的,不然编译出来的链接不了
git clone https://github.com/inconshreveable/ngrok
cd ngrok
cp -f rootCA.pem assets/client/tls/ngrokroot.crt
#cp -f device.crt assets/server/tls/snakeoil.crt
#cp -f device.key assets/server/tls/snakeoil.key  
GOOS=linux GOARCH=arm 
make release-client

# 配置
vim ngrok.cfg
server_addr: v5b7.com:4443
tunnels:
  ssh:
    subdomain: www
    remote_port: 50001
    proto:
      tcp: 22
trust_host_root_certs: false

# 启动
./ngrok -config ngrok.cfg start ssh

守护程序

我们希望在任何时候我们的 ngrok 客户端都是开启的,这时可以写一个检查程序在 crontab 里面每分钟执行一次,如果检查到程序没有启动就启动程序

检查脚本

#!/bin/bash

if ! $(ps -ef |grep ngrok |grep -Ev 'grep|start_ngrok.sh'>/dev/null) ; then cd   ~/ngrok/bin/ ; sh ./start.sh ; fi

启动脚本

#/bin/bash

./ngrok -config ngrok.cfg start ssh

crontab

* * * * sh /home/jimila/start_ngrok.sh

目录