用云服务器搭建ngrok实现内网穿透(Linux)
内网穿透的目的是什么,简单的来说,就是让外网能够访问内网,也就是让别人通过互联网来访问你本地的应用。网上有一些工具可以实现,但大多都需要收费,免费的又不太稳定,域名还长,所以就用自己的云服务器去搭建一个ngrok来实现内网穿透的功能。
为什么要内网穿透呢,例如微信平台开发的时候,能够本地进行调试,是不是就很方便了。
一、域名
域名必须要有,不然没有办法解析映射。而且域名挺便宜的,在阿里或腾讯买个便宜的域名只要几块钱/年。如果不做网站服务的话,可以不需要备案,但是需要进行实名认证。然后进行域名解析,记录值修改成自己云服务器上的公网ip就行了。
二、云服务器安装和配置ngrok
1.配置服务端
(1)安装git 用于下载ngrok代码。
yum -y install git
(2)克隆ngrok代码,ngrok-server是文件夹命名。
git clone https://github.com/inconshreveable/ngrok.git ngrok-server
(3)安装golang。
yum -y install golang
(4)安装完成后,进入ngrok目录下。
cd ngrok-server
(5)设置环境变量,Go语言的安装位置。
export GOPATH=/usr/local/ngrok/
(6)设置环境变量,ngrok域名,填写自己配置的域名。(一定要是自己的域名:如test.com)
export NGROK_DOMAIN=“你的域名”
(7)执行命令创建ssl证书。
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj “/CN=$NGROK_DOMAIN” -days 5000 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
(8)然后直接拷贝覆盖证书文件。
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf server.crt assets/server/tls/snakeoil.crt
\cp -rf server.key assets/server/tls/snakeoil.key
(9)编译ngrok的Linux服务端。
GOOS=linux GOARCH=amd64 make release-server
(10)编译生成ngrok的Windows客户端。
GOOS=windows GOARCH=amd64 make release-client
(11)进入到bin目录,启动ngrok服务。(这里我设置http端口为8080,https为4430,ngrok的默认连接口为4443这里我就不做更改了,注:请注意服务器是否放行了你设置的端口)
cd bin
./ngrokd -domain=”你的域名” -httpAddr=”:8080″ -httpsAddr=”:4430″ -tunnelAddr=”:4443″
启动后如下图:
如果启动失败,请检查端口是否被占用。
服务端这里就配置完成了,如果想关闭服务的话可按Ctrl+C退出。
2.配置客户端
(1)下载生成的ngrok客户端文件,文件在ngrok-server/bin/windows_amd64文件夹内。
(2)将下载下来的ngrok.exe放在一个文件夹里,并在同级目录下新建一个文本文件,重命名为ngrok.cfg配置文件。
(3)用记事本打开该文件,保存以下内容(你的域名+ngrok连接口:默认连接口为4443,233和2333为自定义的本地端口,www为二级域名前缀)注:缩进要用空格打,不要用tab制表符!!!冒号后接的参数前要加上一个空格,不然会报错无法启动的!
server_addr: "你的域名:4443"
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "233"
https:
subdomain: "www"
proto:
https: "2333"
(4)再在此目录下新建一个文本文件,重命名为start.bat启动文件。
(5)同样用记事本打开该文件,保存以下内容。
ngrok -config=ngrok.cfg start http http
(6)双击运行start.bat,如果显示下面的界面就表示成功了。
三、遇到问题
1.双击start.bat闪退:请注意ngrok.cfg配置文件的内容格式是否正确。
2.出现下面界面:请确认服务器是否开启了服务,或是否放行了相应的端口。
3.如果第2条检查没有问题,服务器上出现Failed to read message: remote error: tls: bad certificate错误:
为证书错误,请确认ngrok.cfg中的域名、服务开启命令中的域名和配置环境变量中的域名是否保持一致。
查看环境变量域名的命令为:echo $NGROK_DOMAIN