CentOS7部署ngrok内网穿透服务

准备一台公网服务器,一个域名,给域名添加两条A记录,ngrok和dev.ngrok ,都解析到公网服务器IP。

什么是ngrok?

一个反向代理,用于创建从公共端点到本地运行的Web服务的安全隧道,可以是TCP或者HTTP。

环境 服务端 47.94.128.X (阿里云华北地区ESC实例弹性公网地址)
客户端 203.0.113.106 (内网地址)

服务端配置

[root@aliyun-bj01 ~]# yum groupinstall -y development tool
[root@aliyun-bj01 ~]# yum install -y perl-ExtUtils-MakeMaker mercurial
[root@aliyun-bj01 ~]# yum install -y golang #安装编译需要的工具包
[root@aliyun-bj01 ~]# cd /opt
[root@aliyun-bj01 opt]# git clone https://github.com/inconshreveable/ngrok.git #下载ngrok源码

生成自签名证书

[root@aliyun-bj01 opt]# cd ngrok
[root@aliyun-bj01 ngrok]# export NGROK_DOMAIN="ngrok.ponfey.com"
[root@aliyun-bj01 ngrok]# openssl genrsa -out ngrok.ponfey.com.key 2048
[root@aliyun-bj01 ngrok]# openssl req -new -x509 -nodes -key ngrok.ponfey.com.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out ngrok.ponfey.com.pem
[root@aliyun-bj01 ngrok]# openssl genrsa -out ngrok.ponfey.com.server.key 2048
[root@aliyun-bj01 ngrok]# openssl req -new -key ngrok.ponfey.com.server.key -subj "/CN=$NGROK_DOMAIN" -out ngrok.ponfey.com.server.csr
[root@aliyun-bj01 ngrok]# openssl x509 -req -in ngrok.ponfey.com.server.csr -CA ngrok.ponfey.com.pem -CAkey ngrok.ponfey.com.key -CAcreateserial -out ngrok.ponfey.com.server.crt -days 5000

将生成的秘钥复制到编译目录中

[root@aliyun-bj01 ngrok]# cp ngrok.ponfey.com.server.crt assets/server/tls/snakeoil.crt
[root@aliyun-bj01 ngrok]# cp ngrok.ponfey.com.server.key assets/server/tls/snakeoil.key
[root@aliyun-bj01 ngrok]# cp ngrok.ponfey.com assets/client/tls/ngrokroot.crt

编译ngrok服务器端

[root@aliyun-bj01 ngrok]# make release-server #编译的时候会从github clone依赖的库,国内的网络,可能会比较慢,稍等片刻,如果报错就多执行几次

编译不同平台的客户端

编译Linux64位版

$ make release-client

编译Mac版

$ GOOS=darwin GOARCH=amd64 make release-client

编译Windows64位版

$ GOOS=windows GOARCH=amd64 make release-client

编译Windows32位版

$ GOOS=windows GOARCH=386 make release-client

编译完成之后会生成相关的可执行文件,存放在/opt/ngrok/bin/目录下,列出了一点可执行文件的对照说明

/opt/ngrok/bin/ngrokd ngrok服务器端
/opt/ngrok/bin/ngrok Linux客户端
/opt/ngrok/bin/ngrokd ngrok服务器端
/opt/ngrok/bin/darwin_amd64/ngrok Mac客户端
/opt/ngrok/bin/windows_amd64/ngrok.exe Windows64位客户端
/opt/ngrok/bin/windows_386/ngrok.exe Windows32位客户端
## 配置系统防火墙和云ECS实例安全组(略)
[root@aliyun-bj01 ~]# firewall-cmd --zone=public --add-port=9022/tcp --permanent
[root@aliyun-bj01 ~]# firewall-cmd --zone=public --add-port=9080/tcp --permanent #ngrokd需要的端口,客户端连接的时候指定的端口,如:TCP 9022(SSHD)、9080(Web)端口
[root@aliyun-bj01 ~]# firewall-cmd --zone=public --add-port=9443/tcp --permanent

服务器端启动ngrok

[root@aliyun-bj01 ~]# /opt/ngrok/bin/ngrokd -tlsKey=/opt/ngrok/ngrok.ponfey.com.server.key -tlsCrt=/opt/ngrok/ngrok.ponfey.com.server.crt -domain=ngrok.ponfey.com -httpAddr=:9080 -tunnelAddr=:9443

客户端配置

把服务端生成的Linux客户端软件scp到本地

[zhuxiaoshuai@git ~]# mkdir /opt/ngrok
[zhuxiaoshuai@git ~]# cd /opt/ngrok
[zhuxiaoshuai@git ngrok]# scp [email protected]:/opt/ngrok/bin/ngrok 

添加配置文件

[zhuxiaoshuai@git ngrok]# vi ngrok.cfg
server_addr: ngrok.ponfey.com:9443  # 远程地址
trust_host_root_certs: false
tunnels:  # 隧道
    ssh:  # 隧道名称
        remote_port: 9022  # 绑定到远程地址的那个端口
        proto:
            tcp: 22  # 本地的TCP 22端口
    web:
        subdomain: dev  # 域名前缀,dev.ngrok.ponfey.com
        remote_port: 9080
        proto:
            http: 80  # 本地的HTTP 80端口

启动客户端

[zhuxiaoshuai@git ngrok]# ./ngrok -config=./ngrok.cfg start web  # 启动web隧道
[zhuxiaoshuai@git ngrok]# ./ngrok -config=./ngrok.cfg start-all  # 启动所有隧道

启动之后会输出下面的信息,online表示运行成功

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://dev.ngrok.ponfey.com:9080 -> 127.0.0.1:80
Forwarding                    tcp://ngrok.ponfey.com:9022 -> 127.0.0.1:22
Web Interface                 127.0.0.1:4040
#Conn                        2  # 我这已经有连接了
Avg Conn Time                 38339.43ms

为NGINX添加页面信息
请确保已经在客户端开启了ssh和web服务

[zhuxiaoshuai@git ~]#  curl http://dev.ngrok.ponfey.com:9080/
203.0.113.106
[zhuxiaoshuai@git ~]#  ssh -p9022 [email protected] #输入密码进行登录
[zhuxiaoshuai@git ~]#  ifconfig em1
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 203.0.113.106  netmask 255.255.255.0  broadcast 203.0.113.255
        ether E4:68:A3:DA:Q6:18  txqueuelen 0  (Ethernet)
        RX packets 35612  bytes 48627989 (46.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24106  bytes 1345146 (1.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
发布了64 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_46192300/article/details/104620070