FRP 内网穿透工具部署

news2024/9/20 1:07:52

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]

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

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

相关文章

KylinV10 将项目上传至 Github

KylinV10 将项目上传至 Github 银河麒麟操作系统 V10 是在 Ubuntu 的基础上开发的&#xff0c;所以适用于 Ubuntu 的也适用于 KylinV10 一般上传至 GitHub&#xff0c;有两种方式&#xff0c;一种是 HTTPS&#xff0c;一种是 SSH&#xff0c;但是在 KylinV10 操作系统 HTTPS 的…

Gradio入门详细教程

常用的两款AI可视化交互应用比较&#xff1a; Gradio Gradio的优势在于易用性&#xff0c;代码结构相比Streamlit简单&#xff0c;只需简单定义输入和输出接口即可快速构建简单的交互页面&#xff0c;更轻松部署模型。适合场景相对简单&#xff0c;想要快速部署应用的开发者。便…

设计模式详解---抽象工厂模式

继续前言&#xff0c;工厂模式中抽象工厂模式的讲解&#xff1a; 1. 前面的工厂模式有啥问题&#xff1f; 前面的工厂模式有这么个问题&#xff1a;一个产品就给了一个工厂&#xff0c;这样子如果产品变多&#xff0c;系统就会很复杂&#xff1a; 2. 解决方法 我们可以按照手…

如何利用Python爬取网络上的图片

在当今数字化时代&#xff0c;网络上蕴藏着丰富的图片资源。对于开发者和研究者来说&#xff0c;从网络上获取图片数据是十分常见的需求。而Python作为一种强大的编程语言&#xff0c;提供了丰富的工具和库&#xff0c;使得爬取网络上的图片变得简单和高效。本文将介绍如何利用…

扫描电镜中的信号-噪声比(SNR)参数如何优化

在扫描电镜&#xff08;SEM&#xff09;中&#xff0c;信号-噪声比&#xff08;SNR&#xff09;的优化对于获得高质量的图像和可靠的数据分析至关重要。以下是一些优化SNR的方法&#xff1a; 选择适当的检测器&#xff1a;SEM通常配备了不同类型的检测器&#xff0c;如二次电子…

cmake 最基础示例

C 代码 文件名&#xff1a;first_cmake.cpp #include <iostream> using namespace std;int main() {cout<< "A" << endl;return 0; }CMakeLists.txt 文件 #CMakeLists.txt # 设置:版本 cmake_minimum_required(VERSION 3.20)# 定义 :项目名称 …

小红书种草和抖音传播区别是什么?

目前品牌较为关注的2大平台小红书和抖音&#xff0c;两者在种草方面存在一些明显的区别。本次就存量竞争、种草形式和种草策略这三个方面入手进行分析&#xff0c;今天和大家分享下小红书种草和抖音传播区别是什么&#xff1f; 一、存量竞争下的2大平台 2个都是属于存量竞争下的…

Point A的配置方式

Point A是5g中进行资源分配的参考点&#xff0c;所以UE驻留在小区上时&#xff0c;必须要知道Point A的位置&#xff0c;才能进一步根据参数确定属于自己的资源&#xff0c;这里就整理下协议上告知UE PointA的2种方式。 先看38.211中的描述&#xff0c;Point A是RB grids的公共…

Mysql - 常用插入数据的三种方法详解及练习

目录 &#x1f959;8.1.1 mysql中常用的三种插入数据的语句 1. insert into - 插入数据 2. replace into - 插入替换数据 3. insert ignore - 如果已存在&#xff0c;忽略当前新数据 &#x1f959;8.1.2 以上三种方法的练习及区分 &#x1f959;8.1.3 说明 &#x1f959…

C# WPF上位机开发(日志调试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 程序开发的过程中&#xff0c;调试肯定是少不了的。比如说&#xff0c;这个时候&#xff0c;我们可以设置断点、查看变量、检查函数调用堆栈等等。…

Polkadot 品牌焕新提案:重返前卫,市场营销的创新愿景

波卡的品牌形象和营销策略也许将迎来新变化。长久以来一些社区成员批评道&#xff0c;波卡的形象过于保守、太企业化&#xff0c;缺乏 Crypto 行业应有的先锋气质。 在前阵子的 Parity “去中心化” 变革中&#xff0c;Parity 的营销团队经历了大幅的变动&#xff0c;随后建立…

ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析

文章主要谈及主流ToolLLM 以及高口碑Agent 在调用Tools上的一些对比&#xff0c;框架先上&#xff0c;内容会不断丰富与更新。 ToolLLM model 也就是主打Function Call 的大模型 OPENAI GPT 宇宙第一LLM NexusRaven 开源&#xff0c;可商用&#xff0c;function call的效果对…

vue3 vite动态路由的问题

因为to.matched未配到路由导致&#xff0c; vue-router.mjs:35 [Vue Router warn]: No match found for location with path "/basedata/psiIntialCustomer/add"加下面的代码&#xff0c;是解决不了问题&#xff0c;因为它只是转向了404页面。 const routes_404 {…

Vmare安装Centos8系统

vmare虚拟机Centos8系统安装 之前虚拟机已经安装好了&#xff0c;现在开始尝试在虚拟机里面安装系统&#xff0c;这次使用Centos8进行安装。 前提条件&#xff1a; 虚拟机安装完成 Centos8系统镜像下载完成 网上资源很多&#xff0c;如果没有也可以私信我。 本篇文章全程图片资…

ChatGPT对话为什么不用WebSocket而使用EventSource?

文章目录 1. 引言2. WebSocket和EventSource简介2.1 WebSocket2.2 EventSource 3. ChatGPT对话系统的特点4. EventSource的优势4.1 简单易用4.2 容错性强4.3 兼容性良好 5. 为何选择EventSource而非WebSocket&#xff1f;5.1 单向通信模式5.2 长轮询模式5.3 简化部署和维护 6. …

后端接受List类型参数报错:Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token

今天和前端调接口时报了"Cannot deserialize instance of java.util.ArrayList out of START_OBJECT token"错误 其实我想要的是这种类型的参数 但是前端传的是这种类型 前端传过来的更像是一个对象而不是一个列表&#xff0c;我们后端不能直接接受它 报错时后端的…

CSS特效030:日蚀动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

郝斌C语言自学教程笔记

赫斌C语言——笔记目录 c语言编程预备知识流程控制函数变量指针结构体位运算符 前段时间康哥看我C语言基础不牢,推荐我学习郝斌老师的C语言课程&#xff0c;花2周看完之后发现确实是目前所看的C语言课程中最好的&#xff0c;不仅非常适合入门&#xff0c;而且对即使学了几年C语…

痤疮分割 实验心路历程

数据集的制作 将labelme生成的标注文件记普通的json文件转成coco数据集格式的json文件 图像分辨率过大 如果不做任何调整&#xff1a; 会出现“killed”的报错&#xff0c;表示图片像素过大&#xff0c;显卡内存不够&#xff0c;无法支撑训练 显卡 换成更高性能的显卡&am…

配置VRRP负载分担示例

一、组网需求&#xff1a; HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;SwitchA作为…