centos+ngrok实现内网穿透(快速实现)

自己动手,丰衣足食!网上的很多教程都有不少坑,做一个优化的流程记录

准备工作

阿里云上的centos服务器,ssh连接(xshell),ftp连接(filezilla),以及解析到服务器的域名(这里以xyz.com为例)

step1:基本环境配置

安装gcc

yum install gcc -y

安装git

yum install git -y

安装go环境

yum install  golang

step2:编译ngrok源码

获得git源码

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

生成证书(xyz.com替换成你自己的域名!!!

export NGROK_DOMAIN="xyz.com"

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

替换证书(逐行输入!!!每行都要按y进行确认

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

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

编译源码生成服务端(放在服务器上)

GOOS=linux GOARCH=amd64 make release-server

编译源码生成客户端(使用ftp软件下载到windows上,生成目录为~/ngrok/bin/windows_amd64/)

GOOS=windows GOARCH=amd64 make release-client

step3:服务端开启服务

开启ngrok服务(注意xyz.com替换为自己的域名!!!
记得在服务器安全组开启相应的入网端口

  • -httpAddr :http端口(通过外网IP或域名加上这个端口进行http访问内网)
  • -httpsAddr :https端口
  • -tunnelAddr :客户端和服务端建立的隧道端口,这里配置为8083
cd ngrok
sudo ./bin/ngrokd -domain="xyz.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083" &

step4:客户端开启服务

在之前下载到window上的ngrok.exe文件旁边新建一个文本文档,输入配置程序,保存后重命名为ngrok.cfg

配置程序为:(注意xyz.com替换为自己的域名!!!

  • 如果需要映射更多端口也可以添加程序,远程映射端口如22222和33899可以自己更改
  • 记得在服务器安全组开启相应的入网端口
  • 记得关闭服务器上占用相关端口的应用,否则无法访问
server_addr: "xyz.com:8083"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "www"
    proto:
      http: "80"
      
  https:
    subdomain: "www"
    proto:
      https: "443"
 
  ssh:
    remote_port: 22222
    proto:
      tcp: "22"

  mstsc:
    remote_port: 33899  
    proto:
     tcp: "3389"

创建可执行脚本:
在之前下载到window上的ngrok.exe文件旁边新建一个文本文档,输入脚本程序,保存后重命名为ngrok.bat

脚本程序为(如果上面的端口配置程序里配置了更多的端口,记得添加

ngrok.exe -config=ngrok.cfg start http https ssh mstsc

双击ngrok.bat即可启动

启动成功画面:
centos+ngrok实现内网穿透(快速实现)_第1张图片

step5:ngrok开机自启动

在ngrok程序目录(/root/ngrok)下新建启动脚本start.sh(.sh即linux中的shell脚本程序)

vi start.sh

输入启动脚本(注意xyz.com替换为自己的域名!!!

  • nohup用于不挂断运行命令
  • & 符号用于后台运行
nohup  /root/ngrok/bin/ngrokd -domain="xyz.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083" &

给 start.sh 文件权限

chmod 755 /root/ngrok/start.sh

在/etc/rc.d/init.d目录下新建启动文件

sudo vi /etc/rc.d/init.d/ngrok

输入自启动服务文件

  • ngrok_path即为启动脚本的路径
#!/bin/sh
#chkconfig:2345 70 30
#description:ngrok

### 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.sh
		;;
	*)
	exit 1
	;;
esac

给ngrok自启动服务文件运行权限

chmod 755 /etc/rc.d/init.d/ngrok

注册ngrok服务自启动

cd /etc/rc.d/init.d
chkconfig --add  ngrok

开启服务

service ngrok start

查看自启动的服务状态

chkconfig 

如果如下图所示,2345选项都是on,则开启服务成功
centos+ngrok实现内网穿透(快速实现)_第2张图片重启系统

reboot

查看服务当前状态

systemctl status ngrok

服务状态是activating
centos+ngrok实现内网穿透(快速实现)_第3张图片

Q&A:出现的问题

  1. service ngrok start时遇到的错误:env: ‘/etc/init.d/ngrok’: No such file or directory,可是目录下明明有ngrok文件存在?
[root@iZ6m61chmsnr61Z init.d] service ngrok start
env: ‘/etc/init.d/ngrok’: No such file or directory

Answer:
这是因为在windows下保存或者建立的脚本文件,windows中换行符为/r/n,而linux中是/n ,所以会出现错误

使用dos2unix工具进行文件格式转换即可

yum install dos2unix

dos2unix /etc/init.d/ngrok
  1. /etc/init.d/ngrok 等同于/etc/rc.d/init.d/ngrok,相当于/etc下的init.d目录只是快捷方式,在ftp工具里面查看即显而易见

你可能感兴趣的:(centos+ngrok实现内网穿透(快速实现))