美文网首页
部署自己的Ngrok实现内网穿透

部署自己的Ngrok实现内网穿透

作者: vczyh | 来源:发表于2018-07-27 12:10 被阅读0次

一般来说,外网要访问服务器,那么这个服务器必须绑定一个公网ip,现在可以购买的云服务器都是这样。比如个人要在家里组建服务器,而且要外网的客户端可以访问,这时候问题就出现了

  • 问题1:现在一般家里是没有外网ip的,ip都是路由好几层的局域网ip
  • 问题2:就算有外网ip,也是动态ip

准备

  • 外网服务器一台,系统为Ubuntu
  • 根域名,需要具有域名的A记录解析权限
  • 内网测试机器,这里使用个人windows笔记本

正式工作

域名解析

首先需要一个域名作为ngrok的域名,比如ngrok.example.com,那么需要把ngrok.example.com和*.ngrok.example.com域名的A记录解析到外网服务器。

安装ngrok

安装Go环境

ngrok是Go语言开发的,需要安装Go环境
ubuntu使用 sudo apt install golang 安装
安装完成后使用 go version 验证是否安装成功。

下载ngrok源码

ngrok的官方github地址是:https://github.com/inconshreveable/ngrok
使用 git clone https://github.com/inconshreveable/ngrok.git 拉取代码。

生成自签名证书

  • 删除assets/client/tlsassets/server/tls目录下的所有证书文件

  • 在ngrok根目录创建脚本文件script,文件内容为:
    将NGROK_DOMAIN替换成自己的ngrok域名

    cd /usr/local/ngrok
    NGROK_DOMAIN="ngrok.example.com"
    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 device.key 2048
    openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
    cp rootCA.pem assets/client/tls/ngrokroot.crt
    cp device.crt assets/server/tls/snakeoil.crt
    cp device.key assets/server/tls/snakeoil.key
    
  • 使用sudo sh script运行文件

编译服务端

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

这是使用 GOOS=linux GOARCH=amd64 make release-server编译linux服务端版本

编译客户端

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

这里使用GOOS=windows GOARCH=amd64 make release-client编译windows客户端版本

运行服务端

  • 编译完服务端后,在生成的bin下有ngrokd,把ngrok复制到服务器
  • 运行服务
    ./ngrokd -domain="ngrok.example.com" -httpAddr=":8088" -httpsAddr=":8089" -tunnelAddr=":4000"
  • 出现以下信息表示成功

运行客户端

  • 编译完服务端后,在生成的bin/windows_amd64下有ngrok.exe,把ngrok.exe复制到笔记本电脑
  • 创建ngrok.cfg,添加配置
     server_addr: "ngrok.example.com:4000"
     trust_host_root_certs: false
    
  • 运行服务
    ./ngrok -subdomain="vv" -config="ngrok.cfg" 8080
  • 出现以下信息表示成功

测试

浏览器访问vv.ngrok.example.com:8088就会被代理到内网机器的8080端口

相关文章

  • 部署自己的Ngrok实现内网穿透

    一般来说,外网要访问服务器,那么这个服务器必须绑定一个公网ip,现在可以购买的云服务器都是这样。比如个人要在家里组...

  • 使用Ngrok实现内网穿透服务

    # 使用Ngrok实现内网穿透服务 tags: 网络 Linux ngrok ngrok是什么? ngrok是一个...

  • sunny-ngrok 内网穿透

    sunny-ngrok 内网穿透是基于 ngrok 的一个内网穿透服务,提供免费的用于开发的内网穿透隧道。 接下来...

  • 1.内网穿透搭建

    实现接口请求到本地服务,自己电脑并没有公网的ip,可以通过内网穿透实现 1.ngrok 使用免费的ngrok[ht...

  • ngrok 实现内网穿透

    最近新买了一台服务器放在家里跑各种杂七杂八的服务,需整一个内网穿透的服务通过外网也能远程登录服务器。很久之前就听闻...

  • ngrok实现内网穿透

    什么是内网穿透 内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有...

  • Ngrok实现内网穿透

    先决条件: 云服务器一台 域名 Linux 下载源码和生成证书 编译 先自行安装Go 出现下载失败的,先 再使用g...

  • Ngrok实现内网穿透

    声明:本文主要参考以下文章https://www.jianshu.com/p/796c3411f8eb 1. 环境...

  • Ngrok实现内网穿透

    试用了百度里搜索常会提到的Sunny-Ngrok[https://www.ngrok.cc/],发现并不好用,启动...

  • 自己搭建ngrok实现内网穿透

    背景 毕设搞了下树莓派,校园网或者在家使用肯定是内网了,即便家里的宽带是公网ip,每次重启ip都会变化,一开始也考...

网友评论

      本文标题:部署自己的Ngrok实现内网穿透

      本文链接:https://www.haomeiwen.com/subject/cmiwmftx.html