用FRP配置toml文件搭建内网穿透

需求场景


1、一台外网可访问的有固定ip的云服务器,Ubuntu系统
2、一台外网无法访问的无固定ip的本地家用电脑,Ubuntu系统
需求:将云服务器搭建为一台内网穿透服务器,实现通过外网访问家用电脑(网页)的功能。且即使没有域名也可通过公网访问。

下载软件


GitHub:https://github.com/fatedier/frp
releases页面:
官方文档:https://gofrp.org/zh-cn/

下载程序包
前往页面下载:https://github.com/fatedier/frp/releases
 

根据自己实际情况选择,家用电脑和服务器都是x64架构。 

上传软件

个人习惯先分别在云端和本地的ubuntu的 /etc 目录下新建frp目录用来存放frp文件。

解压后,在家用电脑端保存frpcfrpc.toml文件,在云服务器端保存frpsfrps.toml文件。

frp软件在0.52.0版本开始支持 toml格式的配置文件,在后继版本取消 ini配置格式。

服务端设置

云端放行端口

frp服务端口:7000(可自定义)
frp控制面板端口:7500(可自定义)

要在两个地方放行:

1是云服务器提供商设置的防火墙放行端口,

2是服务器操作系统Ubuntu端口也要放行

# 添加监听端口
sudo firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload

如果用的宝塔面板,在安全里设置:

如果端口不放行后面会报无法连接错误: connect: no route to host

 云端配置文件frp.toml

bindPort = 7000                 # frp服务的特定端口,防火墙也需放开该端口# 服务面板可查看frp服务状态信息
webServer.addr = "0.0.0.0"		# 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0
webServer.port = 7500			# 后台管理端口
webServer.user = "admin"		# (可选)后台登录用户名
webServer.password = "admin"	# (可选)后台登录密码#transport.tls.force = true  # 服务端将只接受 TLS链接
#auth.method = 'token'       # 客户端访问验证方式
#auth.token = "54321" 		 # 客户端访问验证密码,frpc要与frps一致# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
#vhostHTTPPort = 8000
#vhostHTTPSPort = 45443

启动服务端

方式一:直接启动

服务器端,传统的启动方式是直接敲命令:

# 先cd到frps所在目录
./frps -c ./frps.toml &

这么写,比较麻烦,而且如果要停止进程也比较麻烦,建议采用构建成服务的方式。

方式二:以服务方式启动(推荐)

安装systemd,通常情况下系统都带得有,没有的情况下使用如下命令安装。

# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

创建frps.service服务

# 创建并编辑该文件
sudo vim /etc/systemd/system/frps.service

写入内容

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
# 启动命令,改为实际存放frps的路径
ExecStart = /path/to/frps -c /path/to/frps.toml[Install]
WantedBy = multi-user.target


以服务的方式管理frps

# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置为开机自启
sudo systemctl enable frps

验证服务端是否启动成功


访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态
如:http://62.244.114.4:7500/,

用户名和密码分别对应frps.toml文件中的

webServer.user = "admin"
webServer.password = "admin"
登录之后frp控制面板界面如下:

如果上述步骤没有问题,则说明frp的服务端配置成功了,也就意味着内网穿透你已经成功了一半
 

客户端设置

配置文件frpc.toml


客户端,编辑frpc.toml文件:

# frpc.toml
transport.tls.enable = true		# 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "47.76.92.71" # 服务端ip
serverPort = 7000 # 服务端端口
auth.method = 'token' # 客户端访问验证方式
auth.token = '54321' # 客户端访问验证密码[[proxies]]
name = "dy_mysql" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 客户端的ip(固定)
localPort = 3306 # 客户端服务端口
remotePort = 13306 # 映射到服务端端口(服务器需放行)[[proxies]]
name = "dy_video" # 客户端服务名_一个监控摄像头
type = "tcp" # 通讯方式
localIP = "192.168.6.8" # 客户端的ip(固定)
localPort = 5522 # 客户端服务端口
remotePort = 15522 # 映射到服务端端口(服务器需放行)[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 9000				# 将本地9000端口的服务暴露在公网的6060端口
remotePort = 6060 				# 暴露服务的公网入口[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
#customDomains = ["xxx.xxx.xxx.xxx"][[proxies]]
name = "web"
type = "http"
localPort = 80
#customDomains = ["域名"][[proxies]]
name = "web-80"
type = "https"
localPort = 45443
#customDomains = ["cloud.your-service.com"]

运行启动

客户端运行及加入自动启动也参考服务端,唯一不同的是客户端运行需要使用 frpc -c frpc.toml

穿透测试

现在可以通过外网直接用ip+端口访问家中这台电脑提供的服务了,当然原理上是通过云服务器的端口中转的。

可以在家中电脑上继续搭建NAS系统,搭建自己的博客网站。

如果是通过域名访问网站,在国内是需要备案的。

用docker部署frp

服务端

云服务器ubuntu配置文件 frps.toml

bindPort = 7000
# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
vhostHTTPPort = 8080

启动脚本 serverstart.sh

#!/bin/bash
FRP_DIR=`pwd`
docker stop frps
docker rm frps
docker run -d \--restart always \--network host \--name frps \-v ${FRP_DIR}/frps.toml:/etc/frp/frps.toml \snowdreamtech/frps

运行

./serverstart.sh

客户端

本地电脑ubuntu配置文件frpc.toml

# frpc.toml
serverAddr = "192.168.1.132"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6022

启动脚本clientstart.sh

#!/bin/bash
FRP_DIR=`pwd`
docker stop frpc
docker rm frpc
docker run -d \--restart always \--network host \--name frpc \-v ${FRP_DIR}/frpc.toml:/etc/frp/frpc.toml \snowdreamtech/frpc

运行

./clientstart.sh

上述配置是一个把内网ssh服务的22号端口映射到公网的6022端口,执行命令

ssh -p 6022 192.168.1.132

即可从外网访问内网ssh服务

注:用公网ip替换192.168.1.132

其它问题

1. 端口占用冲突

如果你用的端口被系统保留了不让用,就得换其它端口

可以通过如下命令查看保留的端口范围

netsh interface ipv4 show excludedportrange protocol=tcp

2. 云服务器商的控制面板和ubuntu系统中都要放行防火墙端口

相关引用

用FRP配置toml文件搭建内网穿透

杂记 | 使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理食用)_frps.toml-CSDN博客

如何使用docker+frp进行内网穿透_docker_脚本之家

内网穿透!如何配置frp新版0.56.0的配置文件.toml:提供web、samba、ssh远程连接示例_frp 0.56-CSDN博客

 内网穿透工具frp原理和使用教程-CSDN博客

 https://www.cnblogs.com/cenima/p/17849921.html

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

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

相关文章

人工智能|机器学习——基于机器学习的信用卡办卡意愿模型预测项目

一、背景介绍 在金融领域,了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术,我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库,构建了两个常用的分类模型&#xff…

Ardupilot无人船(车)自动调参

无人船(车)快速调参脚本简化了为无人船(车)角速率和速度控制器调参的过程。 该脚本应该在无人船(车)在Circle模式下循环绕圈时运行。它记录转向和油门输出以及由此产生的响应(例如无人船(车&am…

高精度算法(2)

前言 延续上次所讲的内容再对乘法和除法进行说明,希望有所帮助 注意这里的乘除法都是针对于整数如果要是涉及到小数,我们得使用二分法 通过二分同样可以解决小数精度问题 高精度乘法 思路 我们只能用字符串来读取一个很大很大的数,所以…

阿赵UE学习笔记——28、粒子系统Niagara简介

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的使用。这次开始学习粒子系统的使用。 一、Cascade系统 在介绍UE5的Niagara系统之前,必须先介绍一下旧版本的粒子系统。   在UE4的时候,虚幻引擎的粒子系统叫做Cascade&#x…

【论文阅读】Attention is all you need

摘要 主要的序列转换模型是基于复杂的循环或卷积神经网络,其中包括一个编码器和一个解码器。性能最好的模型还通过一种注意力机制将编码器和解码器连接起来。我们提出了一种新的简单的网络架构,Transformer,完全基于注意机制,完全…

杜牧是唐朝最风流的诗人

杜牧,有“杜紫薇”之称,是宰相杜佑的孙子。李白、杜甫是“大李杜”。杜牧、李商隐是“小李杜”。 杜牧23岁写了《阿房宫赋》,一朝成名天下知。 唐朝晚年,科举和仕途没有出路,杜牧寄情享乐。杜牧怀才不遇,…

C语言--函数递归

目录 1、什么是递归? 1.1 递归的思想 1.2 递归的限制条件 2. 递归举例 2.1 举例1:求n的阶乘 2.2 举例2:顺序打印⼀个整数的每⼀位 3. 递归与迭代 扩展学习: 早上好,下午好,晚上好 1、什么是递归&…

Ubuntu 22.04.4安装Docker引擎

正文共:1024 字 13 图,预估阅读时间:1 分钟 我们前面安装了几次Ubuntu的操作系统(Ubuntu 23.10通过APT安装Open vSwitch),在开始之前,我还是简单提醒一下,从Ubuntu下载页面&#xff…

因式分解技巧1-----一次提净

什么是因式分解? 在小学,我们都学过质因数分解。就比如:,然而我们可以发现!4此时还没有被分解完,于是: 则: 这是小学的质因数分解。那么我们一起看看初中的因式分解。 例1&…

SpringBoot3 函数式web 小记

前言:函数式web是spring5.2之后的一个新特性,Spring Boot 3 进一步优化了这一模型,为开发现代 Web 应用提供了更加灵活、简洁的方法; 函数式web的四大核心对象 - RouterFunction:定义路由信息 - RequestPredicates&am…

深度解析 Spring 源码:三级缓存机制探究

文章目录 一、 三级缓存的概述二、 三级缓存的实现原理2.1 创建Bean流程图2.2 getBean()2.3 doGetBean()2.4 createBean()2.5 doCreateBean()2.4 getSingleton() 三、 三级缓存的使用场景与注意事项3.1 在实际开发中如何使用三级缓存3.2 三级缓存可能出现的问题及解决方法 一、…

检索算法和技术的本质回顾

目录 一、数据结构和存储特点对检索效率的重大影响总结 二、数组和链表的线性结构检索 (一)基本分析 (二)使用二分查找提升数组检索效率 (三)灵活改造链表提升检索效率 问题背景 解决方案 歌曲块链…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据,或者批量导出数据时,除了使用传统的gsql copy命令,也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …

[C++][算法基础]求a的b次方模p的值(快速幂)

给定 n 组 ,对于每组数据,求出 的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含三个整数 。 输出格式 对于每组数据,输出一个结果,表示 的值。 每个结果占一行。 数据范围 1≤n≤100000, 1≤≤2 …

移动Web学习09-响应式布局bootstrap案例开发

3、综合案例-AlloyTeam移动全端 准备工作 HTML 结构 <title>腾讯全端</title> <link rel"shortcut icon" href"favicon.ico" type"image/x-icon"> <!-- 层叠性&#xff1a;咱们的css 要 层叠 框架的 --> <link rel&…

匿名函数与gorm中的Transaction事务方法

整理下go中的匿名函数&#xff0c;项目中很多地方都在用。 1、函数类型的变量 Go中&#xff0c;函数也是一种数据类型。定义一个函数&#xff0c;把这个函数赋值给一个变量&#xff0c;这个变量就是函数类型的变量&#xff0c;用这个变量等价于直接调函数&#xff1a; packa…

数字阅览室解决方案

一、方案概述 “数字阅览室”概念一经提出&#xff0c;就得到了广泛的关注&#xff0c;纷纷组织力量进行探讨、研究和开发&#xff0c;进行各种模型的试验。随着数字地球概念、技术、应用领域的发展&#xff0c;数字阅览室已成为数字地球家庭的成员&#xff0c;为信息高速公路…

高频前端面试题汇总之JavaScript篇(上)

一、数据类型 1. JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f; JavaScript共有八种数据类型&#xff0c;分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型&#xff1a; Symbol 代…

如何免费申请长期HTTPS证书?

长期HTTPS证书申请步骤&#xff1a; 第一步&#xff1a;确定证书类型 根据你的网站需求&#xff0c;选一种适合的HTTPS证书。一般有这几种&#xff1a; - 域名型&#xff08;DV&#xff09;证书&#xff1a;最基础&#xff0c;验证你对域名的所有权&#xff0c;适合个人网站或…