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
执行到上图最后一步时,先暂时不要回车。申请通配符证书是要经过DNS认证的,接下来需要按照提示在域名后台添加对应的DNS TXT记录。等个10分钟左右
确认生效后,回车继续执行,最后会输出如下内容:
出现这个就代表成功了
更换证书
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目录下
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服务
阿里云需要配置安全组规则:
7.客户端
下载bin/windows_386目录下的ngrok.exe文件
本地文件
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