原 使用Ngrok进行内网穿透笔记
发表于:2020-03-12 21:38:04,已有1191次阅读
前置条件
ubuntu
sudo apt-get install build-essential golang mercurial git
centos
yum install build-essential golang mercurial git
获取ngrok并编译
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
sudo make release-server release-client # 编译
生成证书
export NGROK_DOMAIN="ng.zqluo.com"
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 device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
使用证书
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
编译window客户端
GOOS=windows GOARCH=amd64 make release-client
下载到本地windows机。./bin/windows-amd64
目录中的exe放入bin
目录下。
由于ngrok为golang编写,golang支持强大的跨平台交叉编译功能:
Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
ARM 平台:GOOS=linux GOARCH=arm
服务端
centos7,创建/lib/systemd/system/ngrokd.service
文件:
[Unit]
Description=ngrok
After=syslog.target network.target
[Service]
User=zqluo
Group=zqluo
PrivateTmp=true
Type=simple
Restart=always
ExecStart=/path/ngrok/bin/ngrokd -domain ng.zqluo.com -httpAddr :8008 -httpsAddr '' -tunnelAddr :4445
ExecStop=/usr/bin/killall ngrokd
[Install]
WantedBy=multi-user.target
注意:这里禁用了https模式。
使用服务端:
sudo systemctl start ngrokd # 启动ngrokd服务端
sudo systemctl enable ngrokd # 设置开机自启动ngrokd服务
ngrokd参数说明
ngrokd -h #查看参数说明
-domain string Domain where the tunnels are hosted (default "ngrok.com")
-httpAddr string Public address for HTTP connections, empty string to disable (default ":80")
-httpsAddr string Public address listening for HTTPS connections, emptry string to disable (default ":443")
-log string Write log messages to this file. 'stdout' and 'none' have special meanings (default "stdout")
-log-level string The level of messages to log. One of: DEBUG, INFO, WARNING, ERROR (default "DEBUG")
-tlsCrt string Path to a TLS certificate file
-tlsKey string Path to a TLS key file
-tunnelAddr string Public address listening for ngrok client (default ":4443")
防火墙添加端口,允许ngrok的tunnel频道端口,给客户机访问:
sudo firewall-cmd --zone=public --add-port=4445/tcp --permanent
sudo firewall-cmd --reload
windows客户端
创建ngrok.yml
:
server_addr: "ng.zqluo.com:4445"
trust_host_root_certs: false
tunnels:
tghttp:
proto:
http: 9000
subdomain: tg
bind_tls: false
hostname: tg.ng.zqluo.com:8008
host_header: tg.ng.zqluo.com
创建bat批处理startup.bat
:
@echo on
cd %cd%
ngrok -config ./ngrok.yml -log ../log/ngrok.log start tghttp
使用nginx代理ngrok并配置https
参见:使用acme.sh申请更新Let's encrypt证书支持HTTPS
只是这里的要将域名设置为泛域名:*.ng.zqluo.com,nginx代理的本机端口为8008。
heihujojo(广东中国深圳)发表于:2020-12-28 19:42:46回复
自建服务推荐:frp、nps;付费服务推荐:蜻蜓映射
ngrok我记得作者好几年没维护了
博主发表于:2020-12-29 09:54:17回复
非常感谢