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

什么是frp

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

frps-datu

为什么使用 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位架构,你可以使用:

mkdir -p /data/
cd /data/
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
# 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/

vi frps.toml
bindPort = 7000
vhostHTTPPort = 80
# auth.token = "abcdef" #安全验证不能有数字

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

./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

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.serviceiptables -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 iptablesservice iptables save
systemctl restart iptables

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

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

vi /etc/systemd/system/frps.service

添加以下内容:

[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服务:

systemctl enable frps
systemctl start frps

验证服务是否启动

systemctl restart frps
# netstat -tunpl|grep 7000
tcp6       0      0 :::7000                 :::*                    LISTEN      19949/frps   

群晖nas客户端配置frp

下载frp客户端

用ssh连接登录群晖,

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

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

下载frp客户端。

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客户端

vi frpc.toml
[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客户端

# /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 &

测试:

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

域名解析

image-20231128155546735

开放web和ssh

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"]

检查

image-20231128161122393

image-20231128161137610

内网穿透成功。

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

nasweb.frp.xgss.net:8080
nas.frp.xgss.net:80

windows客户端

下载Windows客户端

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

https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_windows_amd64.zip

下载解压到桌面位置

image-20231128162736001

编辑frpc.toml配置文件

serverAddr = "x.x.x.x"
serverPort = 7000[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6002

编写start.bat,并运行

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

@echo off
cd /d C:\Users\Administrator\Desktop\frp
frpc.exe -c frpc.toml

image-20231128162931360

image-20231128163008961

测试远程登录。

image-20231128162620137

配置校验

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

./frps verify -c ./frps.toml 
frpc: the configuration file ./frpc.toml syntax is ok

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

配置拆分

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

# 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 即可。

配置示例

# frps.toml
bindPort = 7000
auth.token = "abc"# frpc.toml
auth.token = "abc"

总结

ngrok和frp的各有优缺点

ngrok 的优点:

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

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

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

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

ngrok 的缺点:

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

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

frp优点:

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

frp缺点:

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git rebase冲突说明(base\remote\local概念说明)

主线日志及修改 $ git log master -p commit 31213fad6150b9899c7e6b27b245aaa69d2fdcff (master) Author: Date: Tue Nov 28 10:19:53 2023 08004diff --git a/123.txt b/123.txt index 294d779..a712711 100644 --- a/123.txtb/123.txt-1,3 1,4 123 4^Mcommit a77b518156…

C语言常见算法

算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使…

【Qt】之QSet使用

描述 QSet类是一个模板类&#xff0c;它提供基于散列表的集合。 QSet是Qt的通用容器类之一。它以未指定的顺序存储值&#xff0c;并提供非常快速的值查找。在内部,QSet是作为QHash实现的。 下面是一个带有QString值的QSet示例: QSet<QString> set;插入方式1&#xff…

【一文讲清楚 Anaconda 相关环境配置与Package管理】

文章目录 0 前言1 Package 与环境1.1 module1.2 package1.3 环境 2 Conda、Miniconda、Anaconda和Pip & PyPI2.1 Conda2. 2 Miniconda2.3 Anaconda2.3.1 Anaconda Navigator2.3.2 Anaconda PowerShell Prompt & Anaconda Prompt2.3.3 Jupyter notebook 2.4 Pip & P…

纵观手机市场,手机即鏖战全面屏

9月13日&#xff0c;在相继发布Apple TV、Apple Watch 和iPhone 8/8 Plus之后&#xff0c;当大家都以为苹果新品发布会临近结束之时&#xff0c;苹果前CEO史蒂夫乔布斯的这句经典名言再现屏幕&#xff0c;iPhone X终于揭开了神秘面纱。 “One more thing”。 9月13日&#xff…

Codeforces Round #911 (Div. 2)

A.Cover in Water 题意&#xff1a; 有一个 1 n 1 \times n 1n的水池&#xff0c;里面有些格子可以加水&#xff0c;有些格子是被堵上的&#xff0c;你可以进行以下两种操作&#xff1a; 1.往一个空的格子里加水 2.移除一个有水的格子中的水&#xff0c;并将这些水添加到另…

2024年最受欢迎的项目管理工具盘点

十大项目管理系统包括&#xff1a;1.产品研发项目管理工具&#xff1a;PingCode&#xff1b;2.通用项目协作工具&#xff1a;Worktile&#xff1b;3.开源项目管理系统&#xff1a;Redmine&#xff1b;4.IT/敏捷项目管理系统&#xff1a;Jira&#xff1b;5.免费个人项目管理&…

dbvisual editor 显示中文乱码

打开如下的页面就可以选择中文相关的字体就可以正常显示中文了。

Leetcode—83.删除排序链表中的重复元素【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—83.删除排序链表中的重复元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode* head) {i…

国自然项目基金撰写及技巧

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统 作品介绍 本作品名称为“基于鲁班猫的幼儿 Al 学习助手”&#xff08;系统总体框图如下图&#xff09;&#xff0c;作品应用群体为幼儿群体&#xff0c;主要功能&#xff1a;通过实时坐姿检测&#xff0c;防止坐姿不端正导致…

C语言错误处理之 “信号处理方式<signal.h>及signal函数等内置函数”

目录 前言 signal.h头文件 信号宏 signal函数 实例&#xff1a;在Linux环境下验证signal函数 实例&#xff1a;在Linux中演示保存signal函数的返回值 预定义的信号处理函数&#xff08;简单了解&#xff09; SIG_DFL函数 SIG_IGN函数 raise函数 实例&#xff1a;测试…