通过Docker搭建ngrok实现内网穿透

之前直接使用centos7搭建了ngrok,可以順利穿透內網,但是聽先進說這樣會佔用了端口,所以採用docker+ngrok的方式更加的優

可能會用到的centos輔助命令

端口命令連結

#查看80端口狀況
lsof -i tcp:80
#列出所有端口
netstat -ntlp

採用Docker + ngrok

前面的域名設置是一樣的,可以參考上一篇centos7 搭建自己的ngrok服務

由於之前的go版本問題,導致做出來的客戶端無法在linux運行(mac和windows都沒有問題),此時需要做如下修改後,再啟動容器

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 ngrok容器

docker run -idt \
--restart always \
--name ngrok-server \
-p 8880:80 \
-p 8443:443 \
-p 4443:4443 \
-v /data/ngrok:/myfiles \
-e DOMAIN='nb.coodata.cn' \
hteen/ngrok /bin/sh /server.sh

備註:記得把nb.coodata.cn改為自己的域名

第一次創建的時候直接可以運行,第二次則出現問題(exit status 1)通過以下代碼解決

pkill docker                 #终止进程
iptables -t nat -F           #清空nat表的所有链
ifconfig docker0 down        #停止docker默认网桥  
systemctl restart docker     #重启docker

添加反向代理

主要是因為80,443端口通常佔用了

搭建nginx反向代理服务器
通过docker-compose搭建

vi proxy-nginx.yml

nginx:
image: nginx:latest
container_name: proxy-nginx
restart: always
ports: 
- 80:80
volumes:
    - ~/nginx/www:/usr/share/nginx/html
    - ~/nginx/conf.d:/etc/nginx/conf.d

docker-compose -f proxy-nginx.yml up -d

创建默认配置

vi ~/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
修改配置

vi ~/nginx/conf.d/ngrok-proxy.conf

server {
listen 80;
server_name nb.coodata.cn *.nb.coodata.cn;
location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://193.112.101.53:8880;      #代理的ip+端口
  }
}
server {
listen 443;
server_name nb.coodata.cn *.nb.coodata.cn;
location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://193.112.101.53:8443;      #代理的ip+端口
}
}

下載客戶端

和之前的方法一樣,mac的是用/data/ngrok/bin/darwin_amd64/ngrok這個

添加可執行權限,並創建cfg文件
chmod +x ngrok

文獻1:Docker+Ngrok+Nginx实现内网穿透
文獻2:Docker 部署Nginx反向代理服务器
文献3:查看nginx反向代理服务器如何搭建