CentOS下搭建Ngrok内网穿透服务
作为一个程序员,没有公网IP怎么行呢?这里就来个内网穿透工具吧。
鉴于Ngrok存在小Bug,现已补充Frp内网穿透搭建教程(个人建议使用Frp)。
1.准备
首先你需要一个服务器,我的是腾讯云主机。
进行重装系统(为了避免不必要麻烦,非必须),选择CentOS。
然后设置域名指向你的服务器IP。
我的是使用了二级域名,即
ngrok.kioye.cn和 *.ngrok.kioye.cn 都使用A记录指向139.199.210.123
。
2.开始安装
# 安装依赖
yum -y install openssl-devel wget gcc gcc-c++
# 安装git
yum install git -y
# 安装go
yum install -y mercurial bzr subversion golang
# 查看go版本
go version
# 拉取ngrok源码
git clone https://github.com/inconshreveable/ngrok.git
# 生成证书
cd ngrok
export NGROK_DOMAIN="ngrok.kioye.cn"
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
# 将新生成的证书替换掉旧的
\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
# 编译生成ngrokd服务端,运行在当前系统CentOS
GOOS=linux GOARCH=amd64 make release-server
到此,服务端已经生成完毕。可以将可执行文件
bin/ngrokd
拷贝出来。
# 服务端启动测试
./bin/ngrokd -domain="ngrok.kioye.cn" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
# 创建快捷启动脚本
vi start-ngrokd.sh
# 内容如下:
#!/bin/sh
# 注意你的路径可能和我不同!
/root/ngrok/bin/ngrokd -domain="ngrok.kioye.cn" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
# 设置文件权限
chmod 755 start-ngrokd.sh
启动没问题后,我们将其添加到自启动列表。
vi /etc/init.d/ngrok
# 内容如下:
#!/bin/sh
### BEGIN INIT INFO
# Provides: ngrok
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the ngrok Proxy.
### END INIT INFO
# 注意你的路径可能和我的不同!!
ngrok_path=/root/ngrok/
case "$1" in
start)
echo "start ngrok service.."
sh ${ngrok_path}/start-ngrokd.sh
;;
*)
exit 1
;;
esac
# ngrok脚本文件 给权限
chmod 755 /etc/init.d/ngrok
# 添加启动服务 ngrok
chkconfig --add ngrok
# 尝试启动
service ngrok start
服务端设置完成。
接下来生成客户端文件。
# 编译生成ngrok客户端,运行在k2p路由器(arm平台)
GOOS=linux GOARCH=arm make release-client
# 生成的可执行文件为:bin/linux_arm/ngrok
# 编译生成ngrok客户端,分别运行在Linux平台32和64位系统
GOOS=linux GOARCH=386 make release-client
GOOS=linux GOARCH=amd64 make release-client
# 生成的可执行文件分别为:bin/linux_386/ngrok
# bin/ngrok
# 编译生成ngrok客户端,分别为运行在Windows平台32和64位系统
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
# 生成的可执行文件分别为:bin/windows_386/ngrok.exe
# bin/windows_amd64/ngrok.exe
# 编译生成ngrok客户端,运行在MacOs平台
GOOS=darwin GOARCH=amd64 make release-client
# 生成的可执行文件为:bin/darwin_amd64/ngrok
到此,客户端可执行文件也已经生成。
以 MacOs下客户端使用为例,其他平台启动方式都是类似的,就不重复了。
# 将bin/darwin_amd64/ngrok文件拷贝到MacOs
# 然后在ngrok文件下创建ngrok.cfg配置文件
vi ngrok.cfg
# 内容如下:
server_addr: "ngrok.kioye.cn:4443"
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "80"
https:
subdomain: "www"
proto:
https: "443"
ssh:
remote_port: 2222
proto:
tcp: "22"
# 保存后,使用如下命令启动:
./ngrok -config ngrok.cfg start http https ssh
如下图,可以看到已经连接成功!
追加一下k2p路由器的设置自启动(我的是官改版本)。
首先将arm平台版文件(ngrok和ngrok.cfg)拷贝到k2p路由器/opt/ngrok/
下
然后登陆路由器 http://192.168.2.1 设置功能-高级设置-启动任务加上:
sleep 2 && cd /opt/ngrok/ && ./ngrok -config ngrok.cfg start http https ssh 2>&1 &