之前一直想着吧电脑放宿舍,在外面想用一下的话就直接远程桌面访问过来就好啦。但是学校没有分配公网地址,只有内网地址,那么就没有办法通过公网访问啦。某天必须要在内网环境下给同学开远程桌面的访问服务,从梁兄那听说了Ngrok这样的神器,可以自己搭建内网穿透服务,只需要一个VPC跑着ngrok的服务就可以啦。理解了一下,感觉大概的原理是服务器上有一个端口转发。在client端做一个本地端口到服务器端口的映射,这样访问服务器的端口就相当于访问了本地端口。下面就来实际搭建一下吧
服务器端
ngrok是开源的,不过在2.0之后做了商业化的处理,需要付费,这里我们就是用之前的开源源码自己进行编译。 首先从git上下载源码git clone https://github.com/inconshreveable/ngrok.git因为ngrok是用Go编写的,所以需要搭建GO语言的环境,在centos上直接 yum install go 即可 go语言环境搭建好后,需要将NGROK_DOMAIN这个变量赋值为你自己的域名,比如
NGROK_DOMAIN="mysugar.me"使用自己的域名,我们需要自签名证书:
cd ngrok这样就在当前文件夹下生成了*.key和*.crt一共六个文件,将他们复制到相应的文件夹:
openssl genrsa -out ngrokroot.key 2048
openssl req -x509 -new -nodes -key ngrokroot.key -subj "/CN=$NGROK_DOMAIN" -days 36500 -out ngrokroot.crt
openssl genrsa -out snakeoil.key 2048
openssl req -new -key snakeoil.key -subj "/CN=$NGROK_DOMAIN" -out snakeoil.csr
openssl x509 -req -in snakeoil.csr -days 36500 -CA ngrokroot.crt -CAkey ngrokroot.key -CAcreateserial -out snakeoil.crt
cp ngrokroot.crt assets/client/tls/接下来就可以编译服务器啦:
cp snakeoil.crt assets/server/tls/
cp snakeoil.key assets/server/tls/
make release-server此时变异的可执行文件就在bin目录下啦,可以ngrokd --help来查看选项,想运行的话使用
./ngrokd -domain="mysugar.me"即可。看到下面这个样子,就说明服务器端配置完成啦:
客户端
编译客户端需要根据不同的系统编译不同的客户端文件windows:
GOOS=windows GOARCH=amd64 make release-clientmacOS:
GOOS=darwin GOARCH=amd64 make release-client此时在自己电脑上以相应参数运行客户端即可,配置开放远程桌面和ssh端口可以查看这个系列的下一篇博文