Centos7搭建ngrok服务端以及配置客户端

由于学校部分内网与跟外网不通,所以在校园网或者外网的情况下,连接不到内网服务器,看不了内网的网站。但是有时候我会需要在自己宿舍或者家里连接学校的内网服务器,看一下内网网站,一开始想到的是内网服务器搭建ss服务器,然后一想,怎么对外网IP映射端口呢,我又没有路由器权限。想来想去,还是直接用内网穿透的工具吧。

安装GO

安装编译ngrok,首先需要安装go(够浪),好想学go啊,可是我已经有Python了

一,yum安装

1.安装EPEL源

yum install epel-release

2.安装go

yum install golang -y

二,下载安装

打开https://golang.org/dl/,下载最新版的Linux安装包,目前最新版本是1.12.6

wget https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz

tar -C /usr/local/ -zxvf go1.12.6.linux-amd64.tar.gz

修改环境变量

nano .bashrc

添加如下

#go lang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

使环境变量生效

source .bashrc

查看go版本

go version

#go version go1.12.6 linux/amd64

编译ngrok

首先我们需要准备以下:

  • 一个主机记录为*的域名(可以为二级域名)
  • 一个通配符证书
  • 一台有外网IP的服务器(以上操作全在这台服务器上进行)

git以下ngrok的源码

git clone https://github.com/inconshreveable/ngrok

获取通配符证书的过程就省去了算了还是说一下吧

安装acme(获取Let’s Encrypt证书)

curl https://get.acme.sh | sh

使环境变量生效

source .bashrc

由于通配符证书只能使用DNS验证的方式,所以这边主要说一下DNSPOD跟阿里云的申请过程(我直接使用阿里云的accesskeys跟DNSPOD的API Token),当然你也可以自己添加DNS解析

配置变量环境

#阿里云

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali -d *.example.com -d example.com

#DNSPOD

export DPI_Id="1234"
export DPI_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dpi -d *.example.com -d example.com

之后就可以得到这个域名的通配符证书了,我们只需要关注得到的以下文件:

  • example.com.key
  • fullchain.cer
  • ca.cer

替换证书

cd ngrok/assets/client/tls/

看到:ngrokroot.crt snakeoilca.crt

替换成:ca.cer fullchain.cer (记得重命名为上面的)

cd ngrok/assets/server/tls/

看到:snakeoil.crt snakeoil.key

替换成:fullchain.cer example.com.key(记得重命名为上面的)

编译服务端

cd ngrok/

make release-server

如果在这里编译出错了,那你应该是选择了下载安装,解决方法:

#make: bin/go-bindata: Command not found错误

cd $GOROOT/bin

把go-bindata复制到ngrok/bin/目录下即可,之后再重新编译。

软连接一下:

ln -s /root/ngrok/bin/ngrokd /usr/bin/

运行:

ngrokd -tlsKey="/root/ngrok/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok/assets/server/tls/snakeoil.crt" -domain="example.com" -httpAddr=":1313" -httpsAddr=":1314" -tunnelAddr=":1315"

# domain是你上面的域名,httpAddr是HTTP的端口,httpsAddr是HTTPS的端口,tunnelAddr是ngrok的监听端口。(你也可以不加httpAddr以及后面的参数,让ngrok使用自己默认的端口,这里主要是服务器已经占用了80跟443端口,所以自己指定了端口)

输出:

[11:06:28 CST 2019/06/18] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[11:06:28 CST 2019/06/18] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[11:06:28 CST 2019/06/18] [INFO] (ngrok/log.Info:112) Listening for public http connections on 0.0.0.0:1313
[11:06:28 CST 2019/06/18] [INFO] (ngrok/log.Info:112) Listening for public https connections on 0.0.0.0:1314
[11:06:28 CST 2019/06/18] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on 0.0.0.0:1315

如果是以上输出,那么就说明服务端启动成功。

编译客户端-Linux

cd ngrok/

make release-client

如果是yum安装GO,那么客户端就是:ngrok/bin/ngrok

如果是下载安装GO,那么客户端就是:/usr/local/go/bin/ngrok

把客户端拷贝到内网服务器上,同级目录下创建编辑一个文件ngrok.cfg:

server_addr: "example.com:1315"
trust_host_root_certs: true

保存。

运行客户端

./ngrok -subdomain miku -config=ngrok.cfg 80

#这句命令的意思是,设置访问二级域名为miku.example.com,引用ngrok.cfg配置文件,监听本地的80端口。

编译客户端-Windows

GOOS=windows

GOARCH=amd64

make release-client

之后的操作方法上同。

经过上面的操作,我就可以使用自己的域名加端口,访问学校内网服务器的端口了。

 

5 条评论

发表评论

*