Linux搭建Ngrok实现内网穿透

前提:一台有外网IP的可提供服务的服务器(用来运行ngrok服务端)

Linux:

Golang:go1.18.10 linux/amd64

安装环境

安装gcc和git(用于下载ngrok源码)

# yum install gcc git -y

安装GO语言环境

# yum install golang

ngrok服务端,github地址: https://github.com/inconshreveable/ngrok

安装ngrok,进入自定义安装目录

# git clone https://github.com/inconshreveable/ngrok.git

# cd ngrok

配置证书信息,以生成专属的客户端(可写入shell脚本执行)

#!/bin/bash

NGROK_DOMAIN="ngrok.xxx.com"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -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 -days 10000 -out device.crt
cp /usr/local/ngrok/keys/rootCA.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
cp /usr/local/ngrok/keys/device.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
cp /usr/local/ngrok/keys/device.key /usr/local/ngrok/assets/server/tls/snakeoil.key

覆盖原本证书(一定要在编译生成客户端和服务端之前完成)

cp /usr/local/src/ngrok/certs/*.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt

cp /usr/local/src/ngrok/certs/*.pem /usr/local/ngrok/assets/server/tls/snakeoil.crt

cp /usr/local/src/ngrok/certs/*.key /usr/local/ngrok/assets/server/tls/snakeoil.key

编译生成客户端和服务端

编译生成ngrokd(服务端)

Linux服务端x86:

# GOOS=linux GOARCH=amd64 make release-server

编译生成ngrok(客户端)

Linux客户端x86:

# GOOS=linux GOARCH=386 make release-client

Linux客户端x64:

# GOOS=linux GOARCH=amd64 make release-client

MacOS客户端x86:

# GOOS=darwin GOARCH=386 make release-client

MacOS客户端x64:

# GOOS=darwin GOARCH=amd64 make release-client

windows客户端x86

# GOOS=windows GOARCH=386 make release-client

windows客户端x64

# GOOS=windows GOARCH=amd64 make release-client

编译生成的执行文件放在ngrok/bin下,ngrok为客户端,ngrokd为服务端。

ngrok-server参数说明:
-httpAddr  # http端口(通过外网IP或域名加上这个端口进行http访问内网)
-httpsAddr # 同http,只是这个是https
-tunnelAddr # 隧道端口,内网和外网建立的隧道端口,默认为4443(客户端配置连接的端口)

ngrokd启动命令:

# ./bin/ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" -tlsKey=server.key -tlsCrt=server.crt &

查看进程端口状态

# netstat -tpln | grep ngrokd

查看进程状态

# ps -ef | grep ngrokd

ngrokd关掉命令:

# kill 进程ID

云环境记得开放服务器端口

客户端设置

以mac为例,新建配置文件ngrok.yml

server_addr: "xxx.com:4443"
 trust_host_root_certs: false
 tunnels:
   http:
     hostname: "www.xxx.com"
     proto: 
       http: 80

启动ngrok客户端

# ./ngrok -config=ngrok.yml start-all

留下评论

电子邮件地址不会被公开。 必填项已用*标注