这个东西其实早在写《少数派报告——树莓派搭建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/