前言
之前寫過ngrok內(nèi)網(wǎng)穿透,當(dāng)時是正常沒問題的。但是最近由于更換了域名。于是重新編譯了一次服務(wù)端程序,但是無法正常運行。記錄下異常過程。
問題
ngrok 內(nèi)網(wǎng)穿透,更好域名后異常。
異常日志
New connection from 115.194.14.96:64688
[01:45:31 UTC 2019/04/06] [DEBG] (ngrok/log.(*PrefixLogger).Debug:79) [tun:6f958746] Waiting to read message
[01:45:31 UTC 2019/04/06] [WARN] (ngrok/log.(*PrefixLogger).Warn:87) [tun:6f958746] Failed to read message: read tcp 172.17.0.4:4443->115.194.14.96:64688: read: connection reset by peer
[01:45:31 UTC 2019/04/06] [DEBG] (ngrok/log.(*PrefixLogger).Debug:79) [tun:6f958746] Closing
依次檢查了如下幾個地方:
- 檢查域名映射有沒有問題(nslookup)
nslookup 你的域名
發(fā)現(xiàn)正常。
- 檢查那三個端口有沒有在服務(wù)器上打開(telnet )
telnet 服務(wù)端ip地址 端口
發(fā)現(xiàn)正常
- 檢查證書是否正常
openssl req -noout -text -in device.csr
發(fā)現(xiàn)正常
- 檢查防火墻是否開啟
firewall-cmd --state
以上檢查之后,問題依舊無法解決。
搜索了下答案,其他人也遇到過類似,未能提供解決方法。
https://github.com/hteen/docker-ngrok/issues/8
https://github.com/inconshreveable/ngrok/issues/480
于是只好更換新的方案。
新的方案
構(gòu)建鏡像
git clone https://github.com/hteen/docker-ngrok.git
cd docker-ngrok
sed -i '1cFROM golang:1.8.3' Dockerfile
sed -i '4cRUN apt-get install git make openssl' Dockerfile
docker build -t hteen/ngrok .
運行鏡像
docker run -idt --name ngrok-server -p 4443:4443 -p 4445:4445 -v /data/ngrok:/myfiles -e DOMAIN='你的域名' hteen/ngrok /bin/sh /server.sh
這里如果你需要80和 443 記得增加端口。我ngrok只用來轉(zhuǎn)發(fā)端口。因此只映射了4445
運行服務(wù)端
客戶端在目錄 /data/ngrok下??截?本地運行即可。
./ngrok -config=config.yml start tcp12345
配置文件內(nèi)容,主要替換其中域名
server_addr: "ngrok.xxxxxxx.com:4443"
trust_host_root_certs: false
tunnels:
tcp12345:
remote_port: 4445
proto:
tcp: 12345

image.png