参考资料:https://hub.docker.com/r/sequenceiq/ngrokd/
条件
- 一台开放了公网端口的公网服务器
采用docker安装ngrokd
docker run -d --name ngrokd \
--restart=always \
-p 4480:4480 \
-p 4444:4444 \
-p 4443:4443 \
-p 4445:4445 \
sequenceiq/ngrokd \
-httpAddr=:4480 \
-httpsAddr=:4444 \
-domain=xx.com
domain表示使用的父域名 后面在ngrok客户端配置的转发域名是该域名的子域名
docker做端口映射时,为了支持tcp转发如ssh登录,需要除了ngrok和ngrokd连接的端口、http、https端口外,还需要额外的端口
- 配置域名
修改/etc/hosts文件 增加如下配置 以便通过ssh登录内网的ngrok使用
127.0.0.1 xx.com
安装ngrok客户端
- curl -o /usr/local/bin/ngrok https://s3-eu-west-1.amazonaws.com/sequenceiq/ngrok_linux
- chmod +x /usr/local/bin/ngrok
- 增加ngrok配置
增加$HOME/.ngrok 该文件格式为yaml格式
server_addr: xx.com:4443
trust_host_root_certs: false
tunnels:
ssh:
proto:
tcp: 22
remote_port: 4445
sample1:
proto:
http: 8080
remote_port: 4480
sample2:
proto:
http: 192.168.xx.xx:8080
remote_port: 4480
说明:
http配置配置端口时,表示是本机的应用
- 配置ngrok客户端的域名
修改/etc/hosts文件 增加xx.cm和sample1.xx.com、sample2.xx.com 域名配置.i.d
xx.xx.xx.xx(ngrokd服务端的公网ip) xx.cm sample1.xx.com sample2.xx.com
- 启动ngro客户端
setsid ngrok -log=./ngrok.log start ssh sample1 sample2
说明: setsid 表示ngrok可以在后端运行(& 不起作用)
启动成功后 会看到ngrok和ngrokd连接的信息 以及ping和pong消息
其它主机访问内网
- 在访问的主机上配置域名
修改/etc/hosts文件 增加
xx.xx.xx.xx(ngrokd服务端的公网ip) xx.cm sample1.xx.com sample2.xx.com
- 访问内网服务
http://sample1.xx.com:4480
http://sample2.xx.com:4480 - 通过ssh登录内网
远程连接到ngrokd公网服务器
ssh xx.com -p4445 即可