ngrok服务器搭建步骤

作者: 一直在前进 | 来源:发表于2016-07-07 16:08 被阅读11202次

    准备工作:

    1、准备好一台主机,带公网IP,最好上面没有其他的应用程序(对linux熟练的除外)
    
    2、准备一个一级域名,做好泛解析(二级域名的没有配置成功,汗。。。)
    

    下面是安装步骤:(安装环境:centos6.5 64bit , 阿里云主机带弹性IP)

    一、安装git

    1、安装git所需要的依赖包
    
        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++
    
    2、卸载系统自带的Git    
        
        yum remove git  
        
    3、下载git
    
        wget https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz
    
    4、解压git
    
        tar zxvf git-2.6.0.tar.gz
    
    5、编译git
    
        cd git-2.6.0
        make configure
        ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv
        make all doc
        make install install-doc install-html
        echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
        source /etc/bashrc
    
    6、创建git的软连接
    
        ln -s /usr/local/git/bin/* /usr/bin/
    

    二、安装go环境

    1、安装go get工具:
    
        yum install mercurial bzr subversion
    
    2、Centos/Linux下源码安装golang:
        
        wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz
        tar -C /usr/local -xzf go1.4.1.linux-amd64.tar.gz
        mkdir $HOME/go
        echo 'export GOROOT=/usr/local/go' >> ~/.bashrc 
        echo 'export GOPATH=$HOME/go' >> ~/.bashrc 
        echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc 
        source $HOME/.bashrc 
    
    3、go的命令需要做软连接到/usr/bin
    
        ln -s /usr/local/go/bin/* /usr/bin/ 
    

    三、编译ngrok

    cd /usr/local/
    git clone https://github.com/inconshreveable/ngrok.git
    export GOPATH=/usr/local/ngrok/
    export NGROK_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
    

    六、如果是在国内的服务器需要改,香港或者国外的服务器不需要

    vim /usr/local/ngrok/src/ngrok/log/logger.go
    log "github.com/keepeye/log4go"    
    

    七、编译服务端(根据自己系统的来)

    cd /usr/local/go/src  
    
    GOOS=linux GOARCH=386 ./make.bash(32位)
    GOOS=linux GOARCH=amd64 ./make.bash(64位)    
    
    cd /usr/local/ngrok/
    
    GOOS=linux GOARCH=386 make release-server(32 )
    GOOS=linux GOARCH=amd64 make release-server(64位)
    

    八、编译客户端:

    MAC OS 64位操作系统(32位系统把amd64改成386)
    
    cd /usr/local/go/src
    GOOS=darwin GOARCH=amd64 ./make.bash
    cd /usr/local/ngrok/
    GOOS=darwin GOARCH=amd64 make release-client
    
    Windows 64位操作系统(32位系统把amd64改成386)
    
    cd /usr/local/go/src
    GOOS=windows GOARCH=amd64 ./make.bash
    cd /usr/local/ngrok/
    GOOS=windows GOARCH=amd64 make release-client
    

    九、客户端配置文件

    server_addr: "域名:4443"
    trust_host_root_certs: false
    

    十、服务端启动

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

    十一、客户端使用

    ngrok -config=ngrok.cfg -subdomain aaa 80 (windows系统客户端)

    十二、错误分析

    1、gopkg.in/inconshreveable/go-update.v0 (download)卡住不动
    
        原因:git版本过低导致
    
        解决办法:卸载自带的git1.7.1,安装git2.2.1并将git添加到环境变量中
    

    十三、总结:

    1、严格按照上面的操作步骤,应该是完全可以搭建成功的。
    
    2、上面是用一级域名搭建成功的,有用二级域名搭建,但都失败了。失败的地方:如果做了二级域名的泛解析,那么在执行客户端时无法连接到服务器;
    
        如果只做二级域名的解析,不做泛解析,客户端可以连接到服务器,但没有域名出来,故放弃了。

    相关文章

      网友评论

      • 96115002afa8:(接上条)Tunnel Status 一直是红色的reconnecting状态。
      • 96115002afa8:小白想请教下作者,想用ngrok给黑群晖做内网穿透,应该如何操作?已经生成linux客户端并拷贝到/ngrok文件夹下,却运行不起来。
      • 刺球_25dd:感谢作者的教程,已经搭建成功,并经过自己的摸索,搞出了https版本,免费分享给有需要的使用,http://ngrok.ciqiuwl.cn 欢迎大家一起交流!
      • 29b2528b6938:楼主的第十三、总结里面说二级域名搭建失败。我用你的方法搭建成功了。
        如果做了二级域名的泛解析,那么在执行客户端时无法连接到服务器。
        如果只做二级域名的解析,不做泛解析,客户端可以连接到服务器,但没有域名出来,故放弃了。
        二级域名做两个解析,一个泛解析,一个固定解析。例如:
        *.tunnel和tunnel,只有一个不行。最终的域名就是*.tunnel.xx.xx
      • 红枣_4590:windows、Linux都可以搭建ngrok服务器。访问http://www.hongzaosoft.cn/downloadngrok.html(复制到浏览器中访问) ,就可以直接下载绿色免安装的ngrok程序,带安全证书验证,包括服务器端和客户端,启动脚本,配置文件。
      • 124f4014a474:自己生成的证书,如果用https访问的话,不需要导入吗?
      • 大布兜:第三步,编译ngrok的时候为什么GOPATH变量又赋值成ngrok的目录?
      • NIU_a2c3:==============
        # GOOS=linux GOARCH=amd64 ./make.bash
        # Building C bootstrap tool.
        cmd/dist

        # Building compilers and Go bootstrap tool for host, linux/amd64.
        lib9
        libbio
        liblink
        {standard input}: Assembler messages:
        {standard input}:2385: Warning: end of file not at end of a line; newline inserted
        {standard input}:2938: Error: open CFI at the end of file; missing .cfi_endproc directive
        gcc: Internal error: Killed (program cc1)
        Please submit a full bug report.
        See <http://bugzilla.redhat.com/bugzilla&gt; for instructions.
        go tool dist: FAILED: gcc -Wall -Wstrict-prototypes -Wextra -Wunused -Wno-sign-compare -Wno-missing-braces -Wno-parentheses -Wno-unknown-pragmas -Wno-switch -Wno-comment -Wno-missing-field-initializers -Werror -fno-common -ggdb -pipe -Wuninitialized -O2 -fmessage-length=0 -c -m64 -I /usr/local/go/include -I /usr/local/go/src/liblink -o $WORK/asm5.o /usr/local/go/src/liblink/asm5.c
        ==========
        搬瓦工上会出错,可能是因为内存太小。
      • JackedIn:感谢分享,很详细,一步步来搭建成功!但是为什么我一关闭SSH就打不开了。
      • 7718f7820ff1:路由也一样适用吧?
      • ucfjepl:您好,请问我在安装完成后,使用命令 /usr/local/src/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" 启动服务的时候,报错:
        panic: crypto/tls: private key does not match public key

        goroutine 1 [running]:
        ngrok/server.Main()
        /usr/local/src/ngrok/src/ngrok/server/main.go:126 +0x212
        main.main()
        /usr/local/src/ngrok/src/ngrok/main/ngrokd/ngrokd.go:8 +0x1b
        这是什么问题呢?
      • tanpengsccd:写的很全。特别是一些依赖 。
      • 33d31a1032df:谢谢了
      • 93f222fa507e:连接成功了,非常感谢作者!!!
        只是还有一个问题。为啥4040端口访问不了
        一直在前进:@93f222fa507e 不客气,有成功的一起分享。4040端口的访问,应该和ngrok没多大关系吧。可以看下是不是其他网络环境导致的。
      • c7565398e630:export NGROK_DOMAIN="域名" 域名可以写成ip吗,阿里的域名申请好麻烦呀,还要备案,在编译服务端的时候一直报错,
        New connection from 95.213.203.71:40635
        Found hostname "这里是ip地址" in request
        No tunnel found for hostname "这里是ip地址"
        Closing
        求解 :smile:
        一直在前进:@朱二 阿里的域名你申请一个个人的,应该不是很麻烦。个人域名备案应该还是比较快。用IP的话,没试过,估计不是很好的办法。做ngrok很多都是用来做微信80端口的转发吧,所以还是建议用域名来做,别用IP。至于编译服务端的时候报错,是不是由于是IP导致的呢?可以尝试更换方法来确认原因。不好意思,不能帮到你什么!

      本文标题:ngrok服务器搭建步骤

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