使用 frp 通过云厂商公网IP实现内网穿透

news2024/11/20 6:22:46

写在前面


  • 有小伙伴推荐,简单了解
  • 博文内容涉及 内网穿透 工具 frp 的安装以及2个Demo
  • 内网的静态文件服务访问 Demo
  • 内网多端口映射 Demo
  • 理解不足小伙伴帮忙指正

不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树


公有云上面租一台机器

在这里插入图片描述

配置 hostname修改 PS1(非必须),更新 yum 仓库,开始之前做一些准备工作

┌──[root@liruilongs.github.io]-[~] 
└─$yum update

使用的系统环境

┌──[root@liruilongs.github.io]-[~] 
└─$hostnamectl 
 Static hostname: liruilongs.github.io
 Pretty hostname: VM-16-15-centos
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: 613a0293049a4b07973b2510b3318f11
         Boot ID: 67748b49b4774c38a59a204f8c03efec
  Virtualization: kvm
Operating System: CentOS Stream 9                 
     CPE OS Name: cpe:/o:centos:centos:9
          Kernel: Linux 5.14.0-432.el9.x86_64
    Architecture: x86-64
 Hardware Vendor: Tencent Cloud
  Hardware Model: CVM
Firmware Version: seabios-1.9.1-qemu-project.org
┌──[root@liruilongs.github.io]-[~] 
└─$

服务端安装

安装包下载:

https://github.com/fatedier/frp/releases

需要根据服务端类型选择对应的版本

┌──[root@liruilongs.github.io]-[~] 
└─$mkdir frp
┌──[root@liruilongs.github.io]-[~] 
└─$cd frp
┌──[root@liruilongs.github.io]-[~/frp] 
└─$wget https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz

解压

[root@liruilongs frp]# tar -xf frp_0.57.0_linux_amd64.tar.gz 
[root@liruilongs frp]# ls
frp_0.57.0_linux_amd64  frp_0.57.0_linux_amd64.tar.gz
[root@liruilongs frp]# cd frp_0.57.0_linux_amd64
[root@liruilongs frp_0.57.0_linux_amd64]# ls

服务端可执行文件 frps 放到合适的位置

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$ls
frpc  frpc.toml  frps  frps.toml  LICENSE
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$mv frps  /usr/local/bin/
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$ls /usr/local/bin/frps 
/usr/local/bin/frps
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$which frps
/usr/local/bin/frps
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

服务端配置文件准备

配置文件可以参考: gofrp.org/zh-cn/docs/examples/

服务端配置

┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$mkdir /etc/frps;cd /etc/frps; vim frps.toml
┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$cat /etc/frps/frps.toml 
# 绑定端口
bindPort = 7000
# 配置Web 管理
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$

这里需要同步开启 云服务器的防火墙或者安全组,放行端口 7500

服务端 service 单元文件编写

┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$vim  /etc/systemd/system/frps.service
┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$cat /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/bin/frps -c /etc/frps/frps.toml
[Install]
WantedBy = multi-user.target

确认配置文件

┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$systemctl cat frps.service
# /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/bin/frps -c /etc/frps/frps.toml
[Install]
WantedBy = multi-user.target

┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$

服务端启动

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl start  frps.service
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl status frps.service
● frps.service - frp server
     Loaded: loaded (/etc/systemd/system/frps.service; disabled; preset: disabled)
     Active: active (running) since Sat 2024-04-27 12:15:03 CST; 8s ago
   Main PID: 926794 (frps)
      Tasks: 5 (limit: 11127)
     Memory: 9.4M
        CPU: 220ms
     CGroup: /system.slice/frps.service
             └─926794 /usr/local/bin/frps -c /etc/frps/frps.toml

Apr 27 12:15:03 liruilongs.github.io systemd[1]: Started frp server.
Apr 27 12:15:03 liruilongs.github.io frps[926794]: 2024-04-27 12:15:03.809 [I] [frps/root.go:105] frps uses config file: /etc/f>
Apr 27 12:15:04 liruilongs.github.io frps[926794]: 2024-04-27 12:15:04.020 [I] [server/service.go:237] frps tcp listen on 0.0.0>
Apr 27 12:15:04 liruilongs.github.io frps[926794]: 2024-04-27 12:15:04.020 [I] [frps/root.go:114] frps started successfully
Apr 27 12:15:04 liruilongs.github.io frps[926794]: 2024-04-27 12:15:04.021 [I] [server/service.go:350] dashboard listen on 0.0.>
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

配置开机自启动

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl enable frps.service
Created symlink /etc/systemd/system/multi-user.target.wants/frps.service → /etc/systemd/system/frps.service.
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

访问服务端管理界面测试

通过 公网IP:管理Web端口 访问管理界面

管理界面

客户端安装

移动客户端可执行文件到合适位置,这里我们使用这一台机器同时模拟客户端, 实际上 客户的端需要拷贝到你的内网环境的机器上

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$ls
frpc  frpc.toml  frps.toml  LICENSE
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$mv frpc  /usr/local/bin/
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$which frpc
/usr/local/bin/frpc
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

客户的配置文件准备

┌──[root@liruilongs.github.io]-[/etc] 
└─$mkdir /etc/frpc;vim /etc/frpc/frpc.toml
┌──[root@liruilongs.github.io]-[/etc] 
└─$cat /etc/frpc/frpc.toml
serverAddr = "x.x.x.x" # 公网IP地址
serverPort = 7000  # 公网暴露端口
#管理界面配置
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
[[proxies]]
name = "admin_ui"
type = "tcp"
localPort = 7400
remotePort = 7600
# 需要暴露的其他的端口配置
┌──[root@liruilongs.github.io]-[/etc/frps] 
└─$

需要放行服务端防火墙 7600 端口,这里我们把内网,也就是客户端的 7400 端口映射到 公网的 7600 端口,这里我们就可以通过 公网IP:7600 来访问 客户端的管理界面

客户端 service 单元文件编写

┌──[root@liruilongs.github.io]-[~] 
└─$vim /etc/systemd/system/frpc.service
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl cat frpc.service
# /etc/systemd/system/frpc.service
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/bin/frpc -c /etc/frpc/frpc.toml
[Install]
WantedBy = multi-user.target
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

客户端服务启动

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl start frpc.service
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$systemctl status frpc.service
● frpc.service - frp client
     Loaded: loaded (/etc/systemd/system/frpc.service; enabled; preset: disabled)
     Active: active (running) since Sat 2024-04-27 12:57:04 CST; 5s ago
   Main PID: 937311 (frpc)
      Tasks: 4 (limit: 11127)
     Memory: 4.6M
        CPU: 7ms
     CGroup: /system.slice/frpc.service
             └─937311 /usr/local/bin/frpc -c /etc/frpc/frpc.toml

Apr 27 12:57:04 liruilongs.github.io systemd[1]: Started frp client.
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.663 [I] [sub/root.go:142] start frpc service for config file [/etc/frpc/frpc.toml]
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.664 [I] [client/service.go:294] try to connect to server...
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.672 [I] [client/service.go:286] [b7a69f20af11ef97] login to server success, get run id [b7a69f20af11ef97]
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.672 [I] [proxy/proxy_manager.go:173] [b7a69f20af11ef97] proxy added: [admin_ui]
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.672 [I] [client/service.go:184] admin server listen on 0.0.0.0:7400
Apr 27 12:57:04 liruilongs.github.io frpc[937311]: 2024-04-27 12:57:04.675 [W] [client/control.go:168] [b7a69f20af11ef97] [admin_ui] start error: port unavailable
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

访问客户端管理界面测试

常用场景Demo

官方文档提供了很多 Demo,这里主要看种常四用的场景

提供简单的文件访问服务

客户端配置

┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$cat  /etc/frpc/frpc.toml 
serverAddr = "62.234.100.41" # 公网IP地址
serverPort = 7000  # 公网暴露端口
#管理界面配置
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
[[proxies]]
name = "admin_ui"
type = "tcp"
localPort = 7400
remotePort = 7600
# 需要暴露的其他的端口配置
[[proxies]]
name = "test_static_file"
type = "tcp"
remotePort = 8099 # 外网暴露端口
[proxies.plugin]
type = "static_file"
# 本地文件目录,对外提供访问
localPath = "/tmp"
# URL 中的前缀,将被去除,保留的内容即为要访问的文件路径
stripPrefix = "static"
httpUser = "abc"
httpPassword = "abc"
┌──[root@liruilongs.github.io]-[~/frp/frp_0.57.0_linux_amd64] 
└─$

这里需要注意部分端口可能浏览器不能识别为 web 服务,比如 6000 ,可能需要更换端口 8099

┌──[root@liruilongs.github.io]-[/tmp] 
└─$systemctl  restart frpc.service
┌──[root@liruilongs.github.io]-[/tmp] 
└─$systemctl is-active frpc.service
active

端口范围映射

客户的配置文件中添加下面的配置,重新加载

{{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
[[proxies]]
name = "tcp-{{ $v.First }}"
type = "tcp"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
{{- end }}

这会映射 6000-60007 这8 个端口

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知 😃


https://github.com/fatedier/frp

https://gofrp.org/zh-cn/docs/


© 2018-2024 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

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

相关文章

【数据分析面试】32.矩阵元素求和 (Python: for…in…语句)

题目:矩阵元素求和 (Python) 假设给定一个整数矩阵。你的任务是编写一个函数,返回矩阵中所有元素的和。 示例 1: 输入: matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]]输出: matrix_sum(matrix) -> 45…

判断n以内的素数个数的五种方法+时间对比

目录 方法一:暴力法 复杂度 方法二:跨度为6的倍数的优化 复杂度 方法三:埃氏筛法 复杂度 方法四:埃氏筛法的改良 复杂度 方法五:线性筛 复杂度 性能对比测试 练习 方法一:暴力法 就是写一个函…

STL--string详解

STL基本内容 string是什么 string实质上是一个对象 string可看作一个串,类似字符数组 可以扩容,可以增删查改 可用下表访问操作符[]引用,修改某值 构造函数 默认构造 拷贝构造:参数为(string 或 char*) 求string对象的长度不…

锂电池SOH预测 | 基于SVM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

C语言学习/复习36

一、程序的环境与预处理 二、翻译环境与执行环境 三、运行环境 四、预编译(预处理)详解

【Hadoop】-Apache Hive使用语法与概念原理[15]

一、数据库操作 创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的:/user/hive/warehouse内 创建数据库并指定hdfs…

SVN--基本原理与使用(超详细)

目录 一、SVN概述二、SVN服务端软件安装三、SVN服务端配置四、SVN客户端软件安装与使用五、SVN三大指令六、SVN图标集与忽略功能6.1 图标集6.2 忽略功能 七、SVN版本回退八、SVN版本冲突九、SVN配置多仓库与权限控制9.1 配置多仓库9.2 权限控制 十、服务配置与管理十一、模拟真…

JAVASCRIPT+PHP+GB2312字库文件实现浏览器LED滚动效果

一、效果 二、源码 1、test_led.html <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>MATRIX LED</title> <script src"https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js"></script…

渗透攻击思考题

目录 问题一&#xff1a; 存储过程&#xff1a; 密文存储&#xff1a; 问题二&#xff1a; 问题三&#xff1a; 问题四&#xff1a; LM Hash的加密: NTLM Hash 的加密&#xff1a; 问题一&#xff1a; windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0…

数据聚类:Mean-Shift和EM算法

目录 1. 高斯混合分布2. Mean-Shift算法3. EM算法4. 数据聚类5. 源码地址 1. 高斯混合分布 在高斯混合分布中&#xff0c;我们假设数据是由多个高斯分布组合而成的。每个高斯分布被称为一个“成分”&#xff08;component&#xff09;&#xff0c;这些成分通过加权和的方式来构…

mysql-connector-java和spring-boot-starter-jdbc和mybatis-spring-boot-start

mysql-connector-java和spring-boot-starter-jdbc和mybatis-spring-boot-start JDBC是什么意思&#xff1f; JDBC是使用java语言操作mysql数据库的规范&#xff0c;java语言必须按照这个规范写才可以操作mysql数据库。 mysql-connector-java 在最开始的时候 程序中是不允许…

深入解析AI绘画算法:从GANs到VAEs

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

蛋糕购物商城

蛋糕购物商城 运行前附加数据库.mdf&#xff08;或使用sql生成数据库&#xff09; 登陆账号&#xff1a;admin 密码&#xff1a;123456 修改专辑价格时去掉&#xffe5;以及上传专辑图片 c#_asp.net 蛋糕购物商城 网上商城 三层架构 在线购物网站&#xff0c;电子商务系统 …

Linux——终端

一、终端 1、终端是什么 终端最初是指终端设备&#xff08;Terminal&#xff09;&#xff0c;它是一种用户与计算机系统进行交互的硬件设备。在早期的计算机系统中&#xff0c;终端通常是一台带有键盘和显示器的电脑&#xff0c;用户通过它输入命令&#xff0c;计算机在执行命…

redisson分布式锁的单机版应用

package com.redis;/*** author linn* date 2024年04月23日 15:31*/ import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.…

SpringBoot 3.2.5 引入Swagger(OpenApi)

SpringBoot 3.2.5 引入Swagger&#xff08;OpenApi&#xff09; pom文件配置文件启动类Controller 层ApiFox题外话 springdoc-openapi 和 swagger 都可以用&#xff0c;用其中一个就行&#xff0c;不用两个都引入。 这里简单记录以下springdoc-openapi。 springdoc-openapi(J…

【AI相关】模型相关技术名词

目录 过拟合和欠拟合 1.过拟合 2.欠拟合 特征清洗、数据变换、训练集、验证集和测试集 1.特征清洗 2.数据变换 3.训练集 4.验证集 5.测试集 跨时间测试和回溯测试 1.跨时间测试&#xff08;OOT 测试&#xff09; 2.回溯测试 联合建模与联邦学习 1.联合建模 2.联…

用友政务财务系统FileDownload接口存在任意文件读取漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友政务财务系统是由用友软件开发的一款针对政府机…

OPPO手机支持深度测试+免深度测试解锁BL+ROOT权限机型整理-2024年3月更新

绿厂OPPO手机线上线下卖的都很不错&#xff0c;目前市场份额十分巨大&#xff0c;用户自然也非常多&#xff0c;而近期ROM乐园后台受到很多关于OPPO手机的私信&#xff0c;咨询哪些机型支持解锁BL&#xff0c;ROOT刷机&#xff0c;今天ROM乐园正式盘点当前市场上可以解BL刷root…

树莓派4-通过IIC实现图片循环播放

一、环境 1、树莓派4&#xff1b; 2、串口连接电脑&#xff1b; 3、树莓派由杜邦线连接0.96寸OLED1306协议 4、树莓派能够联网&#xff0c;便于安装环境。离线情况也可以安装&#xff0c;相对麻烦&#xff1b; 二、目标 1、树莓派可以开启IIC并识别已连接的IIC&#xff1b; …