此文收集自网络,主要是在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

好的,双击运行,大功告成。从此随时随地,拿出手机,远程你的桌面,登陆你的私人网盘。