欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ngrok实战踩坑

程序员文章站 2022-06-11 19:04:55
...

使用ngrok的场景:内网服务发布到外网,服务的内网穿透。
具体如何操作的网上很多文章,这里就不赘述。
可以参考:
一分钟实现内网穿透(ngrok服务器搭建)
自搭Ngrok实现树莓派内网穿透

整个流程

  1. 编译ngrok。会拿到的服务端和客户端。
  2. 将服务器端部署到一台拥有外网固定IP地址的服务器。域名映射到这台服务器。
  3. 将客户端部署到内网发布服务的服务器,启动,将客户端启动注册到ngrok的服务端。
  4. 其他。
    a、内网如果直接访问,则配置内网的DNS解析到内网服务器。
    b、如果不同的服务器使用了不同的端口,但需要直接输入域名访问的情况,可以在内网部署的服务器上再加一个nginx,监控80端口,转发到指定的服务端口。
    c、ngrok没有自带服务发现,所以服务端要是重启了,所有链接的客户端都要重新链接一次。

有坑的地方

编译安装的文件是哪些

首先找到安装的目录,我的是/usr/local/src/ngrok/
那么编译完的可执行文件就在/usr/local/src/ngrok/bin

证书在:
/usr/local/src/ngrok/assets/server/tls
/usr/local/src/ngrok/assets/client/tls
可执行文件+证书,拷贝到一起,就是一套完成的客户端和服务端了。

后台运行

ngrok 用 & 不能后台运行
这就要使用screen这个命令
首先安装screen
apt-get install screen
之后运行
screen -S 任意名字(例如:keepngork)
然后运行ngrok启动命令
最后按快捷键
ctrl+A+D
既可以保持ngrok后台运行
http://wdxtub.com/2016/04/16/thin-csapp-1/

ngrok客户端无法注册到服务端

服务端可以查看到客户端的链接日志,但是auth提示有问题,是因为在编译的时候带了认证则客户端机器,客户端执行文件同级目录,把生成的几个认证文件拷贝过去即可。

  • ngrok
  • ngrok.cfg(客户端配置)
  • ngrokroot.crt
  • snakeoilca.crtt

域名关系处理

ngrok的服务端,启动带的域名如果为

SCREEN -S keepngrok
./ngrokd -domain=domain.com.cn

域名映射到外网固定IP的配置就为:

@.domain.com.cn

就是说只要没有特别说明,所有可能的domain.com.cn都访问这台服务器。

那么,客户端的访问地址就:abc.domain.com.c
某客户端的配置:

server_addr: "domain.com.cn:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "abc"
    proto:
      http: "9003"