Ngrok内网穿透

如果你有一台闲置的机器在自己家里,你搭了一个服务在家里,你想让别人访问你的服务,怎么办?

微信开发需要域名,在本地调试怎么办?

内网穿透适合你!

Ngrok是一个反向代理软件,你只需拥有一台有公网IP的机器,在上面启动Ngrok服务端,然后在你本地机器开启Ngrok客户端。就可以通过公网IP访问到你家里的服务了。

使用如下:

# 官方的包真有问题,使用别人改的
git clone https://github.com/tutumcloud/ngrok.git

生成一个证书:

cd ngrok

NGROK_DOMAIN="test.domain.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

注意test.domain.com是你自己的域名!

cp base.pem assets/client/tls/ngrokroot.crt
make release-server release-client

编译成功后会在bin目录下找到ngrokd和ngrok这两个文件。其中ngrokd 就是服务端程序了。

启动服务端:

./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="test.domain.com" -httpAddr=":80" -httpsAddr=":443"

httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。

编译客户端:

# windows
GOOS=windows GOARCH=amd64 make release-client  

# mac
GOOS=darwin GOARCH=amd64 make release-client

设置本地客户端:

新建ngrok.cfg:

server_addr: "test.domain.com:4443"  
trust_host_root_certs: false  

启动:

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=bb 8080

其中,-config指向配置文件,-log存放日志文件位置,-subdomain为自定义的域名前缀。8080为端口号。

这样通过bb.test.domain.com就可以访问到内网8080的服务!!!

或者TCP:

ngrok -config=ngrok.cfg -log=ngrok.log start p1 p2


cat ngrok.cfg
 
server_addr: "test.xxxx.com:4443"
trust_host_root_certs: false
tunnels:
  p1:
    remote_port: 28975
    proto:
      tcp: "28975"
  p2:
    remote_port: 28970
    proto:
      tcp: "28970"