ngrok搭建详细步骤
1、什么人适合看这篇文章
- 正在使用teamview或者QQ等远程工具,但是经常掉线而烦恼的用户
- 有很多个人的站点,但是不想花费很多的资金去购买ecs服务器的用户
2、问题的由来
从笔者的自身的角度出发,以上的2个痛点都有
- teamview个人版经常是掉线,商业版本价格不菲。但是远程办公的场景是不可避免的
- 个人电脑上搭建了一套漂亮的系统,想给不在一个局域网的朋友演示一番,对不起网络不通,难道必须要部署到一台具有公网ip的机器上才能达到目的,答案是No
- 随着自己的兴趣和业务的拓展,当初的一台ecs服务器已经出现了资源不足了,难道只能不上线了或者继续砸钱购买ecs,答案同样是No
** 所以本文是能给你带来便利和省money的福利文章**
3、基础知识准备
3.1、什么是网络映射
说的简单直白一点就是把处于内网的机器映射出去,让不在同一局域网的用户可以直接访问。感知如何访问是公网的ip一样
3.2、基本的原理
- 首先必须要有一台具有公网的ip的机器(暂且称为A)作为中心
- 内网机器(暂且称为B)通过socket与A进行socket进行通讯
- 用户直接访问A的地址,解析出对应的请求需要转发到B,所以消息的方式发送到B
- B收到消息,在本地执行请求的命令,然后到执行的结果以消息的方式回发给A
- A将结果返回给用户
- 实现的效果如同用户直接访问B一样
3.3、常规的实现方案
- 反向代理(如nginx,代理的机器需要和nginx在同一局域网内)
- 花生壳
- nat123
- ngrok
- frp
4、本文需要介绍的重点
本篇重点介绍的是其中的一款ngrok
ngrok是一款开源的老牌的网络映射工具,目前开源值1.7,2.0以上版本回归商业版,不过对于个人用户来说已经足够了,稳定好用,国内有不少的基于ngrok的二次开发收费工具。其实自己会搭建,何必花冤枉钱
5、ngrok搭建详细步骤
5.1、前期的必要准备
- 一台ecs
- 一个域名
域名需要本案,同时添加域名映射,ngrok.xx.com
需要添加三级域名映射 *.ngrok.xx.com (这个是重点,很多教程中都没提到这一点,走了不少弯路)
5.2、获取源码
源码的地址是https://github.com/chen-xing/ngrok-one-key-install
5.2.1、很多的教程的步骤是
- 搭建linux环境
- 安装 git go 环境
- 下载代码
- 生成证书
- 编译代码,根据平台分别生成不同版本的 服务端和客户端
- 启动服务端
- 配置config,启动客户端,连接客户端
5.2.2、难点
- 前置的环境步骤过多,而且很多都是国外,连接性不好
- 步骤繁琐,影响出现拦路虎而不不知所措
5.2.3、不一样的步骤
从git 上直接下载编译好的服务端和客端
下载地址:https://github.com/chen-xing/ngrok-one-key-install/tree/master/latest
注意匹配自己的机器的系统类型
5.3、服务端启动步骤
在服务端程序的同级目录下执行命令
nohup ./ngrokd -domain="ngrok.xxx.com" -httpAddr=":8080" -httpsAddr=":8000" -tunnelAddr=":8001"
命令参数解释
nohup 在操作系统后台运行次程序,防止控制台关闭,程序退出
domain 指定代理的域名,需要在域名服务上做好解析,客户端连接的时候需要对应上
httpAttr http请求的代理端口
httpsAttr https的请求的代理端口
tunnelAddr soket通讯的端口
出现以下的提示信息的时候说明是启动成功
[07:31:47 CST 2019/05/03] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[07:31:47 CST 2019/05/03] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[07:31:48 CST 2019/05/03] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [pub:b078d6f] New connection from 58.101.43.167:9229
5.4、客户端的启动步骤
在客户端程序的同级目录下创建ngrok.cfg文件
server_addr: "ngrok.xxx.com:8001"
trust_host_root_certs: false
server_addr 指定服务端的通讯的端口,与服务端的tunnelAddr一致
trust_host_root_certs 关闭支持TLS加密协议的证书信任
执行客户端的启动命令
ngrok -config=ngrok.cfg -subdomain %clientid% %port%
%clientid% 为需要映射出来的三级子域名,如aa
%port% 为代理的本地的端口 如8080
ngrok (Ctrl+C to quit)
Tunnel Status online
Version 1.7/1.7
Forwarding http://aa.ngrok.xx.com:8080 -> 127.0.0.1:9080
Forwarding https://aa.ngrok.xx.com:8080 -> 127.0.0.1:9080
Web Interface 127.0.0.1:4040
Conn 1161
Avg Conn Time 5006.61ms
出现以下的页面的时候说明连接成功,可以使用 http://aa.ngrok.xx.com:8080 来访问你本地的站点
127.0.0.1:4040 则是本地流量回放的web页面
5.5、远程桌面或远程服务代理
执行启动命令
ngrok -config=ngrok.cfg -proto=tcp %clientid%
%port% 为代理的本地的端口 如22
执行成功就会把本地的22端口映射成公网地址,其他局域网的用不就可以用这个映射地址通过ssh工具来访问你的 机器
其他 3389 3306处理方式一样
客户端的命令说明
-log string
Write log messages to this file. 'stdout' and 'none' have special meanings (default "none")
-log-level string
The level of messages to log. One of: DEBUG, INFO, WARNING, ERROR (default "DEBUG")
-proto string
The protocol of the traffic over the tunnel {'http', 'https', 'tcp'} (default: 'http+https') (default "http+https")
-subdomain string
Request a custom subdomain from the ngrok server. (HTTP only)
Examples:
ngrok 80
ngrok -subdomain=example 8080
ngrok -proto=tcp 22
ngrok -hostname="example.com" -httpauth="user:password" 10.0.0.1
Advanced usage: ngrok [OPTIONS] <command> [command args] [...]
Commands:
ngrok start [tunnel] [...] Start tunnels by name from config file
ngrok list List tunnel names from config file
ngrok help Print help
ngrok version Print ngrok version
Examples:
ngrok start www api blog pubsub
ngrok -log=stdout -config=ngrok.yml start ssh
ngrok version
使用ngrok进行代理ssh的时候,服务端的端口是随机生成的,但是服务端处于安全性的考虑,能够开放的端口的有限的,那么如何固定ssh时候,服务端的端口
参考的配置
创建yml文件 ngrok.yml
server_addr: "ngrok.chenzhuofan.top:8001"
trust_host_root_certs: false
tunnels:
ssh:
remote_port: 36826
proto:
tcp: 3389
¨K21K
完整版的参考
server_addr: youdomain.com:4443
trust_host_root_certs: false
inspect_addr: disabled
auth_token: 用户ID
password: "认证ID"
tunnels:
¨K22K
6、后续
更多精彩,敬请关注, 程序员导航网
版权声明:本文为人工博客的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接:https://www.gzcx.net/article/24