从0到1打造自己专属内网穿透工具

从0到1打造自己专属内网穿透工具

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.Info:112) Listening for public http connections on [::]:8080
    [07:31:47 CST 2019/05/03] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8000
    [07:31:47 CST 2019/05/03] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:8001
    [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处理方式一样

6、后续

更多精彩,敬请关注, 程序员导航网 https://chenzhuofan.top

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值