树莓派远程控制之ngrok代理

2017-12-20 Frank 服务器

之前用teamviewer实现了树莓派的远程控制,这里采用ngrok实现远程ssh及web服务搭建。

安装Go语言环境

安装必要包

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

由于Go官方地址也被墙了,这里使用国内镜像下载源码。

#wget http://www.golangtc.com/static/go/1.7rc6/go1.7rc6.linux-386.tar.gz
wget https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-amd64.tar.gz
tar -zxvf go1.9.2.linux-amd64.tar.gz
mv go /usr/local/
ln -s /usr/local/go/bin/* /usr/bin/

安装成功后查看可Go编译环境

go env

Ngrok源码配置

声明编译的路径和必要的域名(域名改成你自己的)

git clone https://github.com/inconshreveable/ngrok.git ~/ngrok
export GOPATH=~/ngrok/
export NGROK_DOMAIN="ngrok.liangcuntu.com"
cd ~/ngrok

生成证书,Ngrok会使用此证书加密通讯

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 -i
cp server.crt assets/server/tls/snakeoil.crt -i
cp server.key assets/server/tls/snakeoil.key -i

编译服务器端与客户端

服务器端为linux-x86-64

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

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

注:这里测试时只编译了amd64的服务器端和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语言的跨平台能力相当彪悍。

部署Ngrok

绑定域名

在编译配置时的域名ngrok.liangcuntu.com解析到服务器IP

注意:指定A记录时ngrok与*.ngrok都要填上,这样能方便地使用不同子域转发不同的本地服务。

服务器端部署

将编译好的可执行文件移至/usr/bin/下

cp ~/ngrok/bin/ngrokd /usr/bin/

为ngrokd单独开一个screen(或者用tmux)

yum install -y screen
screen -S ngrokd

运行ngrokd

sudo ngrokd -domain="ngrok.liangcuntu.com" -httpAddr=":801" -httpsAddr=":802"

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

客户端部署

将~/ngrok/bin/linux_arm/ngrok移至树莓派下
通过scp 拷贝

sudo scp root@liangcuntu.com:/root/ngrok/bin/linux_arm/ngrok ngrok/bin/linux_arm/

新建配置文件

mkdir ~/ngrok/ && cd ~/ngrok/
sudo touch ~/ngrok/ngrok.cfg
chmod 777 ngrok.cfg
#echo "server_addr: ngrok.liangcuntu.com:4443" >> ~/ngrok/ngrok.cfg
#echo "trust_host_root_certs: false" >> ~/ngrok/ngrok.cfg
cat > ngrok.cfg <<EOF
#必须是 域名:隧道端口 的格式
server_addr: "ngrok.liangcuntu.com:4443"
#自行编译无需验证ngrok官网证书
trust_host_root_certs: false
tunnels:
    ssh:
        remote_port: 10086
        proto:
            tcp: 22
    http:
        subdomain: pi
        remote_port: 10087
        proto:
            tcp: 80
EOF

启动客户端,start后面参数是需要启动的服务,这里默认树莓派已经安装nginx并已启动。

pi@raspberrypi $ ./ngrok -config=ngrok.cfg start http ssh
ngrok                                                                                         (Ctrl+C to quit)

Tunnel Status                 online                                                                          
Version                       1.7/1.7                                                                         
Forwarding                    tcp://tun.sfantree.com:10087 -> 127.0.0.1:22                                    
Forwarding                    tcp://tun.sfantree.com:10088 -> 127.0.0.1:80                                    
Web Interface                 127.0.0.1:4040                                                                  
# Conn                        0                                                                               
Avg Conn Time                 0.00ms

现在就可以愉快的使用ssh与访问树莓派的web服务了。

参考
一分钟实现内网穿透(ngrok服务器搭建)
自搭Ngrok实现树莓派内网穿透
自搭Ngrok实现树莓派内网穿透
Docker、 Weave、 树莓派(Raspberry Pi) 和 一些网络云计算

标签: 树莓派

评论:

两寸土
2017-12-20 15:19
测试微博授权后评论不用输入用户名和验证码
两寸土
2017-12-20 20:57
@两寸土:hello
两寸土
2017-12-20 20:57
@两寸土:hello
用户5979662024
2018-03-11 10:48
@两寸土:aa
Frank
2017-12-20 15:18
测试微博授权后评论不用输入用户名和验证码

发表评论 登录

Top