前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >群晖NAS配置之自有服务器frp实现内网穿透

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

原创
作者头像
星哥玩云
发布于 2023-11-28 10:18:02
发布于 2023-11-28 10:18:02
3.6K00
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

什么是frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCPUDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透

为什么使用 frp ?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  1. 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议
  2. 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
  3. 代理组间的负载均衡
  4. 端口复用,多个服务通过同一个服务端端口暴露。
  5. 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
  6. 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  7. 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
  8. 服务端和客户端 UI 页面。

开源地址: https://github.com/fatedier/frp

安装frp

下载frp

  1. 前往 frp GitHub发布页面,找到最新版本。例如,假设最新版本是 v0.52.3
  2. 下载适用于CentOS 7架构的frp服务器二进制文件。例如,对于64位架构,你可以使用:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/
cd /data/
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz

解压下载的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar zxvf frp_0.52.3_linux_amd64.tar.gz 
mv frp_0.52.3_linux_amd64 frp
# ll
total 29996
-rwxr-xr-x 1 1001 127 13905920 Oct 24 10:56 frpc
-rw-r--r-- 1 1001 127      142 Oct 24 10:57 frpc.toml
-rwxr-xr-x 1 1001 127 16789504 Oct 24 10:56 frps
-rw-r--r-- 1 1001 127       16 Oct 24 10:57 frps.toml
-rw-r--r-- 1 1001 127    11358 Oct 24 10:57 LICENSE

配置frp服务器

添加frp服务器的配置。以下是一个示例:

有关如何编写配置文件,请参考: https://gofrp.org/zh-cn/docs/examples/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi frps.toml
bindPort = 7000
vhostHTTPPort = 80
# auth.token = "abcdef" #安全验证不能有数字

使用以下命令启动服务器:./frps -c ./frps.toml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frps -c ./frps.toml
2023/11/28 13:34:03 [I] [root.go:102] frps uses config file: ./frps.toml
2023/11/28 13:34:03 [I] [service.go:200] frps tcp listen on 0.0.0.0:7000
2023/11/28 13:34:03 [I] [root.go:111] frps started successfully

防火墙配置

如果启用了防火墙,请打开必要的端口(默认是7000):

HTTP 请求的监听端口为 80

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
sudo firewall-cmd --reload
或者
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
service iptables save
systemctl restart iptables.service
​
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --match multiport --dports 6000:7000 -j ACCEPT #批量开放6000-7000的端口。
service iptables save
systemctl restart iptables
​
service iptables save
systemctl restart iptables

设置systemd服务(可选但建议)

创建一个frp的systemd服务文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/systemd/system/frps.service

添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Unit]
Description=frp服务器
After=network.target
​
[Service]
Type=simple
ExecStart=/data/frp/frps -c /data/frp/frps.toml
Restart=on-failure
​
[Install]
WantedBy=multi-user.target

启用并启动frp服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable frps
systemctl start frps

验证服务是否启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl restart frps
# netstat -tunpl|grep 7000
tcp6       0      0 :::7000                 :::*                    LISTEN      19949/frps   

群晖nas客户端配置frp

下载frp客户端

用ssh连接登录群晖,

下载适用于群晖架构的frp客户端

前往 frp GitHub发布页面,找到适用于群晖的版本。确保下载与群晖架构相匹配的frp客户端。

下载frp客户端。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /root
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz 
mv frp_0.52.3_linux_amd64 frp
cd /root/frp
ls
frpc  frpc.toml  frps  frps.toml  LICENSE

配置frp客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi frpc.toml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[common]
serverAddr = "127.0.0.1"
serverPort = 7000

[[proxies]]
name = "stars-nas-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

将 serverAddr 替换为frp服务器的IP地址

确保 token 与frp服务器上配置的token匹配。

根据需要配置其他端口转发规则,上述示例是将本地的SSH服务(本地端口22)映射到远程端口6000。

运行frp客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /root/frp/frpc -c /root/frp/frpc.toml
2023/11/28 13:58:38 [I] [root.go:139] start frpc service for config file [/root/frp/frpc.toml]
2023/11/28 13:58:38 [I] [service.go:299] [c22cfeca075e01e1] login to server success, get run id [c22cfeca075e01e1]

如果需要后台运行,可以使用类似 nohup ./frpc -c frpc.ini & 这样的命令。

nohup /root/frp/frpc -c /root/frp/frpc.toml >/dev/null 2>&1 &

测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh -o Port=6000 user@{frp服务器ip}
Synology strongly advises you not to run commands as the root user, who has
the highest privileges on the system. Doing so may cause major damages
to the system. Please note that if you choose to proceed, all consequences are
at your own risk.
user@star-nas:~$ 

至此可以远程登录ssh

域名解析

开放web和ssh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /root/frp/frpc.toml
serverAddr = "xx.xx.xx.xx"
serverPort = 7000

[[proxies]]
name = "stars-nas-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 60920
remotePort = 6000

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["nasweb.frp.xgss.net"]

[[proxies]]
name = "web2"
type = "http"
localPort = 5000
customDomains = ["nas.frp.xgss.net"]

检查

内网穿透成功。

如果你 vhostHTTPPort = 8080 则这里访问的域名需要加端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nasweb.frp.xgss.net:8080
nas.frp.xgss.net:80

windows客户端

下载Windows客户端

前往 frp GitHub发布页面,找到最新版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_windows_amd64.zip

下载解压到桌面位置

编辑frpc.toml配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6002

编写start.bat,并运行

用记事本编辑,再用管理员身份运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@echo off
cd /d C:\Users\Administrator\Desktop\frp
frpc.exe -c frpc.toml

测试远程登录。

配置校验

通过执行 frpc verify -c ./frpc.toml 或 frps verify -c ./frps.toml 可以对配置文件中的参数进行预先校验。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frps verify -c ./frps.toml 
frpc: the configuration file ./frpc.toml syntax is ok

如果出现此结果,则说明新的配置文件没有错误,否则会输出具体的错误信息。

配置拆分

通过 includes 参数可以在主配置中包含其他配置文件,从而实现将代理配置拆分到多个文件中管理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
includes = ["./confd/*.toml"]
# ./confd/test.toml
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

上述配置在 frpc.toml 中通过 includes 额外包含了 ./confd 目录下所有的 toml 文件的代理配置内容,效果等价于将这两个文件合并成一个文件。

需要注意的是 includes 指定的文件中只能包含代理配置,通用参数的配置只能放在主配置文件中。

安全认证Token

Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。

配置示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# frps.toml
bindPort = 7000
auth.token = "abc"

# frpc.toml
auth.token = "abc"

总结

ngrok和frp的各有优缺点

ngrok 的优点:

简单易用:ngrok拥有非常简洁的用户界面和易于使用的命令行工具,使得内网穿透变得非常容易。

快速搭建:你不需要拥有自己的服务器,只需下载ngrok客户端即可开始使用。

跨平台支持:ngrok支持多种操作系统,包括WindowsLinux和macOS等。

具备安全特性:ngrok提供了基本的身份验证和TLS加密传输等安全特性。

ngrok 的缺点:

限制版和付费版:ngrok提供了免费版,但其功能有限,如并发连接数和隧道数量的限制。付费版则提供更多高级功能。

不开源:ngrok的源代码并未公开,因此在安全性方面用户难以进行审查。

frp优点:

开源免费:frp是开源软件,可以免费使用,且有活跃的社区支持。 配置灵活:frp提供了灵活的配置选项,允许用户进行端口映射、TCP/UDP转发等。 自托管:你可以轻松地在自己的服务器上自行搭建和管理frp服务。 支持多种代理类型:包括TCP、HTTP和UDP等多种类型的代理。

frp缺点:

配置相对复杂:对于新手来说,frp的配置可能相对复杂,需要一定的学习和理解。 需要自行搭建服务器:使用frp需要自己拥有服务器,并进行相应的部署和维护。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
node-koa 框架 项目搭建 🏗
---- 这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」 代码[链接🔗]:(https://gitee.com/yang-yiming1234/koa/tree/master) 持续更新~ 简介 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了
用户4793865
2023/01/12
3.6K0
Vue + Node.js 从 0 到 1 实现自动化部署工具
最近写了一个自动化部署的 npm 包 zuo-deploy[1],只需点击一个按钮,就可以执行服务器部署脚本,完成功能更新迭代。客户端使用 Vue + ElementUI,服务 koa + socket + koa-session 等。基础功能代码 300 行不到,已开源在 github。zuoxiaobai/zuo-deploy 欢迎 Star、Fork。这里介绍下具体实现细节、思路。
@超人
2022/04/14
1.8K0
Vue + Node.js 从 0 到 1 实现自动化部署工具
知新 | koa框架入门到熟练第二章
[wp_editor_md_211ccaf408f127f491c28c16e945e4cd.jpg]
mySoul
2020/07/17
6720
【nodejs】手写简易版 koa 及常用中间件
首先我们要实现 koa 的 use 和 listen 方法,我们这样使用 MyKoa。
一尾流莺
2022/12/10
7900
【nodejs】手写简易版 koa 及常用中间件
koa-route 源码阅读
周末阅读完了 koa 的源码,其中的关键在于 koa-compose 对中间件的处理,核心代码只有二十多行,但实现了如下的洋葱模型,赋予了中间件强大的能力,网上有许多相关的文章,强烈建议大家阅读一下。
IMWeb前端团队
2019/12/03
4810
koa-route 源码阅读
Nodejs+koa.js实现服务端内容(超级详细
最近在使用vue3和typesript写一个后台系统的demo。对于一些登录及内容数据不想单纯的使用假数据模拟,所以从零搭建一个nodejs的后端内容
KID.
2023/10/08
8521
Koa入门(二)搭建 Koa 程序
安装 mkdir koa-demo && cd koa-demo && npm init -y && npm i koa --save && code .
测不准
2021/04/10
8350
Node进阶——之事无巨细手写Koa源码
对比发现,相对原生,Koa多了两个实例上的use、listen方法,和use回调中的ctx、next两个参数。这四个不同,几乎就是Koa的全部了,也是这四个不同让Koa如此强大。
ConardLi
2020/05/25
5000
Node进阶——之事无巨细手写Koa源码
前端面试-实现一个简版koa
在koa官网有说明在ctx挂载了一系列request和response的属性别名。
Careteen
2022/02/14
5080
KoaJS
koa致力于成为一个更小、更富有表现力、更健壮的、更轻量的web开发框架。因为它所有功能都通过插件实现,这种插拔式的架构设计模式,很符合unix哲学。
程序猿川子
2022/07/14
3750
读 koa2 源码后的一些思考与实践
优点这个东西,我直接说它多好,你可能又不开心,但是我们可以对比哦!这里我只说它对比原生的 Node.js开启 http 服务 带来了哪些优点!
coder_koala
2019/12/11
9540
读 koa2 源码后的一些思考与实践
node服务端渲染(完整demo)
项目源码 git clone https://gitee.com/wjj0720/nod...
random_wang
2019/09/11
2.2K0
node.js基础入门
node.js是一个基于Google V8引擎的、跨平台的JavaScript运行环境,不是一个语言
黄啊码
2022/06/20
8100
知新 | koa框架入门到熟练第一章
是由Express原班人马打造,致力于成为一个更小的,更加富有表现力的,web框架。
mySoul
2020/07/15
1K0
Node.js 搭建一个 API 接口服务(实战)
因为最近打算自己搭建一个自己的博客系统,用来记录日常的学习和提升一下写作水平,所以能就打算自己搭建一下前后端项目。在网上找了下,也没有找到合适(现成)的项目,所以就打算自己动手来搭建一下。这篇文章主要描述如何搭建一个node的API接口服务。
五月君
2021/01/27
9.1K0
Node.js 搭建一个 API 接口服务(实战)
Koa入门(三)Koa 路由
在 Koa 应用中,通常会使用 koa-router 模块,提供对路由的支持。那为什么需要路由呢?做前后端分离开发的朋友都遇到过,对接接口的时候后台都会提供一个地址,请求这个地址,传相应参数就能实现相应地数据处理。你可以把这个接口理解为路由的地址。
测不准
2021/04/14
1.4K0
Vue+koa2开发一款全栈小程序(4.Koa入门)
1.Koa是什么? 基于nodejs平台的下一代web开发框架 1.Express原班人马打造,更精简 2.Async+await处理异步 3.洋葱圈型的中间件机制 新建一个koa项目 1.打开cmd
玩蛇的胖纸
2018/10/10
9740
实现简单的 Koa
koa 为了能够简化 API,引入上下文 context,将原始请求对象 req 和 响应对象 res 封装并挂载到 context 上,并且在 context 上设置 getter 和 setter,从而简化操作
Cellinlab
2023/05/17
2940
实现简单的 Koa
koa实践及其手撸
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。
一粒小麦
2019/07/18
1.2K0
koa实践及其手撸
基于koa定制属于自己的企业级框架
笔者前公司用的是think.js作为后端框架,初次使用,深感业务场景的傻瓜式。它就是一个基于koa二次开发。一个显著的特点就是可以在对应文件夹下直接书写接口。比如api /aaa/对应 aaa文件夹下的index。/bbb/aaa/user对应bbb文件夹下的 aaa.js下等 user方法等。
一粒小麦
2019/07/18
2.3K0
基于koa定制属于自己的企业级框架
相关推荐
node-koa 框架 项目搭建 🏗
更多 >
LV.1
某大厂前端开发工程师
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验