内网穿透步骤:
1、安装go语言环境并配置环境。
2、下载ngrok源码(可上传源码或安装git下载源码 yum install git)
3、生成证书(本地生成)
4、用新证书替换旧证书
5、编译源码
6、生成对应客户端(window,Mac)
7、启动服务端
8、客户端配置、启动
9、启动本地web项目
10、大功告成,访问公网ip或 域名
一、安装go语言环境并配置环境。
1、下载go语言环境:
wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz
2、解压:
tar -zxvf go1.8.linux-amd64.tar.gz
3、配置环境:vi /etc/profile 在profile里加上这两句话
export GOROOT= 你的go解压地址
export PATH= $PATH : $GOROOT /bin
4、查看go是否安装成功:
go version
二、下载ngrok源码(可上传源码或安装git下载源码 yum install git)
1、安装git: yum install git (手动上传源码可省略)
2、找一个合适的目录下载ngrok源码:
git clone https://github.com/inconshreveable/ngrok.git (手动上传源码可省略)
三、生成证书(本地生成)
进入下载好或解压好的ngrok目录下 依次执行命令
openssl genrsa -out base.key 2048 (无脑复制粘贴)
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=xx.xx.xx.xx" -out base.pem (xx.xx.xx.xx为ip或域名)
openssl genrsa -out server.key 2048 (无脑复制粘贴)
openssl req -new -key server.key -subj "/CN=xx.xx.xx.xx" -out server.csr (xx.xx.xx.xx为ip或域名)
echo subjectAltName = IP:xx.xx.xx.xx > extfile.cnf (xx.xx.xx.xx为ip或域名)
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -extfile extfile.cnf -days 10000 -out server.crt
四、用新证书替换旧证书
在下载好或解压好的ngrok目录下 执行覆盖替换
cp base.pem assets/client/tls/ngrokroot.crt
五、编译源码
在下载好或解压好的ngrok目录下 执行编译(有点久,几分钟)
make release-server release-client
(使用 ip 做域名时,随机生成的子域名导致地址错误 例如http://92832de0.1.1.1.1 -> localhost:80:
解决办法就是改源码,去掉随机生成 ,在下载好或解压好的ngrok目录下找到src/ngrok/server/tunel.go文件
修改源码位置:
t. url, err = tunnelRegistry. RegisterRepeat ( func ( ) string {
return fmt. Sprintf ( "%s://%x.%s" , protocol, rand. Int31 ( ) , vhost)
} , t)
删掉 【%x.】 【rand.Int31(),】 以及该文件第一行引入的 【math/rand】,重新编译出服务端与客户端即可。
)
六、6、生成对应客户端(window,Mac)
编译好源码后,生成客户端(本地电脑使用的)
在下载好或解压好的ngrok目录下 执行命令
GOOS= windows GOARCH= amd64 make release-client (windown系统)
GOOS= darwin GOARCH= amd64 make release-client (mac系统)
七、启动服务端
在下载好或解压好的ngrok目录下 执行命令启动
./bin/ngrokd -tlsKey= server.key -tlsCrt= server.crt -domain= "xx.xx.xx.xx" -httpAddr= ":80" -httpsAddr= ":443"
(xx.xx.xx.xx为ip或域名,httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,可以随意指定。ngrokd 还会开一个 4443 端口用来跟客户端通讯(可通过 -tunnelAddr=”:xxx” 指定)。)
八、客户端配置、启动
将生成好的客户端(ngrok目录下 bin/windows_amd64/ngrok.exe),下载到本地发到自己喜欢的目录下
1、在本地同级目录下创建配置文件ngrok.cof内容如下:
server_addr: "xx.xx.xx.xx:4443" (xx.xx.xx.xx为ip或域名)
trust_host_root_certs: false
2、在本地同级目录下创建启动脚本startup.bat 内容如下:
ngrok -config=ngrok.cfg -log=ngrok.log 8080 (8080为本地项目的端口可以任意改)
3、双击startup.bat 启动客户端
九、启动本地项目
自己操作,注意端口为上面的8080 可以任意改
十、访问公网ip或域名。
访问公网ip或域名就会转发到本地的8080项目上
十一、其他
服务器上ngrok后台运行
1、安装 yum install screen
2、screen -S ngrok( -S后面的名字可以随便取)
3、运行ngrok启动命令【./bin/ngrokd -tlsKey= server.key -tlsCrt= server.crt -domain= "xx.xx.xx.xx" -httpAddr= ":80" -httpsAddr= ":443" 】
4、直接关掉ssh窗口
4、关闭ps -ef| grep screen 然后用kill
参考地址
https://blog.csdn.net/yjc_1111/article/details/79353718 (10分钟教你搭建自己的ngrok服务器)
https://blog.csdn.net/u010444106/article/details/80457985 (阿里云搭建自己的ngrok服务-实现内网穿透)
后面两个很有用
https://www.jianshu.com/p/d308b92e58ea(内网穿透 ngrok 服务器搭建与坑点)
https://blog.csdn.net/min19900718/article/details/87920254(x509: cannot validate certificate for 10.30.0.163 because it doesn't contain any IP SANs)