之前用teamviewer实现了树莓派的远程控制,这里采用ngrok实现远程ssh及web服务搭建。
安装必要包
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
声明编译的路径和必要的域名(域名改成你自己的)
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