FRP 内网穿透工具部署

FRP 介绍

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

官方网站:https://gofrp.org/zh-cn/

项目地址:https://github.com/fatedier/frp

基本原理如下所示:

在这里插入图片描述

下面介绍FRP的两种部署方式,环境信息如下:

节点角色节点类型OSIP地址
FRPS服务端阿里云轻量服务器Ubuntu 22.04 LTS112.74.1.10
FRPC客户端本地linux服务器Ubuntu 22.04 LTS192.168.72.16

基于docker部署

项目地址:https://github.com/snowdreamtech/frp

服务端镜像地址:https://hub.docker.com/r/snowdreamtech/frps

客户端镜像地址:https://hub.docker.com/r/snowdreamtech/frpc

1. 使用 Docker 安装服务端

以下步骤在阿里云轻量服务器上执行,并确认已安装docker环境。

创建frps服务端配置文件,复制粘贴以下内容

mkdir -p /etc/frp

cat >/etc/frp/frps.toml<<EOF
bindPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
EOF

配置参数说明:

  • bindPort:客户端与服务端通信端口
  • webServer.port:服务端dashboard端口
  • vhostHTTPPort:定义http代理需要配置该参数
  • vhostHTTPSPort:定义https代理需要配置该参数

注意:以上端口均需在防火墙放通。

使用docker 安装 frps 服务端

docker run -d --name frps --restart=always \
  --network host \
  -v /etc/frp/frps.toml:/etc/frp/frps.toml \
  snowdreamtech/frps:0.52.3

查看容器运行状态

root@ubuntu:~# docker ps
CONTAINER ID   IMAGE                         COMMAND                  CREATED             STATUS             PORTS                                                                                                                 NAMES
a6abfba322a6   snowdreamtech/frps:0.52.3     "/bin/sh -c '/usr/bi…"   About an hour ago   Up About an hour                                                                                                                         frps

访问dashboard

http://112.74.1.10:7500/

首页如下:
在这里插入图片描述

2. 使用 Docker 安装客户端

以下步骤在本地linux服务器上执行,并确认已安装docker环境。

创建frpc客户端配置文件,复制粘贴以下内容,定义了两个proxies,分别为tcp穿透和http穿透示例。

mkdir -p /etc/frp

cat >/etc/frp/frpc.toml<<EOF
serverAddr = "112.74.1.10"
serverPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

[[proxies]]
name = "test-web"
type = "http"
localPort = 80
customDomains = ["112.74.1.10"]
EOF

参数说明:

  • serverAddr:指定服务端公网IP地址
  • serverPort: 指定服务端监听端口
  • webServer.port:客户端dashboard监听端口
  • localIP: 本地服务器IP
  • localPort: 本地服务器需要穿透的应用端口,本示例为SSH服务22端口和NGINX服务80端口。
  • remotePort:指定服务端应用监听端口,用于转发到本地SSH端口

使用 docker 部署 FRPC 客户端

docker run -d --name frpc --restart=always \
  --network host \
  -v /etc/frp/frpc.toml:/etc/frp/frpc.toml \
  snowdreamtech/frpc:0.52.3

访问客户端 dashboard

http://192.168.72.16:7400/

首页如下:
在这里插入图片描述

3. 测试访问本地服务

测试基于TCP的SSH穿透

访问阿里云轻量服务器IP地址112.74.1.106000端口,实际会转发到本地服务器192.168.72.1622端口。

测试是否能否通过ssh连接到客户端。

root@ubuntu:~# ssh -o Port=6000 root@112.74.1.10
root@112.74.1.10's password: 
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-89-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Dec 14 02:54:06 PM CST 2023

  System load:                      0.0
  Usage of /:                       75.9% of 196.89GB
  Memory usage:                     16%
  Swap usage:                       1%
  Processes:                        219
  Users logged in:                  1
  IPv4 address for br-aeda5cc463d3: 172.18.0.1
  IPv4 address for br-f87de9bc351f: 172.19.0.1
  IPv4 address for docker0:         172.17.0.1
  IPv4 address for ens33:           192.168.72.16

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

64 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


*** System restart required ***
Last login: Thu Dec 14 14:54:07 2023 from 127.0.0.1
root@ubuntu:~# hostname -I
192.168.72.16 172.17.0.1 172.18.0.1 172.19.0.1 
root@ubuntu:~# 

测试基于HTTP的WEB穿透

访问阿里云轻量服务器IP地址112.74.1.108080端口,实际会转发到本地服务器192.168.72.1680端口。

本地使用docker运行一个示例nginx服务,用于监听80端口

docker run -d --name nginx -p 80:80 nginx

测试是否能否通过轻量服务器连接到本地nginx服务。

root@ubuntu:~#  curl 112.74.1.10:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

基于systemd部署

推荐上面的docker方式部署服务端,如果没有docker环境,也可以使用systemd来部署和维护frp服务。

1.使用 systemd 安装服务端

以下步骤在阿里云轻量服务器上执行。

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

安装包下载地址:https://github.com/fatedier/frp/releases

下载frp安装包

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

安装该fprs二进制文件到/usr/local/bin目录下

cp frp_0.52.3_linux_amd64/frps /usr/local/bin/

创建frps配置文件

mkdir -p /etc/frp
cp frp_0.52.3_linux_amd64/frps.toml /etc/frp

修改frps配置文件

cat >/etc/frp/frps.toml<<EOF
bindPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
EOF

创建 frps.service 服务启动文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

cat >/etc/systemd/system/frps.service<<EOF
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /usr/local/bin/frps -c /etc/frp/frps.toml

[Install]
WantedBy = multi-user.target
EOF

使用 systemd 命令启动 frps 服务端服务

systemctl enable --now frps

查看服务运行状态

root@node40:~# systemctl status frps
● frps.service - frp server
     Loaded: loaded (/etc/systemd/system/frps.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-12-13 17:17:48 CST; 21h ago
   Main PID: 906819 (frps)
      Tasks: 7 (limit: 9387)
     Memory: 7.5M
        CPU: 5.643s
     CGroup: /system.slice/frps.service
             └─906819 /usr/local/bin/frps -c /etc/frp/frps.toml

Dec 13 17:18:08 node40 frps[906819]: 2023/12/13 17:18:08 [I] [dashboard_api.go:186] Http response [/api/proxy/tcp]: code [200]
Dec 13 17:18:10 node40 frps[906819]: 2023/12/13 17:18:10 [I] [dashboard_api.go:329] Http request: [/api/traffic/test-tcp]
Dec 13 17:18:10 node40 frps[906819]: 2023/12/13 17:18:10 [I] [dashboard_api.go:323] Http response [/api/traffic/test-tcp]: code [200]
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [control.go:334] [5b5fc91b4d176c56] control writer is closing
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [proxy.go:115] [5b5fc91b4d176c56] [test-tcp] proxy closing
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [W] [proxy.go:201] [5b5fc91b4d176c56] [test-tcp] listener is closed: accept tcp [::]:6000: use of closed network connec>
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [control.go:423] [5b5fc91b4d176c56] client exit success
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [service.go:533] [1036b9eb2691ec4e] client login info: ip [192.168.72.41:35800] version [0.52.3] hostname [] os [li>
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [tcp.go:82] [1036b9eb2691ec4e] [test-tcp] tcp proxy listen port [6000]
Dec 13 17:21:55 node40 frps[906819]: 2023/12/13 17:21:55 [I] [control.go:500] [1036b9eb2691ec4e] new proxy [test-tcp] type [tcp] success

服务启停命令

systemctl start frps
systemctl stop frps
systemctl restart frps

通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。

2. 使用 systemd 安装客户端

以下步骤在本地linux服务器上执行。

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

安装该fprc二进制文件到/usr/local/bin目录下

cp frp_0.52.3_linux_amd64/frpc /usr/local/bin/

创建frps配置文件

mkdir -p /etc/frp
cp frp_0.52.3_linux_amd64/frpc.toml /etc/frp

修改客户端配置文件,指定服务端地址和端口

cat >/etc/frp/frpc.toml<<EOF
serverAddr = "112.74.1.10"
serverPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

[[proxies]]
name = "test-web"
type = "http"
localPort = 80
customDomains = ["112.74.1.10"]
EOF

创建 frpc.service 服务启动文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frpc.service 文件,用于配置 frpc 服务。

cat >/etc/systemd/system/frpc.service<<EOF
[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /usr/local/bin/frpc -c /etc/frp/frpc.toml

[Install]
WantedBy = multi-user.target
EOF

使用 systemd 命令启动 frpc 客户端服务

systemctl enable --now frpc

查看服务运行状态

root@ubuntu:~# systemctl status frpc
● frpc.service - frp client
     Loaded: loaded (/etc/systemd/system/frpc.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-12-13 17:21:55 CST; 21h ago
   Main PID: 69350 (frpc)
      Tasks: 5 (limit: 4556)
     Memory: 3.9M
        CPU: 12.045s
     CGroup: /system.slice/frpc.service
             └─69350 /usr/local/bin/frpc -c /etc/frp/frpc.toml

Dec 13 17:21:55 ubuntu systemd[1]: Started frp client.
Dec 13 17:21:55 ubuntu frpc[69350]: 2023/12/13 17:21:55 [I] [root.go:139] start frpc service for config file [/etc/frp/frpc.toml]
Dec 13 17:21:55 ubuntu frpc[69350]: 2023/12/13 17:21:55 [I] [service.go:299] [1036b9eb2691ec4e] login to server success, get run id [1036b9eb2691ec4e]
Dec 13 17:21:55 ubuntu frpc[69350]: 2023/12/13 17:21:55 [I] [proxy_manager.go:156] [1036b9eb2691ec4e] proxy added: [test-tcp]
Dec 13 17:21:55 ubuntu frpc[69350]: 2023/12/13 17:21:55 [I] [service.go:161] admin server listen on 0.0.0.0:7400
Dec 13 17:21:55 ubuntu frpc[69350]: 2023/12/13 17:21:55 [I] [control.go:173] [1036b9eb2691ec4e] [test-tcp] start proxy success
Dec 13 17:22:09 ubuntu frpc[69350]: 2023/12/13 17:22:09 [I] [admin_api.go:140] Http request [/api/status]
Dec 13 17:22:09 ubuntu frpc[69350]: 2023/12/13 17:22:09 [I] [admin_api.go:142] Http response [/api/status]
Dec 13 17:22:15 ubuntu frpc[69350]: 2023/12/13 17:22:15 [I] [admin_api.go:166] Http get request [/api/config]
Dec 13 17:22:15 ubuntu frpc[69350]: 2023/12/13 17:22:15 [I] [admin_api.go:168] Http get response [/api/config], code [200]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARS430毫米波雷达标定步骤

工具准备&#xff1a;CANoe&#xff0c; 标定工程文件&#xff0c;雷达标定板&#xff0c;三脚架&#xff0c;激光器&#xff0c;平口钳&#xff0c;气泡水平仪&#xff0c;小镜子&#xff0c;双面胶。 将车辆放置在车辆前方至少有20米空白视野的场地上。使用气泡水平仪大概使…

谈一谈网络协议中的传输层

文章目录 UDPTCPTCP为什么可靠 UDP 传输层的作用是负责能够从发送端到传输端。 我们的主机上有多个程序&#xff0c;那么怎么分辨哪个信息是发给哪个程序的呢&#xff1f;—端口号。其是一个16位的无符号整型&#xff0c;端口号分为知名端口号&#xff08;0-1023&#xff09;和…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

使用sha512对上传到linux服务器的文件进行校验

什么是SHA-512 SHA-512&#xff08;安全散列算法 512 位&#xff09;是一种密码散列函数&#xff0c;属于SHA-2家族的一部分。它是由美国国家安全局&#xff08;NSA&#xff09;设计的一种安全散列算法&#xff0c;用于产生数字摘要&#xff0c;通常用于数据完整性验证、数字签…

3D角色生成式AI:原理及实现

自从开创性论文Denoising Diffusion Probabilistic Models发布以来&#xff0c;此类图像生成器一直在改进&#xff0c;生成的图像质量在多个指标上都击败了 GAN&#xff0c;并且与真实图像无法区分。 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis…

《点云处理》 提取点云内点和外点

前言 关于内点&#xff08;inliers&#xff09;和外点&#xff08;outliers&#xff09;在点云处理方向上是个非常常见的名词。有时候&#xff0c;内点也会被称之为有效点&#xff0c;而外点会被称之为无效点。所谓有效和无效都是相对而言的&#xff0c;无效不一定是真的没有意…

拖拽属性 draggable

H5 新增的属性 draggable&#xff0c;它能够给与一切的 html 元素拖动的效果。 拖拽元素 属性为 draggable"true" 的元素&#xff0c;可拖动&#xff0c;且拖动时鼠标变为禁用图标 ps: 直接写 draggable 可能无效 ondragstart 开始拖拽时触发&#xff08;按下鼠标…

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步&#xff1a;坐标导入第二步&#xff1a;创建SpringMVC容器的控制器类第三步&#xff1a;初始化SpringMVC环境&#xff0c;设定Spring加载对应的bean第四步&#xff1a;初始化Servlet容器&#xff0c;加载SpringMV…

PyQt6 QScrollBar滚动条控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计48条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

实验记录:可能造成深度学习模型训练过程中准确率振荡的原因

可能造成模型训练过程中准确率振荡的原因&#xff1a; 数据集因素&#xff1a; 1.数据集中含有噪声或者样本分布不平衡&#xff0c;这会导致模型学习到一些错误的规律&#xff0c;从而引起训练准确率的震荡。 2.训练数据量过小。如果训练数据集过小&#xff0c;会导致样本不足…

Y4M视频文件格式

什么是Y4M 以YUV4Mpeg格式创建的视频文件;这个视频文件存储了一组未压缩的YCbCr图像&#xff0c;这些图像逐帧组成视频;在压缩成MPEG-2或Matroska等更流行的视频格式之前&#xff0c;用作原始的彩色视频格式 Y4M文件是一个纯文本格式的header开始&#xff0c;header有0或多个…

ARM架构简析

全局与局量等知识 断电后&#xff0c;程序以及数据都在FLASH中。 断电后&#xff0c;内存中就没有变量了。 程序在烧在FLASH中的&#xff1b; 程序运行的时候&#xff0c;全局变量的初始值&#xff0c;必然是从FLAASH中的来的&#xff1a; 初始化全局变量的过程&#xff1a;…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述&#xff1a; 我们平时说的java字节码&#xff0c;指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为&#xff1a;jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&…

【面试】广告优化

a1&#xff1a;点击率公式是什么&#xff1f;点击率低的原因是什么&#xff1f; 点击率点击/曝光&#xff0c;点击率低的原因主要有两点&#xff1a;一是创意不吸引人&#xff1b;二是目标受众不准确/定向过宽不精确&#xff0c;广告曝光给了对产品不感兴趣用户 a2&#xff1a;…

Google Gemini 模型本地可视化

Google近期发布了Gemini模型&#xff0c;而且开放了Gemini Pro API&#xff0c;Gemini Pro 可免费使用&#xff01; Gemini Pro支持全球180个国家的38种语言&#xff0c;目前接受文本、图片作为输入并生成文本作为输出。 Gemini Pro的表现超越了其他同类模型&#xff0c;当前版…

version `GLIBC_2.29‘ not found 的原因和怎么解决问题

程序上经常有在这台Linux上编译&#xff0c;然后放到另一个Linux上运行的情况。 如果Linux版本差别不大或都是ubuntu或centos系列还好。 如果不是一个系列很容易出现GLIBC 找不到的情况。 尤其是ubuntu上编译&#xff0c;然后放到centos系列。因为centos为了追求所谓的稳定&…

linux系统中出现大量不可中断进程和僵尸进程怎么办?

进程状态 当iowait升高时&#xff0c;进程很可能因为得不到硬件的响应&#xff0c;而长时间处于不可中断的状态&#xff0c;从ps或者top命令的输出中&#xff0c;可以发现它们都处于D状态&#xff0c;也就是不可中断状态。 通过top和ps可以查看进程的状态&#xff0c;S列表示…

20来岁,大专毕业,学软件测试可行吗?

转行软件测试找不到工作&#xff01; 转行软件测试找不到工作&#xff01; 转行软件测试找不到工作&#xff01; 重要的事情说三遍&#xff01;千万别听培训班咨询老师给你画饼 &#xff1b;我就是某某软件测试培训班出来的&#xff0c;大专&#xff0c;其他专业毕业&#x…

【数据分享】2019-2023年我国区县逐年新房房价数据(Excel/Shp格式)

房价是一个区域发展程度的重要体现&#xff0c;一个区域的房价越高通常代表这个区域越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享了2019—2023年我国区县逐月的新房房价数据&a…

实验用python实现决策树和随机森林分类

1.实验目的 1.会用Python提供的sklearn库中的决策树算法对数据进行分类 2.会用Python提供的sklearn库中的随机森林算法对数据进行分类 3.会用Python提供的方法对数据进行预处理 2.设备与环境 使用Spyder并借助Python语言进行实现 3.实验原理 决策树( Decision Tree) 又称为…