自己架設 ngrok tunnel 伺服器
2020-09-04
ngrok 是一個可以將 local port 綁定到外部擁有公開 IP 的伺服器上的工具,好讓你存取內部服務。
ngrok 1.x 聽說有 memory leak
原始碼
- 目前官方的 ngrok 版本(2.x)沒有開源
- ngrok 1.x 有開源,可以自己架
自簽 TLS 憑證
使用 openssl 建立憑證:
mkdir cert
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 1825 -nodes \
-out cert/self.crt -keyout cert/self.key
# Common Name (e.g. server FQDN or YOUR name) []: ngrok.example.com
編譯 ngrok
- 要先裝 golang
- 要把憑證放進去 client asset 再編譯
- 編譯完成後會產生
./ngrok/bin/ngrokd
和./ngrok/bin/ngrok
編譯 ngrok client 和 server:
git clone https://github.com/inconshreveable/ngrok.git
cp -fv cert/self.crt ngrok/assets/client/tls/ngrokroot.crt
( cd ngrok && make release-all )
Server 端
Server 程式為 ngrokd
:
./ngrok/bin/ngrokd \
-domain=ngrok.example.com \
-httpAddr=:30080 -httpsAddr=:30443 -tunnelAddr=:34443 \
-tlsCrt=cert/self.crt -tlsKey=cert/self.key
Client 端
Client 程式為 ngrok
,用自己架設的 server 要先建立設定檔才能跑:
echo 'server_addr: ngrok.example.com:34443 │~
trust_host_root_certs: false' > $HOME/.ngrok
./ngrok/bin/ngrok 80
如果要 debug 可以用:
./ngrok/bin/ngrok -log-level DEBUG -log client.log 80