一个懒癌患者的自言自语



ubuntu下ngrok搭建实现内网穿透

前提条件

1.一台公网服务器

2.需要穿透的内网设备

3.将自己的域名解析到服务器

 

服务端搭建

首先安装go环境

apt-get -y install build-essential mercurial git

然后从git获取ngrok源码并进入目录

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

cd ngrok

生成并替换源码里默认的证书

NGROK_DOMAIN="you.com" //记得换成自己的域名

openssl genrsa -out base.key 2048 openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

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

然后编译

sudo make release-server release-client

没任何问题的话会在ngrok/bin下生成 ngrok、ngrokd 两个文件

启动服务端

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="you.com" -httpAddr=":8081" -httpsAddr=":8082"

httpAddr 和 httpsAddr 分别为http https的监听端口

 

域名解析

1.将you.com 解析到服务器,记录类型为A,记录值填写服务器ip

2.将*.you.com 解析到服务器,记录类型为CNAME,记录值为you.com

 

客户端搭建

需要根据客户端使用的系统重新编译客户端执行文件,比如如果客户端使用的是安卓手机,执行如下命令

sudo GOOS=linux GOARCH=arm make release-client

然后就会在ngrok/bin下多出个linux_arm文件夹,里面的文件就是客户端的执行文件

如果使用的是mac,编译命令如下

sudo GOOS=darwin GOARCH=amd64 make release-client

相应的目录为Linux_amd64,同理,别的操作系统也只需设置相对应的环境变量重新编译就会生成相应的客户端程序

将生成好的客户端文件下载到客户端,并且编写配置文件,内容如下

server_addr: "you.com:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "test"
    proto:
      http: "80"
      
  https:
    subdomain: "test"
    proto:
      https: "443"
 
  ssh:
    remote_port: 22
    proto:
      tcp: "22"

并保存,假如配置文件的文件名为ngrok.cfg

然后在终端执行命令

./ngrok -config ngrok.cfg -log=stdout start http https ssh,看下如下界面就证明成功了

About ME

about me

kevin

一个在it道路上蹒跚学步的人

心有多大,舞台就有多大,一直奔跑在自己的路上!

Contact ME