树莓派使用Ngrok进行内网穿透

这个东西其实早在写《少数派报告——树莓派搭建Tor匿名站点》的时候就已经搭好了,但由于Tor网络不稳定,那个站点就没有继续做下去,这样内网穿透的服务也就用不上了。(Tor本身就可以提供内网穿透的,捂脸)
算算时间也过去了好几个月,一直想找个机会把搭建的流程记录在这里,免得以后时间长了忘记。正好今天没什么事情,正好测试一下之前按照的服务还可不可以用。

——————————————————————————————————————–
0x01 准备材料
1)树莓派2B+一台
2)VPS一台
3)独立域名一个
我用的是Vultr的服务器,默认不带防火墙的。如果要用其他厂商的服务器,请一定要先检查防火墙,开放相应的端口。
0x02 编译Ngrok
安装相关的依赖:

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
tar -zxvf go1.7.6.linux-386.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.sfantree.com"
cd ~/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 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

编译服务器端与客户端:

Vltur服务器端为linux-x86-64
export GOOS=linux
export GOARCH=386
make release-server
树莓派为linux-arm架构,重新声明go env里的变量
export GOOS=linux
export GOARCH=arm
make release-client

编译完成过后~/ngrok/bin/linux_arm/ngrok即为树莓派客户端运行文件。
0x03 部署Ngrok
绑定域名:
在编译配置时的域名tunnul.argus.space解析到服务器IP
注意:指定A记录时tunnul与*.tunnul都要填上,这样能方便地使用不同子域转发不同的本地服务。
服务器端部署:
将编译好的可执行文件移至/usr/bin/下

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

为ngrokd单独开一个screen。

yum install -y screen
screen -S ngrokd
sudo ngrokd -domain="ngrok.sfantree.com" -httpAddr=":6006" -httpsAddr=":7007"

由于在服务器端通常80端口和443端口都会被使用,所以推荐使用高位端口。
屏幕会输出一连串日志信息,ttpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。
客户端部署:
将~/ngrok/bin/linux_arm/ngrok移至树莓派下
新建配置文件

mkdir ~/ngrok/ && cd ~/ngrok/
touch ~/ngrok/ngrok.cfg
echo "server_addr: ngrok.sfantree.com:4443" >> ~/ngrok/ngrok.cfg
echo "trust_host_root_certs: false" >> ~/ngrok/ngrok.cfg

运行客户端

#指定子域名为pi,采用http协议和使用80端口
./ngrok -subdomain pi -proto=http -config=ngrok.cfg 80

看见Tunnel Status变为online说明成功连接服务器端
0x04 访问测试
浏览器地址栏输入pi.tunnul.argus.space
0x05 本文参考
十分感谢这篇文章的作者,他的文章帮助我搭建了这套系统。
https://www.sfantree.com/ngrok-raspberry-cross-nat/

Leave a Reply

Your email address will not be published. Required fields are marked *