10分钟搭建属于自己的ngork服务器,实现内网穿透

Wesley13
• 阅读 396

10分钟搭建属于自己的ngork服务器,实现内网穿透

10分钟搭建属于自己的ngork服务器,实现内网穿透

1、什么是ngrok

ngrok 是一个使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

百度百科介绍

可以去官方网站瞅瞅下载一个ngrok客户端测试下

使用官方的缺点:
1、速度比较慢
2、经常会连不上
3、网络不稳定经常会断开

2、国人搭建的ngrok

1、Ngrok国内免费服务器——糖果科技
2、http://www.ittun.com
3、Sunny-Ngrok内网转发
4、https://natapp.cn
5、http://ngrok.2bdata.com

如果你有推荐欢迎留言上墙

3、自己搭建

准备工作

1、一台拥有公网ip的服务器或者vps
2、把主域名解析到服务器上
比如:ngrok.javen.com

软件下载地址:

go的下载地址:http://www.golangtc.com/download(需要使用1.4.2)
git的下载地址:http://git-scm.com/downloads
绝对下载地址:https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
ngrok克隆地址:https://github.com/inconshreveable/ngrok.git

详细的操作步骤可以参考以下几篇文章

http://www.sunnyos.com/article-show-48.html
http://www.cnblogs.com/pwenlee/p/5302880.html
http://blog.csdn.net/u013216667/article/details/50782084

4、使用开源的脚本安装环境以及编译客户端

https://github.com/sunnyos/ngrok

以上脚本执行就要输入域名,其他操作也需要再次输入域名

修改之后的版本

#!/bin/bash
# -*- coding: UTF-8 -*-
#############################################
#作者网名:Javen
#修改:https://github.com/sunnyos/ngrok #
#############################################
# 获取当前脚本执行路径
SELFPATH=$(cd "$(dirname "$0")"; pwd)
GOOS=`go env | grep GOOS | awk -F\" '{print $2}'` GOARCH=`go env | grep GOARCH | awk -F\" '{print $2}'` echo '请输入一个域名' read DOMAIN install_yilai(){ yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ unzip } # 安装git install_git(){ unstall_git if [ ! -f $SELFPATH/git-2.9.3.tar.gz ];then wget https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz fi tar zxvf git-2.9.3.tar.gz cd git-2.9.3 ./configure --prefix=/usr/local/git make make install ln -s /usr/local/git/bin/* /usr/bin/ rm -rf $SELFPATH/git-2.9.3 } # 卸载git unstall_git(){ rm -rf /usr/local/git rm -rf /usr/local/git/bin/git rm -rf /usr/local/git/bin/git-cvsserver rm -rf /usr/local/git/bin/gitk rm -rf /usr/local/git/bin/git-receive-pack rm -rf /usr/local/git/bin/git-shell rm -rf /usr/local/git/bin/git-upload-archive rm -rf /usr/local/git/bin/git-upload-pack } # 安装go install_go(){ cd $SELFPATH uninstall_go # 动态链接库,用于下面的判断条件生效 ldconfig # 判断操作系统位数下载不同的安装包 if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ];then # 判断文件是否已经存在 if [ ! -f $SELFPATH/go1.4.2.linux-amd64.tar.gz ];then wget http://www.golangtc.com/static/go/1.4.2/go1.4.2.linux-amd64.tar.gz fi tar zxvf go1.4.2.linux-amd64.tar.gz else if [ ! -f $SELFPATH/go1.4.2.linux-386.tar.gz ];then wget http://www.golangtc.com/static/go/1.4.2/go1.4.2.linux-386.tar.gz fi tar zxvf go1.4.2.linux-386.tar.gz fi mv go /usr/local/ ln -s /usr/local/go/bin/* /usr/bin/ } # 卸载go uninstall_go(){ rm -rf /usr/local/go rm -rf /usr/bin/go rm -rf /usr/bin/godoc rm -rf /usr/bin/gofmt } # 安装ngrok install_ngrok(){ uninstall_ngrok cd /usr/local if [ ! -f /usr/local/ngrok.zip ];then cd /usr/local/ wget http://www.sunnyos.com/ngrok.zip fi unzip ngrok.zip export GOPATH=/usr/local/ngrok/ export NGROK_DOMAIN=$DOMAIN cd 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 cp rootCA.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key # 替换下载源地址 sed -i 's#code.google.com/p/log4go#github.com/keepeye/log4go#' /usr/local/ngrok/src/ngrok/log/logger.go cd /usr/local/go/src GOOS=$GOOS GOARCH=$GOARCH ./make.bash cd /usr/local/ngrok GOOS=$GOOS GOARCH=$GOARCH make release-server /usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=":80" } # 卸载ngrok uninstall_ngrok(){ rm -rf /usr/local/ngrok } # 编译客户端 compile_client(){ cd /usr/local/go/src GOOS=$1 GOARCH=$2 ./make.bash cd /usr/local/ngrok/ GOOS=$1 GOARCH=$2 make release-client } # 生成客户端 client(){ echo "1、Linux 32位" echo "2、Linux 64位" echo "3、Windows 32位" echo "4、Windows 64位" echo "5、Mac OS 32位" echo "6、Mac OS 64位" echo "7、Linux ARM" read num case "$num" in [1] ) compile_client linux 386 ;; [2] ) compile_client linux amd64 ;; [3] ) compile_client windows 386 ;; [4] ) compile_client windows amd64 ;; [5] ) compile_client darwin 386 ;; [6] ) compile_client darwin amd64 ;; [7] ) compile_client linux arm ;; *) echo "选择错误,退出";; esac } echo "请输入下面数字进行选择" echo "#############################################"
echo "#作者网名:Javen"
echo "#############################################"
echo "------------------------"
echo "1、全新安装"
echo "2、安装依赖"
echo "3、安装git"
echo "4、安装go环境"
echo "5、安装ngrok"
echo "6、生成客户端"
echo "7、卸载"
echo "8、启动服务"
echo "9、查看配置文件"
echo "------------------------"
read num
case "$num" in
    [1] )
        install_yilai
        install_git
        install_go
        install_ngrok
    ;;
    [2] )
        install_yilai
    ;;
    [3] )
        install_git
    ;;
    [4] )
        install_go
    ;;
    [5] )
        install_ngrok
    ;;
    [6] )
        client
    ;;
    [7] )
        unstall_git
        uninstall_go
        uninstall_ngrok
    ;;
    [8] )

        echo "启动端口"
        read port
        /usr/local/ngrok/bin/ngrokd -domain=$DOMAIN -httpAddr=":$port"
    ;;
    [9] )
        echo "#############################################"
        echo "#作者网名:Javen"
        echo "#创建ngrok.cfg文件并添加以下内容"
        echo server_addr: '"'$DOMAIN:4443'"'
        echo "trust_host_root_certs: false"
        echo "#############################################"
        echo "#############################################"
        echo "#Window启动脚本"
        echo "ngrok -config=ngrok.cfg -subdomain=你域名的前缀 本地映射的端口号"
        echo "ngrok -config=ngrok.cfg -subdomain=javen 80"
        echo "#############################################"
        echo "#############################################"
        echo "#Linux Mac 启动脚本"
        echo "./ngrok -config=./ngrok.cfg -subdomain=你域名的前缀 本地映射的端口号"
        echo "./ngrok -config=./ngrok.cfg -subdomain=javen 80"
        echo "#Linux Mac 后台启动脚本"
        echo "setsid ./ngrok -config=./ngrok.cfg -subdomain=javen 80"
        echo "#############################################"
    ;;
    *) echo "";;
esac

4.1 给脚本执行权限

chmod +x  ngrok.sh

4.2 执行脚本

./ngrok.sh

10分钟搭建属于自己的ngork服务器,实现内网穿透

再输入1进行安装,安装完成会启动服务默认是在80端口

/usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=":80"
如下图

10分钟搭建属于自己的ngork服务器,实现内网穿透

4.3 生成客户端

10分钟搭建属于自己的ngork服务器,实现内网穿透

生成客户端的目录在

/usr/local/ngrok/bin/

10分钟搭建属于自己的ngork服务器,实现内网穿透

Mac 64位 darwin_amd64
Linux 64位 ngrok
windows 64位 windows_amd64

5、配置客户端测试

10分钟搭建属于自己的ngork服务器,实现内网穿透

使用scp下载文件到本地my_ngrok,以Mac为例

scp root@服务器IP:/usr/local/ngrok/bin/darwin_amd64/ngrok /Users/Javen/Documents/dev/java/ngrok/my_ngrok

下载完成之后并在文件夹中创建ngrok.cfg文件并添加以下内容

server_addr: "你的域名:4443"
trust_host_root_certs: false

Window启动脚本

ngrok -config=ngrok.cfg -subdomain=你域名的前缀  本地映射的端口号
ngrok -config=ngrok.cfg -subdomain=javen  80

Mac Linux启动脚本

./ngrok -config=./ngrok.cfg -subdomain=test  8080

10分钟搭建属于自己的ngork服务器,实现内网穿透

推荐阅读
Android依赖管理与私服搭建
Android版-支付宝APP支付
Android版-微信APP支付
支付宝Wap支付你了解多少?
一张二维码集成微信、支付宝支付

安利时间:
JPay是对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调

极速开发微信公众号是对微信公众平台接口的二次封装。包括开发者模式、事件回调监听、微信模板消息、微信客服消息、自定义菜单、微信支付、素材管理等

如有疑问欢迎留言

10分钟搭建属于自己的ngork服务器,实现内网穿透

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
3A网络 3A网络
4个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
4个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习