目录

安装ngrok内网穿透测试

ngrok内网穿透

这有一个链接可以参考,不过已经失效–ngrok安装教程

  • 首先参考怎么安装go环境,上一篇已经讲到了,这里就不提了
  • 接着下载ngrok.zip并解压到/usr/local/ngrok目录下

    生成证书

    1. #进入ngrok目录
    2. cd ngrok
    3. #创建一个cert目录用来保存证书
    4. mkdir cert
    5. cd cert
    6. #定义我们要映射的域名
    7. export NGROK_DOMAIN="abc.com"
    8. openssl genrsa -out rootCA.key 2048
    9. openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
    10. openssl genrsa -out device.key 2048
    11. openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
    12. openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

    将证书放到/usr/local/ngrok/assets中

  1. cp rootCA.pem ../assets/client/tls/ngrokroot.crt
  2. cp device.crt ../assets/server/tls/snakeoil.crt
  3. cp device.key ../assets/server/tls/snakeoil.key

生成服务端的文件

在ngrok目录中执行

  1. <!--linux服务端/客户端-->
  2. GOOS=linux GOARCH=386 make release-server (32位)
  3. GOOS=linux GOARCH=amd64 make release-server(64位)
  4. GOOS=linux GOARCH=386 make release-client (32位)
  5. GOOS=linux GOARCH=amd64 make release-client(64位)
  6. <!--Mac OS服务端/客户端-->
  7. GOOS=darwin GOARCH=386 make release-server
  8. GOOS=darwin GOARCH=amd64 make release-server
  9. GOOS=darwin GOARCH=386 make release-client
  10. GOOS=darwin GOARCH=amd64 make release-client
  11. <!--windows服务端/客户端-->
  12. GOOS=windows GOARCH=386 make release-server
  13. GOOS=windows GOARCH=amd64 make release-server
  14. GOOS=windows GOARCH=386 make release-client
  15. GOOS=windows GOARCH=amd64 make release-client

所有程序都将生成在bin目录中,不同平台将建立不同的子目录

  1. (当我生成linux 64位程序时,会直接保存在bin目录下无子目录。所以我个人推测,如果生成是当前系统的程序,则无子目录,直接存放于bin目录下。各位若有条件可验证下)
  2. 对应的目录名字如下:
  3. linux
  4. bin/linux_386
  5. bin/linux_amd64
  6. mac os
  7. bin/darwin_386
  8. bin/darwin_amd64
  9. windows
  10. bin/windows_386
  11. bin/windows_amd64

目录中,ngrok是客户端,ngrokd是服务端

服务端启动

/usr/local/ngrok/bin/linux_386/ngrokd -domain=”$NGROK_DOMAIN” -httpAddr=”:1992” -httpsAddr=”:1993”

  1. 其它配置:
  2. -httpAddr=":80" http服务的访问端口 默认80
  3. -httpsAddr=":443" https服务的访问端口 默认443
  4. -tunnelAddr=":4443" 客户端连接服务端的端口 默认4443
  5. 以上端口,如若与系统其他服务有冲突,开启服务时请自行配置其他端口,同时记得配置防火墙

客户端配置和连接

  1. 通过sz或者ftp等方式将ngrok下载到你需要使用客户端的电脑中
  2. 新建配置文件ngrok.cfg
  3. <!--配置服务端连接地址,也就是基础域名。端口则与服务端-tunnelAddr配置相同-->
  4. server_addr: "abc.com:4443"
  5. trust_host_root_certs: false
  6. //上面不考虑1992和1993的端口,只用写ngrok的4443端口就行
  7. //也不用考虑nginx的80配置域名啥的,会自动配置
  8. 运行客户端
  9. # 客户端一般都是windows所以要下exe也就是ngrok.exe
  10. ngrok -config=ngrok.cfg -subdomain ngrok 80
  11. # 这里-subdomain是子域名,改成ttt就是ttt.ng.deni.xin
  12. #https设置了tls
  13. #bin/ngrokd -domain="www.aiesst.com" -httpAddr=":6060" -httpsAddr=":6061" -tunnelAddr=":6062" -tlsKey=./device.key -tlsCrt=./device.crt
  14. -subdomain用来指定域名的前缀(也就是映射域名的前缀),如上设置ngrok,当访问http://ngrok.abc.com时,ngrok服务端接收到请求后,便会将客户端http相应返回给访问端。80用来指定本地http服务的端口
  15. 此时,ngrok服务便搭建完成

nginx 配置80端口代替1992

  1. upstream ngrok {
  2. server 127.0.0.1:1992;
  3. }
  4. server {
  5. listen 80;
  6. server_name ng.deni.xin;
  7. location / {
  8. proxy_pass http://ngrok.ng.deni.xin:1992;
  9. }
  10. }
  11. server {
  12. listen 80;
  13. server_name *.ng.deni.xin;
  14. location / {
  15. # if ($host ~* (.*)\.ng.deni.xin){
  16. # set $nghead $1;#获取当前域名前缀
  17. # }
  18. # proxy_pass http://$nghead.ng.deni.xin:1992;
  19. # proxy_set_header Test $nghead;
  20. proxy_set_header Host $host:1992;
  21. proxy_set_header X-Real-IP $remote_addr;
  22. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  23. proxy_pass http://ngrok;
  24. }
  25. }