[需求] : 家里面的内部主机, 需要访问公司内部主机[实现思路] : intranet-host-A 私网主机(家里) : intranet-host-B 提供服务 : public-host -> 内网穿透, 内部域名服务, nginx 转发将服务暴露给外网 : public-host-C | 其他公网主机, 不需要构成内网则可以访问服务[intranet-host-B 主机提供服务] : intranet-host-A -> public-host && intranet-host-B -> public-host # intranet-host-A -> [IP/域名] -> intranet-host-B # public-host-C -> public-host -> [nginx | IP/域名] -> intranet-host-B[域名服务配置] : 配置子域名, 指向 ngrok 服务端主机 : 访问流量路径 -> 子域名 (域名解析) -> ngrok:80 (连接解析) -> ssh.thinxz.cn -> intranet-host:81 (该内网主机提供服务)
ngrok
编译构建
[配置环境] : yum install update : yum install -y \ git wget curl curl-devel vim \ openssl openssl-devel zlib-devel \ perl hg cpio expat-devel \ gettext-devel perl-ExtUtils-MakeMaker \ gcc gcc-c++[配置编译环境] : rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm : yum -y install golang # 命令配置环境变量, 安装位置 : export GOPATH=/usr/local/ngrok/ && export PATH=$PATH:$GOPATH/bin[download] # ngrok 重命名 ngrok-server # 不包含依赖, 下载缓慢 : git clone https://github.com/inconshreveable/ngrok.git ngrok-server # 查看说明进行编译, 内部包含依赖, 查看README.md进行编译, pre.sh 包含证书构建, 执行前替换域名 : git clone https://github.com/thinxz-yuan/ngrokchina.git ngrok : cd ngrok[01 构建证书, 证书中包含访问域名 - 编译的客户端服务端包含证书信息, 连接需要证书支持, 运行时可通过参数执行] # ngrok域名, 修改域名 : export NGROK_DOMAIN="ngrok.thinxz.cn" # 创建ngrok证书 -> NGROK_DOMAIN openssl genrsa -out rootCA.key 2048 \ && openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000 # 复制并重命名覆盖 cp rootCA.pem assets/client/tls/ngrokroot.crt \ && cp server.crt assets/server/tls/snakeoil.crt \ && cp server.key assets/server/tls/snakeoil.key [03 构建] : release-client #linux服务端 GOOS=linux GOARCH=386 make release-server #linux客户端 GOOS=linux GOARCH=386 make release-client #win服务端 GOOS=windows GOARCH=386 make release-server #win客户端 GOOS=windows GOARCH=386 make release-client
RUN
[启动服务端] : ./ngrokd -domain="thinxz.cn" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" # 指定证书 -tlsCrt=server.crt -tlsKey=server.key[启动客户端] : ngrok.cfg # 配置文件# server_addr 服务器地址, 端口需要和服务器上面的4443端口一致server_addr: "thinxz.cn:4443"trust_host_root_certs: false # 客户端指定域名 (intranet-host (该内网主机提供服务)) : ngrok.exe -subdomain www -config=ngrok.cfg 80// https://blog.csdn.net/diyiday/article/details/84504206// https://www.jianshu.com/p/d0b00d233d09// https://blog.csdn.net/yjc_1111/article/details/79353718
启用镜像
[运行镜像] : docker pull registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v3 # mkdir -p /opt/data/ngrok : docker run \ --name ngrok \ -p 80:80 -p 443:443 -p 4443:4443 \ -v /opt/data/ngrok:/usr/local/ngrok \ -d -it registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v3 \ ./run.sh # nginx 转到宿主机 3001-3003 # 使用宿主机端口 3001 - 3003 : docker run \ --name ngrok \ -p 3001:80 -p 3002:443 -p 3003:4443 \ -v /opt/data/ngrok:/usr/local/ngrok \ -d -it registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v3 \ ./run.sh[客户端 配置]# ngrok.cfgserver_addr: "ngrok.thinxz.cn:4443"trust_host_root_certs: false# ngrok.batngrok.exe -subdomain www -config=ngrok.cfg 80[nginx] # *.ngrok.thinxz.cn 模糊匹配所有域名 # 将该域名:80 端口, 转发到宿主机 3001 端口 ngrok 转发服务 server { listen 80; server_name *.ngrok.thinxz.cn; location / { proxy_pass http://172.17.0.1:3001/; proxy_set_header Host $host; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Real-IP $remote_addr; } }
[提交镜像] : docker login --username=thinxz registry.cn-hangzhou.aliyuncs.com : docker commit -m="ngrok" -a="thinxz" cid registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v1 : docker push registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v3[启动镜像] : docker run \ --name ngrok \ -p 80:80 -p 443:443 -p 4443:4443 \ -v /opt/data/ngrok:/usr/local/ngrok \ -d -it registry.cn-hangzhou.aliyuncs.com/thinxz/ngrok:v3 \ ./run.sh[run.sh]#!/bin/sh# install and copycd /opt/ngrokchina/ && ./install-linux.sh && cd /usr/local/ngrok# run./bin/linux_386/ngrokd \-domain="ngrok.thinxz.cn" \-httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" \2>&1 | tee /usr/local/ngrok/ngrok.log# suspend mainread -p "press any key to continue." var


FRP
// https://www.jianshu.com/p/00c79df1aaf0