准备工作:
1.准备云服务器(我使用阿里云服务器)、备案过的域名一个
2.域名解析:新手引导——快速入门——云解析
1.安装git(用以后续下载ngrok)
yum install git
查看git 版本:
2.安装go:
yum install go
命令 go env 用于打印 Go 语言的环境信息。其中的一些信息我们在之前已经多次提及,但是却没有进行详细的说明。在本小节,我们会对这些信息进行深入介绍。我们先来看一看 go env 命令情况下都会打印出哪些 Go 语言通用环境信息。
表0-25 go env 命令可打印出的 Go 语言通用环境信息
名称 说明 CGO_ENABLED 指明cgo工具是否可用的标识。 GOARCH 程序构建环境的目标计算架构。 GOBIN 存放可执行文件的目录的绝对路径。 GOCHAR 程序构建环境的目标计算架构的单字符标识。 GOEXE 可执行文件的后缀。 GOHOSTARCH 程序运行环境的目标计算架构。 GOOS 程序构建环境的目标操作系统。 GOHOSTOS 程序运行环境的目标操作系统。 GOPATH 工作区目录的绝对路径。 GORACE 用于数据竞争检测的相关选项。 GOROOT Go语言的安装目录的绝对路径。 GOTOOLDIR Go工具目录的绝对路径。
3.获取ngrok(在/usr/local下)
cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="xx.xx.xx"(*此处改为你自己的域名即可)
cd ngrok
4.为域名生成证书(/usr/local/ngrok目录下)
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
5.替换证书文件(/usr/local/ngrok目录下)
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
6.编译服务端
GOOS=linux GOARCH=amd64 make release-server
生成客户端
GOOS=windows GOARCH=amd64 make release-client
查看/usr/local/ngrok/bin下文件目录:
若提示找不到tree命令
则用yum install tree安装tree:
7.启动服务端(/usr/local/ngrok/bin目录下)
-domain:域名,第3步骤设置的
export NGROK_DOMAIN="xx.xx.xx"(*此处改为你自己的域名即可)
-httpAddr http协议端口 设置为8080端口
./ngrokd -domain=$NGROK_DOMAIN -httpAddr=":8080"
成功启动服务器
8.从云服务器下载ngrok客户端到windows本地
使用scp从linux服务器下载文件到本地方法
①从服务器下载文件
scp 用户名@服务器地址:文件路径 本地路径
②从本地上传文件到服务器
scp 本地文件路径 用户名@服务器地址:文件路径
具体操作:
scp root@服务器地址:/usr/local/ngrok/bin/windows_amd64/ngrok.exe 本地地址
在本地ngrok.exe 通目录下新建文件ngrok.conf:
server_addr: "ngrok.bepromising.top:4443"
trust_host_root_certs: false
server_addr: 是在服务器上设置的那个域名 4443是服务区启动时的监听端口 保持一致 (改就都改 不改就不要动)
9.启动客户端ngrok及遇到的问题
cmd到ngrok.exe所在目录下:
执行 ngrok.exe -config=ngrok.conf -subdomain test 8080
其中test为穿透的域名前缀,8080为穿透的域名映射端口
建立链接
其中遇到问题:一直连接不上,因此我以为是我的ngrok编译设置过程中出现了问题,然后看各种教程,使用个各种方法,下载不同,但是结果都是连接不上,直到最后看到了一个帖子:
服务端 启动成功 客户端连不上:
是因为 防火墙 端口没有开放443 4443 8080 等 都开放一下
开放后可以关闭防火墙 没什么大用
开了之后 还是连不上 这就需要去云服务器端设置安全组的入站规则:
①到服务器开放端口443 4443 8080:
查看防火墙状态,发现防火墙是关闭状态:systemctl status firewalld
打开防火墙:systemctl start firewalld
开放端口443 4443 8080:
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=4443/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp
提示success
注意:如果不使用“--permanent”标记,把么防火墙规则在重启后会失效。
②发现还是连接不上服务器,到云服务器设置安全组别
- 登录 云服务器管理控制台。
- 单击左侧导航中的 安全组。
- 选择地域。
- 找到要授权规则的安全组,单击 配置规则。
- 单击 添加安全组规则。
- 在弹出的对话框中,设置下面参数:
对443 4443 8080进行设置
再次连接,成功连接!!!!!
参考链接:
1)go 命令教程
4)ubuntu 16.04搭建ngrok内网穿透服务
5)Centos搭建Ngrok实现内网穿透:https://www.jianshu.com/p/796c3411f8eb