使用Ngrok进行内网穿透笔记

发表于:2020-03-12 21:38:04,已有1024次阅读

前置条件

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回复 

回复heihujojo

非常感谢

您还可输入120个字