CentOS 搭建ngrok服务器(外网映射内网)

左心房为你撑大大i 提交于 2019-12-10 16:49:23

CentOS 7 搭建ngrok服务器(外网映射内网)

准备 
一台云服务器(本文ECS),一个域名(二级域名也可以),并且域名正确解析到云服务器

安装环境 
安装gcc和git(下载ngrok源码)

yum install gcc -y 
yum install git -y

安装go语言环境 
去官网https://golang.org/dl/下载最新安装包 
网很慢的下载地址:https://pan.baidu.com/s/1c2i2oaG(官网1.9.2版本) 
解压缩

tar -c /usr/local/ -zxvf go1.9.2.linux-amd64.tar.gz

添加到环境变量

vi /etc/profile 
export GOROOT=/usr/local/go 
export PATH=PATH:PATH:GOROOT/bin 
source /etc/profile

查看是否安装成功(查看版本号)

go version 
go version go1.9.2 linux/amd64

搭建Ngrok服务 
下载ngrok源码

cd /usr/local/ngrok 
git clone https://github.com/tutumcloud/ngrok.git ngrok

生成证书

cd ngrok 
NGROK_DOMAIN=”你的域名”

openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

将新生成的证书,替换掉assets/client/tls下的证书

cp base.pem assets/client/tls/ngrokroot.crt

编译生成ngrokd和ngrok

make release-server release-client

正常执行后,ngrok/bin 目录下应该有 ngrok、ngrokd 两个可执行文件。

启动服务端

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="你的域名" -httpAddr=":7009" -httpsAddr=":7008"

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定),如果你配置了 iptables 规则,需要放行这三个端口上的 TCP 协议。 
现在,通过 https://你的域名:7009和 https://你的域名:7008就可以访问到 ngrok 提供的转发服务

出现下面提示则说明成功

[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:7009
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:7008
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[22:07:18 CST 2017/12/07] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

5. 编译生成ngrok(windows客户端)

GOOS=windows GOARCH=amd64 make release-client

成功会在bin目录下看到windows_amd64文件夹,复制到windows电脑上即可启动

get /usr/local/ngrok/ngrok/bin/windows_amd64/ngrok.exe

6. windows端运行 
创建一个文件,命名为ngrok.cfg,写入一下内容

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

在创建一个启动bat文件,命名为start.bat

ngrok -config=ngrok.cfg -subdomain 映射本地的域名 本地的端口
如ngrok -config=ngrok.cfg -subdomain sb 8081

启动start.bat文件

外网域名访问
http://映射本地的域名:7009
映射到本地的地址是
127.0.0.1:本地的端口
原文:https://blog.csdn.net/yucdsn/article/details/78746745 
 

基于Centos6.10搭建ngrok服务器

一、操作系统描述
服务器:Centos6.10 64位
客户端:Windows 10 64位

二、服务器环境准备
1.安装git
yum -y install git
2.安装go
如果wget下载比较慢,可以通过迅雷下载完再拷贝到服务器上
wget https://golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
tar zxvf go1.9.2.linux-amd64.tar.gz
mv go /usr/local/
ln -s /usr/local/go/bin/* /usr/bin/
修改profile配置文件
vi /etc/profile
#go lang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
环境变量生效:
source /etc/profile
检查go是否安装成功:
go version
 
出现以下信息,go安装成功
go version go1.9.2 linux/amd64
三、ngrok安装及配置
1.下载ngrok源码

cd /usr/local
git clone https://github.com/inconshreveable/ngrok.git
2.填入域名地址

cd ngrok
export NGROK_DOMAIN="xxx.com"
3.生成秘钥
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


4.替换秘钥
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf device.crt assets/server/tls/snakeoil.crt
\cp -rf device.key assets/server/tls/snakeoil.key


5.编译生成服务端
GOOS=linux GOARCH=amd64 make release-server
​生成的服务端在/usr/local/ngrok/bin/目录中

6.编译生成客户端
GOOS=windows GOARCH=amd64 make release-client
​ 生成的客户端在/usr/local/ngrok/bin/windows_amd64/目录中
将ngrok.exe拷贝到Windows上

7.启动服务
./bin/ngrokd -domain="xxx.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083" 
8083为通道端口,可以自定义

8.配置客户端
Windows上ngrok.exe同级目录创建ngrok.cfg配置文件,内容如下
server_addr: "xxx.com:8083"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "a"
    proto:
      http: "80"
      
  https:
    subdomain: "b"
    proto:
      https: "443"
      
  mstsc:
    remote_port: 3389
    proto:
      tcp: "3389"
 
  ssh:
    remote_port: 2222
    proto:
      tcp: "22"
创建启动文件start.bat,内容如下:

ngrok -config=ngrok.cfg start http https mstsc ssh
运行start.bat,出现如下状态,则内网穿透成功。

总结:
1.如果碰到bat无法启动,检查ngrok.cfg文件,不能有tab。
2.start.bat启动后 offline,检查服务器防火墙状态,是否放通端口

--------------------- 
原文:https://blog.csdn.net/teisite/article/details/84103657 

 

10分钟教你搭建自己的ngrok服务器

1、必要条件

(1)服务器,用来搭建ngrok的服务器,必须有公网ip,并且可以正常访问(本次测试使用的是Ubuntu 16.04 64位)。 
(2)域名,用来生成访问域名。

2、安装git 和Golang

apt-get install build-essential golang mercurial git
1
Golang,Go语言支持,因为Ngrok是基于Go语言编写的

3、下载源码,当然也可以不安装git,但是需要手动上传代码到需要的位置。

此处使用非官方地址,修复了部分包无法获取(摘自网络)

git clone https://github.com/tutumcloud/ngrok.git ngrok

下载下来的目录结构 

4、生成自签名证书 
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。

证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址xxx.ngrok.com为例,其NGROK_BASE_DOMAIN就是“ngrok.com”,如果你要提供服务的地址为“example.ngrok.xxx.com”,那NGROK_BASE_DOMAIN就应该 是“ngrok.xxx.com”。本次测试,由于没有多余的域名,我替换成自己的二级域名“weixin.yangjiace.xyz”

cd ngrok
NGROK_DOMAIN="weixin.yangjiace.xyz"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

执行完成后需要替换证书

cp base.pem assets/client/tls/ngrokroot.crt

5、编译

make release-server release-client

 

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序了。

 

6、启动服务端

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"
httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。由于微信限制不能出现端口号,因此这个使用了80、443端口。

7、编译客户端

(1)windows
GOOS=windows GOARCH=amd64 make release-client  


(2)mac
GOOS=darwin GOARCH=amd64 make release-client
执行对应的命令会在bin目录下生成相对应的windows、mac目录,ngrok.exe就存放在对应目录下。将对应的ngrok.exe下载到本地。

8、设置本地客户端

(1)在同级目录下新建一个配置文件ngrok.cfg
server_addr: "weixin.yangjiace.xyz:4443"  
trust_host_root_certs: false  
(2)同级目录下新建一个启动脚本startup.bat
@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080


其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀。8080为端口号。
(3)启动,点击启动脚本startup.bat完成启动。 
 

9、设置为系统程序,并后台运行。

服务器在运行ngrok时,如果关闭会话窗口,会导致服务中断,很显然这不是我们想要的结果,我们需要服务不断的在后台运行,当需要的时候在停止。

在/etc/systemd/system/目录下创建服务ngrok.service,内容为

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/myweb/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"

[Install]
WantedBy=multi-user.target

其中要根据自己的实际目录修改相对应的目录。

这样我们就可以了通过systemctl start ngrok.service启动服务。然后就可以愉快的玩耍了。

 

最新完美教程 使用centos 7 自己搭建 ngrok 实现内网穿透

一、环境安装

安装git 
如果出现 yum 的程序找不到,或者很慢 
请移步这个教程yum 找不到程序, yum更换国内阿里源

# 安装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++  

# 下载新版本git (版本列表 https://www.kernel.org/pub/software/scm/git/)  
cd /usr/local  
wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz  

# 解压  
tar zxvf git-2.16.2.tar.gz  

# 编译git  
cd git-2.16.2  
./configure --prefix=/usr/local/git  
make  
make install  

#删除刚才下载的git包
cd /usr/local
rm git-2.16.2.tar.gz -y

安装go

# 下载go 
cd /usr/local
www.golangtc.com/static/go   (这里是列表,注意自己的系统是多少位的,linux-amd64是64位的。linux-386是32位的)
wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz  
如果很慢,可以下载到本地,在上传到服务器

# 解压  
tar -zxvf go1.9.2.linux-amd64.tar.gz /usr/local/  

# go的命令需要做软连接到/usr/bin  
ln -s /usr/local/go/bin/* /usr/bin/ 

#删除下载的go包
rm go1.9.2.linux-amd64.tar.gz -y

go环境设置

#安装go语言的安装环境
yum install mercurial bzr subversion -y
#新建go目录作为项目目录
mkdir -p $HOME/go
#用cat的方法在尾部增加配置配置golang的 GOROOT GOPATH
#(注意,这里GOROOT 后面的路径是你go解压的路径,如果不是按照我的方法解压的,请注意看一下)
下面这段,整段复制粘贴过去
cat >>$HOME/.bash_profile<<EOF
export GOROOT=/usr/local/go    
export GOPATH=\$HOME/go
export PATH=\$PATH:\$GOROOT/bin
EOF
#让配置生效
source $HOME/.bash_profile

3.检查下go的env环境变量
go env

输出:
有一段输出就行了,比如这样的
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"

二、ngrok配置

下载ngrok

cd /usr/local/  
git clone https://github.com/inconshreveable/ngrok.git

环境变量

export GOPATH=/usr/local/ngrok/  
export NGROK_DOMAIN="xxx.com"   #这里写你自己的域名,不要前缀,比如www

估计这里你会有疑问,看到别人家都是 ngrok.xxx.com 类似这种形式的 
这里就是用到了三级域名解析,如果你想要以 xxx.ngrok.xxx.com 这种最终域名形式访问你的服务,(这里第一次搭建不推荐,你可以二级成功以后再用三级的,但是得从环境变量这步往下重新操作一边。)请看下面教程:

生成证书

cd /usr/local/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 

拷贝证书覆盖ngrok原来的证书

过程会让你输入y 回车
cp rootCA.pem assets/client/tls/ngrokroot.crt 
cp server.crt assets/server/tls/snakeoil.crt 
cp server.key assets/server/tls/snakeoil.key

生成服务端

cd /usr/local/ngrok/  
GOOS=linux GOARCH=amd64 make release-server  #这里GOOS后面是你的系统,我是linux,GOARCH 后面是系统,64位是amd64,32位是386
然后就是等待下载了,没有进度条,耐心等待。
这里可能报各种错,我当时就很崩溃。
生成的服务端在/usr/local/ngrok/bin   下的  ngrokd文件

错误:无法交叉编译 cannot install cross-compiled binaries

$ make release-server GOOS=linux GOARCH=386  
bin/go-bindata -nomemcopy -pkg=assets -tags=release \  
        -debug=false \  
        -o=src/ngrok/client/assets/assets_release.go \  
        assets/client/...  
bin/go-bindata -nomemcopy -pkg=assets -tags=release \  
        -debug=false \  
        -o=src/ngrok/server/assets/assets_release.go \  
        assets/server/...  
go get -tags 'release' -d -v ngrok/...  
go install -tags 'release' ngrok/main/ngrokd  
go install: cannot install cross-compiled binaries when GOBIN is set  
make: *** [server] Error 1

解决方法

cd /usr/local/ngrok
mkdir bin  
cp $GOBIN/go-bindata bin/  
unset GOBIN

生成客户端

cd /usr/local/ngrok/  
GOOS=windows GOARCH=amd64 make release-client  #这里GOOS后面是你的系统,我是要在window上启动客户端,GOARCH 后面是系统,64位是amd64,32位是386
然后就是等待下载了,没有进度条,耐心等待。
生成的在/usr/local/ngrok/bin/windows_amd64  的ngrok.exe  
都在bin下,服务端是ngrokd   客户端是ngrok

启动服务器端

这里为了方便我直接就用80端口了,请确认你的80端口没有被占用,关闭相应的服务。
后面要想用,建议使用nginx反向代理到ngrok。

cd /usr/local/ngrok/bin
ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"

#-domain后面你上面写的域名  -httpAddr http端口  -httpsAddr https 端口 
#-tunnerlAddr 客户端端口,连接端口

启动客户端(window) 
现将ngrok.exe 下载到自己的电脑上, 
然后同目录下创建文件ngrok.conf;内容如下:

server_addr: "xxxx.com:4443"   #你上面自己写的域名
trust_host_root_certs: false  

#目录下打开命令行
ngrok -config=./ngrok.conf -subdomain=blog 80 
#这里subdomain后面的是二级域名前缀,你可以改,
#注意要在域名解析里添加二级域名解析

添加二级域名解析 

如下就是OK了 显示online就可以! 

最后通过blog.xxx.com 访问你本地的服务器吧

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!