搭建ngrok服务-实现内网穿透

1.基础环境

# 安装 gcc
yum -y install gcc
yum -y install gcc-c++

# 安装 golang , 下载地址在https://studygolang.com/dl中找的,想换版本可以在这里找
wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz
tar -zxvf go1.8.linux-amd64.tar.gz

vi /etc/profile   #文件中加上环境变量
export GOROOT=你的go解压地址(如:/root/go)
export PATH=$PATH:$GOROOT/bin
source /etc/profile   #使环境生效(或者重启:reboot)
 
 
go version   #查看go是否安装成功
 

2.下载源码

#安装git 用于下载ngrok代码
 
yum -y install git
 
#克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok
 
git clone https://github.com/inconshreveable/ngrok.git ngrok-server

3.ngrok配置

执行一下命令。使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 填写我们的域名地址

cd ngrok-server    #进入安装根目录
 
NGROK_DOMAIN="ngrok.你的域名.com"
 
openssl genrsa -out rootCA.key 2048
 
openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -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 -days 10000 -out server.crt

4.复制证书

经过以上步骤,证书已经生成,下面复制证书到默认读取目录下

#复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp rootCA.pem assets/client/tls/ngrokroot.crt

#复制server.crt到assets/server/tls/并更名为snakeoil.crt
cp server.crt assets/server/tls/snakeoil.crt

#复制server.key到assets/server/tls/并更名为snakeoil.key
cp server.key assets/server/tls/snakeoil.key

上面会让你提示是否覆盖,输入y即可。如果不想每次都提示,可以使用如下命令,这是一个骚操作。
cp前面加上一个\,然后加上-rf即可没有提示,直接覆盖。

\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf server.crt assets/server/tls/snakeoil.crt
\cp -rf server.key assets/server/tls/snakeoil.key

5.https配置

网站配置SSL证书(https),使网站可以通过https访问

我们申请的是Let's Encrypt通配符SSL证书,因为他是免费的

1.获取 Certbot 客户端
下载 Certbot 客户端 ,并且添加可执行权限

cd /usr/local/
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto certonly  -d "*.ngrok.你的域名.com" -d "ngrok.你的域名.com" --manual --preferred-challenges dns-01  --server https://acme-v02.api.letsencrypt.org/directory
img

执行到上图最后一步时,先暂时不要回车。申请通配符证书是要经过DNS认证的,接下来需要按照提示在域名后台添加对应的DNS TXT记录。等个10分钟左右

确认生效后,回车继续执行,最后会输出如下内容:

image-20201217111709001.png

出现这个就代表成功了

更换证书

cd /root/ngrok-server
cp /etc/letsencrypt/live/ngrok.你的域名.com/privkey.pem /root/ngrok-server/assets/server/tls/snakeoil.key
cp /etc/letsencrypt/live/ngrok.你的域名.com/fullchain.pem /root/ngrok-server/assets/server/tls/snakeoil.crt
cp /etc/letsencrypt/live/ngrok.你的域名.com/fullchain.pem /root/ngrok-server/assets/client/tls/ngrokroot.crt

6.生成程序

生成客户端和服务器端

#win服务端
GOOS=windows GOARCH=386 make release-server
 
#win客户端
GOOS=windows GOARCH=386 make release-client
 
#linux服务端
GOOS=linux GOARCH=386 make release-server
 
#linux客户端
GOOS=linux GOARCH=386 make release-client

我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成

#linux服务端
GOOS=linux GOARCH=386 make release-server
 
#win客户端
GOOS=windows GOARCH=386 make release-client

第一次生成需要点时间,因为golang编译需要下载一些插件。

编译后的软件在bin目录下

image-20201201141505946.png

httpAddr,httpsAddr为访问服务端端口,可以设置为80和443,访问的时候不用加端口号.

tunnelAddr为给客户端提供的连接端口默认4443可自行修改,这里改为8092

前台运行


sudo /root/ngrok-server/bin/linux_386/ngrokd -tlsKey="/root/ngrok-server/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok-server/assets/server/tls/snakeoil.crt"  -domain="ngrok.你的域名.com"  -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"
 

后台运行

使用服务模式

将以下代码保存为ngrokd.service文件,放在/etc/systemd/system/目录

注意替换路径 root/ngrok-server/bin/linux_386/ 为ngrok服务端目录

#/etc/systemd/system/ngrokd.service

[Unit]
Description=ngrok
After=network.target

 
[Service]
ExecStart=/root/ngrok-server/bin/linux_386/ngrokd  -tlsKey="/root/ngrok-server/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok-server/assets/server/tls/snakeoil.crt"  -domain="ngrok.你的域名.com"  -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"
LimitNOFILE=1048576
LimitNPROC=1048576
Restart=always
RestartSec=10
StartLimitInterval=0

[Install]
WantedBy=multi-user.target
systemctl enable ngrokd.service     #开机启动ngrokd服务
systemctl start  ngrokd.service     #启动ngrokd服务

阿里云需要配置安全组规则:

image-20201216225136308.png

7.客户端

下载bin/windows_386目录下的ngrok.exe文件


image-20201216230930207.png

本地文件


image-20201216231018914.png

http/https

ngrok.cfg

server_addr: ngrok.你的域名.com:8092
trust_host_root_certs: false

start.bat

@echo OFF
color 0b
Title Ngrok启动程序 By webwang
Mode con cols=109 lines=30
:START
ECHO.
Echo                  ==========================================================================
ECHO.
Echo                                         Ngrok启动
ECHO.
Echo                                         作者: webwang
ECHO.
Echo                  ==========================================================================
Echo.
echo.
echo.
:TUNNEL
Echo           输入需要启动的域名前缀,如“webwang” 请勿使用“www”,即分配给你的穿透域名为:“webwang.ngrok.你的域名.com”
ECHO.
ECHO.
ECHO.
set /p clientid=   请输入域名前缀:
echo.
set /p port=   请输入内网端口:
echo.
ngrok -config=ngrok.cfg  -proto=http  -subdomain=%clientid% %port%
# https使用
# ngrok -config=ngrok.cfg  -proto=https  -subdomain=%clientid% %port%

运行start.bat

tcp

start.bat

start ngrok.exe  -proto=tcp -config=tcp.cfg start vnc ssh

ngrok.cfg

server_addr: ngrok.你的域名.com:8092
trust_host_root_certs: false
tunnels:
    ssh:# 名称
        remote_port: 33333 #服务器分配tcp转发端口,不填写由服务器随机分配
        proto:
            tcp: 33333 #映射本地的端口
    vnc:# 名称
        remote_port: 33339
        proto:
            tcp: 33339

注意:tcp需要开放对应的端口

8.注意事项

1.服务器的安全组一定要配置。

2.关闭防火墙。

3.域名泛解析 *.ngrok.你的域名.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容