原创

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

正文到此结束
本文目录