首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >群晖NAS配置之自有服务器ngrok实现内网穿透

群晖NAS配置之自有服务器ngrok实现内网穿透

原创
作者头像
星哥玩云
发布于 2023-11-28 10:10:07
发布于 2023-11-28 10:10:07
4.2K0
举报
文章被收录于专栏:开源部署开源部署

前言-内网穿透

内网穿透是指通过一种技术让外部网络可以访问到内网的NAS设备,这样即使在不同网络环境下,也能够远程访问和管理NAS设备。以下是一些常见的内网穿透方案:

Synology官方提供的QuickConnect:

Synology官方提供了QuickConnect服务,可以通过Synology账号远程访问NAS设备。用户可以在NAS控制面板中设置和管理QuickConnect服务,使其在不同网络环境下访问NAS变得更加简单。

Synology的DDNS服务:

Synology NAS支持使用DDNS(动态域名解析)服务,可以为NAS设备设置一个动态域名,使用户可以通过域名访问NAS,而不必担心动态IP地址变化带来的问题。

VPN(虚拟专用网络):

通过在路由器上设置VPN服务器,或者使用NAS自身的VPN服务,可以建立安全的远程连接,让用户远程访问内网资源,包括NAS设备。

端口转发/端口映射:

路由器上设置端口转发(或称端口映射),将指定端口的流量转发到NAS设备上,这样用户就可以通过特定端口来访问NAS。但要确保端口转发时考虑到安全性,避免暴露不必要的服务或端口。

第三方内网穿透服务:

使用类似于ngrok、frp等第三方工具或服务进行内网穿透,这些服务可以帮助用户将内网设备暴露到公网上,但需要注意安全性和隐私保护。

这篇文章就来介绍自有服务器ngrok实现内网穿透

前提条件

1.需要有个域名,如果是国内服务器,还需要备案

2.需要有个服务器 推荐使用某云99元/年 访问:http://d.xgss.net/2

3.系统是centos7

域名解析

选择二级域名域名 ngrok.xgss.net 三级域名使用泛解析 *.ngrok.xgss.net,为了后面指定域名比如 nas.ngrok.xgss.net就不用再解析了

代码语言:javascript
AI代码解释
复制
ngrok.xgss.net      A解析到    云服务器公网IP
*.ngrok.xgss.net    A解析到    云服务器公网IP

安装Ngrok服务端

通过远程ssh连接服务器。

下载常用依赖库

代码语言:javascript
AI代码解释
复制
yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++

安装go和git

代码语言:javascript
AI代码解释
复制
# yum -y install git go

要注意git版本必须大于1.7.9,go版本必须大于1.4,否则可能有意想不到的错误

代码语言:javascript
AI代码解释
复制
查看版本
# git --version
git version 1.8.3.1
# go version
go version go1.13 linux/amd64

开始安装ngrok

个人习惯安装到 /data/ 目录下 如果你想安装到其他目录 则进入你想安装的目录

1.下载源码

代码语言:javascript
AI代码解释
复制
mkdir /data/
cd /data/
# git clone https://github.com/inconshreveable/ngrok.git ngrok

2.生成证书

代码语言:javascript
AI代码解释
复制
cd /data/ngrok
#生成并替换源码里默认的证书,注意域名要修改为你自己的,这里是一个虚拟的测试域名
NGROK_DOMAIN="ngrok.xgss.net"
#测试一下有没有设置成功
echo $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 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

之后会在 ngrok 目录下生成 root,device 等六个文件。 然后需要拷贝到配置的目录中,在编译的时候会使用这些文件。

3.替换证书

代码语言:javascript
AI代码解释
复制
//一行一行执行,然后会提示是否覆盖,输入 “y” 回车就可以了
​
# cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
cp: overwrite ‘assets/client/tls/ngrokroot.crt’? y
​
# cp -rf device.crt assets/server/tls/snakeoil.crt
cp: overwrite ‘assets/server/tls/snakeoil.crt’? y
​
# cp -rf device.key assets/server/tls/snakeoil.key
cp: overwrite ‘assets/server/tls/snakeoil.key’? y

到这个地方,证书生成已经复制的准备工作已经完成了。

4.生成服务端

代码语言:javascript
AI代码解释
复制
make release-server

这样就会在bin目录下生成ngrokd 这个文件,就是我们ngrok的服务器程序

5.编译客户端ngrok

可以根据不同系统的命令如下:

代码语言:javascript
AI代码解释
复制
32位linux客户端: GOOS=linux GOARCH=386 make release-client
64位linux客户端: GOOS=linux GOARCH=amd64 make release-client
32位windows客户端: GOOS=windows GOARCH=386 make release-client
64位windows客户端: GOOS=windows GOARCH=amd64 make release-client
32位mac平台客户端:GOOS=darwin GOARCH=386 make release-client
64位mac平台客户端:GOOS=darwin GOARCH=amd64 make release-client
ARM平台linux客户端: GOOS=linux GOARCH=arm make release-client

我这里是64位linux和64位windows客户端,mac系统编译

代码语言:javascript
AI代码解释
复制
GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
GOOS=darwin GOARCH=amd64 make release-client

依次执行这3个命令之后就会在bin目录里面生成所有的客户端文件,客户端平台是文件夹的名字,客户端放在对应的目录下,当前Linux平台客户端就直接在bin目录下一个ngrok的程序

6.配置启动服务器

  • httpAddr 是访问普通的http使用的端口号,用后面用 子域名.ngrok.xgss.net 来访问服务
  • httpsAddr 是访问的https使用的端口号,同上,只不过是需要https的服务访问才用这个端口(一般用不上)
  • tunnelAddr 是ngrok通道的端口号,这个端口是Ngrok用来通信的,所以这个端口在服务器上和客户端上设置必须要对应才可以正常的链接,默认端口是4443

完整命令:

代码语言:javascript
AI代码解释
复制
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

我使用的

代码语言:javascript
AI代码解释
复制
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
nohup /data/ngrok/bin/ngrokd -domain="ngrok.xgss.net" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" &
不输出 nohup.out
nohup /data/ngrok/bin/ngrokd -domain="ngrok.xgss.net" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" >/dev/null 2>&1 &

7.服务端配置自启动

代码语言:javascript
AI代码解释
复制
chmod +x /etc/rc.d/rc.local
echo 'nohup /data/ngrok/bin/ngrokd -domain="ngrok.xgss.net" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" >/dev/null 2>&1 &' >> /etc/rc.d/rc.local
​
​
# 是否正常
# netstat -tunpl|grep ngrok
tcp6       0      0 :::80                   :::*                    LISTEN      21387/ngrokd        
tcp6       0      0 :::4443                 :::*                    LISTEN      21387/ngrokd        
tcp6       0      0 :::443                  :::*                    LISTEN      21387/ngrokd   
​
# curl http://ngrok.xgss.net
Tunnel ngrok.xgss.net not found
正常

监控ngork服务,如果服务异常关闭了则自动启动

代码语言:javascript
AI代码解释
复制
​
vi /root/jiankong.sh
编写以下:
#!/bin/bash
process_pid=`ps -aux|grep -v 'grep'|grep -c 'ngrok'`
#echo "$process_pid"
#关键字的个数,可以使用 grep -c
​
if [ $process_pid -eq 0 ]
    then
    pkill ngrok
    nohup /data/ngrok/bin/ngrokd -domain=ngrok.7477.com -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443 >/dev/null 2>&1 &
    now=`date  +%Y-%m-%d[%H:%M:%S]`
    echo "at $now start ngrok" >> /data/restart_ngrok.log
fi
​
​

定时执行

代码语言:javascript
AI代码解释
复制
# chmod +x /root/jiankong.sh
# echo '*/5 * * * * root /root/jiankong.sh' >> /etc/crontab
# systemctl restart crond

测试

代码语言:javascript
AI代码解释
复制
# cat /data/restart_ngrok.log
# pkill ngrok
# /root/jiankong.sh
# # cat /data/restart_ngrok.log
at 2023-11-27[15:16:57] start ngrok

到此ngrok安装完成。

下载ngrok客户端文件

下载客户端

代码语言:javascript
AI代码解释
复制
ls /data/ngrok/bin
darwin_386  darwin_amd64  go-bindata  linux_386  linux_arm  ngrok  ngrokd  windows_386  windows_amd64

其中 /data/ngrok/bin/ngrok 是linux的客户端
其中 windows_amd64 是windows的客户端
# cd /data/ngrok/bin
# tar -zcvf ngork-client.tar.gz ngrok darwin_amd64/ windows_amd64/
ngrok
darwin_amd64/
darwin_amd64/ngrok
windows_amd64/
windows_amd64/ngrok.exe
把 ngork-client.tar.gz 文件下载配置。

Linux客户端配置

下载ngrok服务器文件 /data/ngrok/bin/ngrok 到 在192.168.1.4 /root/ngrok目录上群晖NAS上操作:

群晖使用ngork映射ssh端口

需求: 群晖上配置 ngork的 22端口映射

代码语言:javascript
AI代码解释
复制
root@star-nas:~# mkdir  /root/ngrok
root@star-nas:~# vi /root/ngrok/start_ngrok.sh

# cat start_ngrok.sh 
#!/bin/bash
pkill ngrok
#ngrok-web协议
/root/ngrok/ngrok -subdomain=nas -config="/root/ngrok/ngrok.cfg" 5000 >/dev/null 2>&1 &

root@star-nas:~/ngrok# cat /root/ngrok/ngrok.cfg
server_addr: "ngrok.xgss.net:4443"
trust_host_root_certs: false
root@star-nas:~/ngrok# chmod +x /root/ngrok/start_ngrok.sh

群晖使用ngork映射web端口

需求: 群晖上配置 ngork的 80端口映射到公网

新建配置文件:

代码语言:javascript
AI代码解释
复制
mkdir /data/ngrok
vi /data/ngrok/ngrok_8000.cfg
填写一下内容

server_addr: "ngrok.xgss.net:4443"
trust_host_root_certs: false

vi /data/ngrok/ngrok_8082.cfg
填写一下内容
server_addr: "ngrok.xgss.net:4443"
trust_host_root_certs: false
将在服务器中生成的ngrok文件上传目录中/data/ngrok/
chmod +x /data/ngrok/ngrok
nohup /data/ngrok/ngrok -log=/data/ngrok/ngrok_8000.log -subdomain=seafiles -config="/data/ngrok/ngrok_8000.cfg" 8000 &
nohup /data/ngrok/ngrok -log=/data/ngrok/ngrok_8082.log -subdomain=down -config="/data/ngrok/ngrok_8082.cfg" 8082 &
netstat -tunpl |grep ngrok
tcp        0      0 127.0.0.1:4040          0.0.0.0:*               LISTEN      20609/ngrok

日志: -log=/data/ngrok/ngrok_8000.log 是记录ngrok的日志,如果前期调试的时候加上这个参数,如果不能访问就可以查看到底是什么问题 子域名: -subdomain=seafiles 是定义访问的时候的子域名,现在访问 seafiles.ngrok.xgss.net 就可以访问到这一台机器上8000端口的服务

代码语言:javascript
AI代码解释
复制
ngrok
Tunnel Status online
Version 1.7/1.7
Forwarding https://test.ngrok.xgss.net -> 127.0.0.1:80
Forwarding http://test.ngrok.xgss.net -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
Conn 0
Avg Conn Time 0.00ms

到这里不出意外的话就会启动成功了,访问test.ngrok.xgss.net的时候就是你本地的ip了.你可以通过apache或nginx配置test.ngrok.xgss.net域名指定你的目录开始使用。

windows客户端配置

在D盘新建一个目录 ngrok,如图有四个文件功能分别是

add.bat是将start.bat添加到开机启动项,ngrok.cfg是端口的配置,ngrok.exe是服务端下载的文件,start.bat启动ngrok

add.bat内容

代码语言:javascript
AI代码解释
复制
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v lin /t REG_SZ /d D:\ngrok\start.bat /f

ngrok.cfg的内容

代码语言:javascript
AI代码解释
复制
server_addr: "ngrok.xgss.net:4443"
trust_host_root_certs: false

tunnels:
    mstsc:
        remote_port: 3378
        proto:
         tcp: "127.0.0.1:3389"

start.bat的内容

代码语言:javascript
AI代码解释
复制
D:
cd D:\ngrok
ngrok -config=ngrok.cfg start mstsc

双击start.bat

测试用手机4G网络远程连接本机

地址: ngrok.xgss.net:3378

可以远程连接即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开源内网穿透工具ngrok详解实战,无公网IP直接用和有公网服务器自己搭建2种方式的详细教程
我们常常会遇到需要将本地服务暴露到公网上使用的需求。比如在进行微信公众号、小程序开发,或者处理第三方支付接口回调等功能时,往往需要配置 webhook,而本地开发环境通常处于内网,外部网络无法直接访问。简单来说,就是让外边的人能访问到你本地的计算机,比如你电脑上有个网站,外边的人直接是访问不到的,这时候就需要用内网穿透软件。
网络前线
2025/08/28
1.2K0
内网穿透神器大盘点!frp、WireGuard让你的服务器随时在线
家里的测试环境、办公室的开发机器,还有那台放在机房角落吃灰但关键时刻要用的备用服务器,怎么让你能随时能访问到?内网穿透!
悠悠12138
2025/09/29
1.6K0
内网穿透神器大盘点!frp、WireGuard让你的服务器随时在线
云服务器搭建自己的ngrok服务-实现内网穿透
优点:限制少,可玩性高,安全性高,完全可以删除花生壳、向日葵、TeamViewer等软件了。
星哥玩云
2022/05/27
9.2K0
云服务器搭建自己的ngrok服务-实现内网穿透
简单搭建ngrok服务器,实现内网穿透
在做Web开发时,我们需要将一个本地的Web网站暴露给外网访问(比如我在做本地开发微信时)。
java思维导图
2018/07/26
4.1K0
NGROK内⽹穿透实现本地微信公众号开发
NGROK介绍 Ngrok 是一个反向代理,通过在公告网络和本地端口之间建立一个安全的通道。 实现条件必须有一台外网IP的服务器。 安装环境 安装go语言 go语言版本必须是1.1的版本,可以去https://studygolang.com/dl 下载,下载tar.gz之后解压 wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz # 下载go语言 tar -zxvf go1.11.linux-amd64.tar.gz #解压tar包 mv
用户2475223
2019/12/17
1.2K0
ngrok+nginx实现内网穿透
写在前面: 前天在qq群里看到有人在讨论替代花生壳的工具,说到了ngrok,说是可以实现花生壳一样的内网穿透,个人认为主要有以下几个用处: 可以在公司测试服务器上搭建一个服务,实现测试站点的本地访问
lestat
2018/04/17
5.1K0
ngrok+nginx实现内网穿透
丢弃花生壳,搭建自己的ngrok作为内网穿透服务器
公司没有公网,公司在二级路由下面(就是服务商没有给独立IP,也无法动态获取公网IP),然而公司在开发程序的时候,如对接微信等需要返回数据,或者需要别人能访问我们网址,一般我们就只能购买花生壳内网穿透,但是在使用中发现速度慢,经常掉。所以搭建自己的ngrok服务器来保证内网穿透。
幻影网络
2022/11/08
1.8K0
丢弃花生壳,搭建自己的ngrok作为内网穿透服务器
教你自己服务器搭建Ngrok
官网:https://ngrok.com/ Github:https://github.com/inconshreveable/ngrok
Lcry
2022/11/29
4K0
教你自己服务器搭建Ngrok
Linux 搭建 ngrok 反向代理 顶
1. 为什么要使用ngrok? ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。 作为一个Web开发者,我们有时候会需要临时地将一个本地的Web网站部署到外网,以供他人体验评价或协助调试等等,通常我们会这么做: 找到一台运行于外网的Web服务器 服务器上有网站所需要的环境,否则自行搭建 将网站部署到服务器上 调试结束后,再将网站从服务器上删除 只不过是想向朋友展示一下网站而已,要不要
用户2836074
2018/08/15
1.6K0
Docker部署Ngrok实现树莓派内网穿透
首先,需要在你的域名提供商处增加两条A记录解析到你的服务器,比如我的是 ngrok.fkomm.cn 和 *.ngrok.fkomm.cn 。这样你可以使用 subdomain 的方式,来实现穿透。
緣來
2020/01/02
2.6K0
Docker部署Ngrok实现树莓派内网穿透
自建 ngrok 内网穿透服务
ngrok 和 内网穿透 是什么,有啥用处,以及为什么自建服务,这里我就不再多说了,相信点进来的人也不需要我解释这些。 准备工作 有公网 IP 的 VPS 一台 可以配置域名解析的域名一个。 系统:C
一份执着✘
2018/06/04
9K1
搭建属于自己的ngrok服务
开发过程中,很多时候处于公司内网,而有些时候需要外部能够访问到本地部署的服务,那么我们需要一个中转,其中ngrok就是这样一个比较优秀的服务。 源码编译 证书生成 cd ngrok openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxxx.org" -days 5000 -out rootCA.pem openssl genrsa -out device.ke
快乐咸鱼每一天
2019/06/20
2.1K0
「玩转树莓派」搭建属于自己内网穿透服务
好吧,我承认这个跟树莓派没有半毛关系,但是为了以后众多内网应用可以被访问,还是想强行发生一波关系。
小柒2012
2019/12/09
1.2K0
「玩转树莓派」搭建属于自己内网穿透服务
Angrok 一个内网穿透服务
网上的搭建的教程挺多,尝试搭建的时候遇到了很多问题。 准备 # 升级yum yum update # 安装gcc yum install gcc 1、GO环境安装 ## 使用1.4版本,不要使用高版本。 mkdir /root/goproj cd /root/goproj wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz ## 解压 ###配置go 环境变量 vi /etc/profile export GOROOT
冷冷
2018/02/08
8790
ubuntu搭建内网穿透服务Ngrok
说些闲话: 最近一直在乱折腾,看看C,看看Python,又打算去看一下PHP,然后又是前端的Vue.Js,最后发现——嗯?我都在干些什么? 当然不论是在做什么,看什么,基本上还是在学习,这个状态还是比较满意的。值得一提的是,当我发现bash的好用之处后,毫不犹豫的就把我的开发环境迁移到了还算是比较熟悉的Linux发行版本——Ubuntu上。然后就开始了在Ubuntu上的折腾之旅。 因为是用虚拟机搭建的Ubuntu,所以绝大多数情况下,开着VM使用虚拟机的感觉和真机体验差别并不大,虽然有考虑收购一台二手笔记
李郑
2018/03/01
6.9K0
ubuntu搭建内网穿透服务Ngrok
Ngrok内网穿透简单上手
这两天想跟异地的妹子一起玩《泰拉瑞亚》。直接用steam的联机非常卡,而自己的电脑又没有公网IP,于是最简单朴素的想法就是搞一个内网穿透,将自己本地的IP映射到一个公网IP上。
mythsman
2022/11/14
2.7K0
Ngrok内网穿透简单上手
10分钟搭建属于自己的ngork服务器,实现内网穿透Window启动脚本Mac Linux启动脚本
ngrok 是一个使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
Javen
2018/08/21
3.7K0
10分钟搭建属于自己的ngork服务器,实现内网穿透Window启动脚本Mac Linux启动脚本
ngrok+nginx 实现内网穿透 共用80端口
穿透后,你的机器指定端口就直接暴露在外网上,3389,vnc,web服务等等任何服务都可以支持。微信开发需要回调web服务器接口,如果开发机器在内网,就无法调试。
凯哥Java
2019/06/28
2.9K0
群晖NAS配置之自有服务器frp实现内网穿透
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透
星哥玩云
2023/11/28
4.2K0
群晖NAS配置之自有服务器frp实现内网穿透
群晖NAS配置之ZeroTier实现内网穿透
内网穿透是指通过一种技术让外部网络可以访问到内网的NAS设备,这样即使在不同网络环境下,也能够远程访问和管理NAS设备。以下是一些常见的内网穿透方案:
星哥玩云
2023/11/25
7.5K0
群晖NAS配置之ZeroTier实现内网穿透
推荐阅读
相关推荐
开源内网穿透工具ngrok详解实战,无公网IP直接用和有公网服务器自己搭建2种方式的详细教程
更多 >
交个朋友
加入腾讯云官网粉丝站
双11活动抢先看 更有社群专属礼券掉落
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档