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

news2024/11/29 6:39:18

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

前言-内网穿透

内网穿透是指通过一种技术让外部网络可以访问到内网的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实现内网穿透

ngrok--1024x640

前提条件

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

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

3.系统是centos7

域名解析

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

ngrok.xgss.net  	A解析到    云服务器公网IP
*.ngrok.xgss.net	A解析到	云服务器公网IP

image-20231127104128762

安装Ngrok服务端

通过远程ssh连接服务器。

下载常用依赖库

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

# yum -y install git go

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

查看版本
# git --version
git version 1.8.3.1
# go version
go version go1.13 linux/amd64

开始安装ngrok

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

1.下载源码

mkdir /data/
cd /data/
# git clone https://github.com/inconshreveable/ngrok.git ngrok

2.生成证书

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.替换证书

//一行一行执行,然后会提示是否覆盖,输入 “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.生成服务端

make release-server

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

5.编译客户端ngrok

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

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系统编译

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

完整命令:

bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

我使用的

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.服务端配置自启动

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服务,如果服务异常关闭了则自动启动

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


定时执行

# chmod +x /root/jiankong.sh
# echo '*/5 * * * * root /root/jiankong.sh' >> /etc/crontab
# systemctl restart crond

测试

# 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客户端文件

下载客户端

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端口映射

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端口映射到公网

新建配置文件:

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端口的服务

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

image-20220308171141389

add.bat内容

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v lin /t REG_SZ /d D:\ngrok\start.bat /f

ngrok.cfg的内容

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的内容

D:
cd D:\ngrok
ngrok -config=ngrok.cfg start mstsc

双击start.bat

image-20220308171620506

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

地址: ngrok.xgss.net:3378

可以远程连接即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华盛顿特区警方推荐购买 AirTag防止高端夹克被窃

根据美国媒体 Fox5 报道,近期由于天气变冷,华盛顿特区已发声多起高端 Canada Goose 夹克被窃事件。这些被偷走的加拿大鹅夹克价格从几百到几千美元不等,“Canada Goose”LOGO较为明显,很容易被小偷发现。 对此,警方建…

nodejs+vue+elementui校园演出赞助艺术资源管理系统

系统主要分为系统管理员和学生、校外人员三个部分,系统管理员主要功能包括:首页、个人中心、学生管理、校外人员管理、社团信息管理、校内演出管理、校外商演管理、系统管理;基本上实现了整个基于vue的校园艺术资源管理系统的设计与实现信息管…

SpringBoot3-快速体验

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

Linux性能系统学习之监控工具

目录 前言linux性能度量标准监控工具topuptimeps/pstreefreempstatvmstat 前言 在实际产品开发过程中遇到一些莫名其妙的问题&#xff0c;比如swap交换分区随着时间增多影响到系统调用&#xff0c;或CPU占用以及内存的监测等&#xff0c;所以有必要系统了解Linux的性能问题。 …

CUDA简介——For循环并行化

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式 kernel相关语法定义为&#xff1a; kernel函数定义&#xff0c;与常规C函数定义类似。不同之处在于&#xff0c;有__global__关键字。 为说明符&#xff0c;告诉编译器该函数应编译运行在device上&a…

极客大挑战2023 Reverse wp

文章目录 [toc] shiftjmp点击就送的逆向题幸运数字flower-or-tea小黄鸭mySelfeasymath听说cpp很难&#xff1f;砍树浪漫至死不渝是男人就来扎针ezandroid shiftjmp 64bit的ELF文件&#xff0c;IDA打开 考察花指令去除、将E9 nop掉 EXP&#xff1a; enc [ 0x53, 0x58, 0x41, 0…

面向注解编程—Spring 注解看这一篇就够了(2)

面向注解编程—Spring注解大全&#xff08;AOP篇&#xff09; AOP英文全称&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白 了&#xff0c;面向切面编程就是面向特定方法编程。 AOP的作用&#xff1a;在程序…

【好书推荐】Flutter入门经典

目录 作者简介内容简介文章详解介绍《Flutter入门经典》读者对象《Flutter入门经典》内容要点《Flutter入门经典》内容结构第I部分&#xff1a;Flutter编程基础第II部分&#xff1a;充当媒介的Flutter&#xff1a;具象化一个应用第III部分&#xff1a;创建可用于生产环境的应用…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

Geodesic in Heat: 一种测地线计算方法

在之前的博客中&#xff0c;我已经介绍过了使用Fast Marching算法计算测地线。Fast Marching的好处是实现简单&#xff0c;方便扩展在点云上。但是缺点是精度不够&#xff0c;求解不平滑。早在2013年&#xff0c;Crane et al. [1]就已经提出利用热流来估算测地距离。我很早就知…

深入理解Java核心技术:Java工程师的实用干货笔记

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在Java工程师的职业生涯中&#xff0c;深入理解…

使用C语言创建高性能网络爬虫IP池

目录 一、引言 二、IP池的设计 1、需求分析 2、架构设计 3、关键技术 三、IP池的实现 1、存储实现 2、调度实现 3、通信实现 4、异常处理实现 四、代码示例 五、性能优化 六、测试与分析 七、结论 一、引言 随着互联网的快速发展&#xff0c;网络爬虫成为了获取…

日志JavaAgent-NoClassDefFoundError

一、引言 组内最近做了一个日志公共组件&#xff0c;用的是javaagent的方式&#xff0c;之前搞的maven jar包每次都要把所有系统都发一遍&#xff0c;太麻烦。 javaagent通过Java虚拟机&#xff08;JVM&#xff09;的Instrumentation API来实现代码的侵入。通过Instrumentation…

matlab diff和gradient

gradient 求解梯度。 示例 FX gradient(F) 返回向量 F 的一维数值梯度。输出 FX 对应于 ∂F/∂x&#xff0c;即 x&#xff08;水平&#xff09;方向上的差分。点之间的间距假定为 1。 使用方法&#xff1a; x -2:0.2:2; y x’; z x .* exp(-x.^2 - y.^2); [px,py] gradien…

K8S部署nginx并且使用NFS存储数据

安装NFS 在master安装NFS systemctl start nfs-server修改配置 /etc/exports /data *(rw,no_root_squash,no_all_squash,sync)目录为 /data 允许所有地址访问 验证下 [rootmaster nginx]# showmount -e 192.168.57.61 Export list for 192.168.57.61: /data *共享可以正常…

1.uniapp基础

1.uniapp基础 官方文档&#xff1a;uni-app官网 1.1开发工具 &#xff08;1&#xff09;工具&#xff1a; HBuilderX HBuilderX-高效极客技巧 1.2 新建项目 &#xff08;1&#xff09; 文件》新建项目 ​ &#xff08;2&#xff09;选择相应的配置信息&#xff0c;填写项目根路…

python超详细基础文件操作【建议收藏】

文章目录 前言1 文件操作1.1 文件打开与关闭1.1.1 打开文件1.1.2 关闭文件 1.2 访问模式及说明 2 文件读写2.1 写数据&#xff08;write&#xff09;2.2 读数据&#xff08;read&#xff09;2.3 读数据&#xff08;readlines&#xff09;2.3 读数据&#xff08;readline&#x…

数据结构 / 队列 / 循环队列 / 概念

1. 定义 为充分利用向量空间&#xff0c;克服假溢出现象的方法是&#xff1a;将向量空间想象为一个首尾相接的圆环&#xff0c;并称这种向量为循环向量。存储在其中的队列称为循环队列&#xff08;Circular Queue&#xff09;。循环队列是把顺序队列首尾相连&#xff0c;把存储…

正式发布! 加速科技ST2500A飙速赶来!

在新场景、新应用海量增长的驱动下&#xff0c;芯片测试需求也在日益多元化和快速扩展。加速科技始终致力于以客户的实际需求为导向&#xff0c;基于领先的半导体测试技术为千行百业提供全场景的测试解决方案&#xff0c;推出新一代ST2500A数模混合信号测试机。 ST2500A是基于…

(六)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…