此文收集自网络,主要是在centos6下通过搭建ngrok服务器,实现端口转发、远程桌面,并将内网建立的seafile网盘发布至外网,实现外网访问,参照网上看了很多资料,经常在搭建过程中出现这样那样的问题,相信大家也会遇到同样的问题,在这里共同学习。
本人并非码农,说是不懂也不过分,下面的很多代码我都不知道有什么意义,但是照做就成功了,所以我都能行,你肯定也行。这可以说是一个傻瓜版的教程,只需要你一步步跟着做就能成功,别看代码多,多用复制粘贴,免得输错了。
我搭建ngrok不是为了测试内网建的网页,主要是进行远程桌面和建立私有云,过程都一致,只是在最后客户端配置时有点区别。在本教程最后,还附有后台运行及开机启动方法,增强用户体验。
好了,开始吧!
1. 你需要准备的东西
第一是VPS,阿里云、搬瓦工等都行,我用的操作系统为CentOS6(32位)。
第二是域名,将二级域名通过A记录解析到VPS服务器上。这里需要将*.ngrok.yourdomain.com及ngrok.yourdomain.com都解析到你的VPS的IP。其中,youdomain.com要替换成你的域名。
2. 安装更新git
centos6默认安装的git 1.7.1,这里需要对其进行升级到1.7.9.5以上,这里我们将其升级至2.2.1。编译git 2.2.1需要使用到一些软件工具,需要提前先安装好这些软件工具,按顺序输如下命令:
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install gcc perl-ExtUtils-MakeMaker
yum install xmlto
卸载掉系统中已经安装的 git 1.7.1,运行如下命令:
yum remove git
使用wget下载源码压缩包,并进行编译安装。按顺序运行如下命令:
wget https://github.com/git/git/archive/v2.2.1.tar.gz
tar zxvf v2.2.1.tar.gz
cd git-2.2.1
make configure
./configure –prefix=/usr/local/git –with-iconv=/usr/local/libiconv
make all doc
make install install-doc install-html
echo “export PATH=$PATH:/usr/local/git/bin” >> /etc/bashrc
source /etc/bashrc
安装完成后,检查版本号:
git version
出现版本号2.2.1说明安装成功了。
3. 配置go环境
下载并解压,这里注意了,一定要选择正确的golang版本,你要是32位就选386的,64位就选amd64,可从这里查看新的版本:https://golang.org/dl/,并更改下面的下载链接:
#下载go1.4.2源码包
wget https://dl.google.com/go/go1.11.linux-386.tar.gz
#解压到/usr/local/
tar -C /usr/local/ -zxf go1.11.linux-386.tar.gz
添加环境变量
#打开/etc/profile
#配置profile
vi /etc/profile
在最后面添加:
#添加下面两行代码
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
保存并退出,然后编译/etc/profile文件,使之前的配置生效:
#编译profile
source /etc/profile
查看go环境是否配置成功:
go version
显示版本号,说明配置成功。我之前一直提示错误,就是因为上面选择了错误的版本进行安装。
4. 配置ngrok
下载Ngrok源码包:
#下载ngrok源码包
cd ~
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok/
生成自签名证书:
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj “/CN=ngrok.yourdomain.com” -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj “/CN=ngrok.yourdomain.com” -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
替换默认的证书文件:
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
编译ngrokd(服务器端)
make release-server
我们现在需要在windows下运行ngrok客户端,编译Windows版的ngrok客户端:
#切到go的安装目录
cd /usr/local/go/src
#给Go编译器加上交叉编译windows/amd64程序的功能
GOOS=windows GOARCH=amd64 ./make.bash
#切回到ngrok目录
cd –
#执行如下命令编译Windows 64位客户端
GOOS=windows GOARCH=amd64 make release-client
#以上GOARCH=amd64指的是编译为64位版本,如需32位改成GOARCH=386即可
没有错误的话,Windows客户端ngrok就编译成功了,我们可以在./bin/windows_amd64/目录下找到执行文件ngrok.exe。将其下载到Windows上。
5. 运行与配置
启动服务器端ngrokd:
./bin/ngrokd -domain=”ngrok.yourdomain.com” -httpAddr=”:8080″
建立客户端配置文件,在ngrok.exe所在目录下建立文件ngrok.cfg,用记事本等文本编辑器写入以下内容并保存。
server_addr: “ngrok.dingdayu.com:4443”
trust_host_root_certs: false
映射HTTP,记事本等文本编辑器写入以下内容并保存为.bat。如果不加参数-subdomain=test,将会随机自动分配子域名。
ngrok -config=ngrok.cfg -subdomain=test 80
映射TCP:
./ngrok -proto=tcp 3389
3389为远程桌面默认端口。最后记得在防火墙里打开443、4443、3389(远程桌面)及涉及到的其他端口。
6. 优化配置、后台运行与开机启动
针对以上第5部分“运行与配置”,经常是关闭窗口就停止运行了,很不方便,体验不好。找到了一个另外的方便的方式进行,首先解决服务端,在 ngrok 安装目录下创建启动脚本 start.sh,用root创建的话地址就是/root/ngrok。内容如下:
sudo nohup /root/ngrok/bin/ngrokd -domain=”ngrok.yourdomain.com” -httpAddr=”:8080″ &
并更改脚本权限:
chmod 755 start.sh
新建 ngrok 开机启动脚本/etc/init.d/ngrok,内容如下:
#!/bin/sh
#chkconfig:2345 70 30
#description:ngrok
ngrok_path=/usr/appdata/ngrok
case “$1” in
start)
echo “start ngrok service..”
sh ${ngrok_path}/start.sh
;;
*)
exit 1
;;
esac
更改文件权限:
cd /etc/init.dchmod 755 ngrok
注册开机启动:
chkconfig –add ngrok //添加启动服务 ngrok
service ngrok start //测试服务是否能启动成功
chkconfig //检查自启动的服务
这样服务器端就配置好了。下面是客户端。配置ngrok.cfg,这里面的格式一定不能变,包括空格的位置。
server_addr: “baidu.com:4443”
trust_host_root_certs: false
tunnels:
mstsc:
remote_port: 3389
proto:
tcp: “127.0.0.1:3389”
web:
subdomain: “tss”
proto:
http: 80
seafile1:
remote_port: 8000
proto:
tcp: “127.0.0.1:8000”
seafile1:
remote_port: 8082
proto:
tcp: “127.0.0.1:8082”
在同文件夹内编写start.bat文件
ngrok -config=”ngrok.cfg” start mstsc web seafile1 seafile2
为了在windows端实现窗口隐藏,可以用以下方法把start.bat窗口隐藏,想要停止服务,需要在任务管理器里停止进程ngrok。
复制以下代码存为hiderun.bat,放在ngrok.exe文件夹内:
@echo off
if “%1″==”h” goto begin
start mshta vbscript:createobject(“wscript.shell”).run(“””%~nx0″” h”,0)(window.close)&&exit
:begin
::以下为正常批处理命令,不可含有pause set/p等交互命令
ngrok -config=”ngrok.cfg” start mstsc web seafile1 seafile2
pause
好的,双击运行,大功告成。从此随时随地,拿出手机,远程你的桌面,登陆你的私人网盘。
发表评论