10分钟搭建属于自己的ngork服务器,实现内网穿透Window启动脚本Mac Linux启动脚本

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 6、FRP内网穿透工具(如果以上都不能稳定推荐使用FRP、配置比较ngrok简单、稳定)

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

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

执行脚本

再输入1进行安装,安装完成会启动服务默认是在80端口 /usr/local/ngrok/bin/ngrokd -domain=$NGROK_DOMAIN -httpAddr=":80" 如下图

安装完成并启动Ngork服务

4.3 生成客户端

编译生成客户端

生成客户端的目录在

/usr/local/ngrok/bin/

生成客户端

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

5、配置客户端测试

查看配置客户端脚本

使用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

启动客户端测试

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

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

如有疑问欢迎留言

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

.NET Migration工具

Migration是一种分布环境下的数据库同步工具,出现在Ruby on Rail框架里,MigratorDotNet是一个.NET类似于Ruby on Rai...

23190
来自专栏木子昭的博客

长时间保持ssh连接不断开的技巧

经常用ssh连接服务器的小伙伴, 可能会像我一样, 需要时不时地恢复一下断开的连接, 原因是NAT防火墙喜欢对空闲的会话进行超时处理,以确保它们状态表的干净和内...

34620
来自专栏IMWeb前端团队

浏览器中的ECMAScript模块(译)

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 原文:https://jakearchibald.com/20...

21480
来自专栏编程

说说SSH、SCP和SFTP的那些事儿

SSH、SCP和SFTP都是SSH软件包的组成部分。 SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Working G...

2.6K60
来自专栏大内老A

关于WCF的一个非常“无语”的BUG!

这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、...

20770
来自专栏草根专栏

asp.net core 2.0 查缺补漏

asp.net core 2.0 一些有用有趣的设置. 面向(targeting)不同的.net版本: 打开asp.net core 2.0的项目文件: xxx...

31250
来自专栏Java帮帮-微信公众号-技术文章全总结

POI导入导出【面试+工作】

POI导入导出【面试+工作】 1.场景一 近期项目中的excel导入导出功能需求频繁的出现,趁此机会,今天笔者对POI的Excel数据的导入导出做一...

43840
来自专栏转载gongluck的CSDN博客

程序的入口

操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置, 不同的连接器选择的入口函数也不尽相同。在VC++下,连接...

38090
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

31900
来自专栏BinarySec

Windows x64上的x86重定向

0x00 背景 搬砖过程中遇到一个很奇怪的现象。写了一个程序利用命令regedit来读取注册表的某项值,出现了一个奇怪的现象:在某些电脑上能读到值,在另一些电脑...

38580

扫码关注云+社区

领取腾讯云代金券