【计算机网络】12、frp 内网穿透

news2024/12/25 13:57:09

在这里插入图片描述

文章目录

  • 一、服务端设置
  • 二、客户端设置

frp :A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

背景:从公网中访问自己的私有设备向来是一件难事儿。
自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。
我有一台计算机位于一个很复杂的局域网中,我想要实现远程桌面和文件访问,目前来看其所处的网络环境很难通过简单的端口映射将其暴露在公网之中,有如下方法:

  • TeamViewer、向日葵、ToDesk:需要两端都有此软件,不方便
  • 蒲公英VPN软件进行组网,可用,但免费版本网络速度极慢,体验不佳,几乎无法正常使用。
  • 花生壳软件进行DDNS解析,可用,但同第二点所述,免费版本有带宽限制,无法实际使用。
  • 搭建frp服务器进行内网穿透,可用且推荐,可以达到不错的速度,且理论上可以开放任何想要的端口,可以实现的功能远不止远程桌面或者文件共享。

准备工作:搭建一个完整的frp服务链,我们需要

  • VPS一台(也可以是具有公网IP的实体机)
  • 访问目标设备(就是你最终要访问的设备)

一、服务端设置

服务端设置如下:

SSH连接到VPS之后运行arch命令查看处理器架构,根据架构下载不同版本的frp
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz # 根据架构不同,选择相应版本并进行下载(如果是“X86_64“即可选择”amd64”)
tar -zxvf frp_0.22.0_linux_amd64.tar.gz #解压
cp -r frp_0.22.0_linux_amd64 frp # 文件夹改个名,方便使用
cd frp # 把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录
ls -a # 查看一下文件
我们只需要关注如下几个文件:frps、frps.ini、frpc、frpc.ini
前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
rm frpc frpc.ini # 因为我们正在配置服务端,可以删除客户端的两个文件

vim frps.ini # 然后修改frps.ini文件

# 端口均可使用默认值,token、user和password项请自行设置
[common]
bind_port = 7000 # 表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到
dashboard_port = 7500 # 服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息
token = 12345678 # 客户端和服务端连接的口令,请自行设置并记录,稍后会用到
dashboard_user = admin # 打开仪表板页面登录的用户名和密码,自行设置即可
dashboard_pwd = admin # 同上
vhost_http_port = 10080 # 反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
vhost_https_port = 10443 # 同上

然后 nohup ./frps -c frps.ini 启动 frps 服务端,如果看到屏幕输出这样一段内容,即表示运行正常

2023/01/01 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2023/01/01 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2023/01/01 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2023/01/01 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2023/01/01 15:22:39 [I] [root.go:210] Start frps success

此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面

二、客户端设置

frp的客户端就是我们想要真正进行访问的那台设备,本文用Windows主机做例子,Linux配置方法类似。

同样 wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_windows_amd64.zip 下载包,删除其中的frps和frps.ini文件

vim frpc.ini 如下:

[common] # common字段下的三项即为服务端的设置
server_addr = x.x.x.x # 服务端IP地址,填入即可
server_port = 7000 # 服务器端口,填入你设置的端口号即可,如果未改变就是7000
token = won517574356 # 在服务器上设置的连接口令,原样填入即可

# rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下:
# “[xxx]”表示一个规则名称,自己定义,便于查询即可。
# “type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
# “local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
# “remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
[rdp] # RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
type = tcp
local_ip = 127.0.0.1          
local_port = 3389
remote_port = 7001  
[smb] # SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002

实际使用时,会按照端口号进行对应的转发,原理如下图:
在这里插入图片描述

配置完成frpc.ini后,就可./frpc -c frpc.ini 启动frpc了,windows 可用 bat 脚本在后台运行,之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。至于开机启动,把这个 .bat 文件直接扔进Windows的开机启动文件夹即可。bat 脚本如下:

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp # 将cd后的路径更改为你的frpc实际存放的目录
frpc -c frpc.ini
exit

正常日志如下:

2023/01/01 16:14:56 [I] [service.go:205] login to server success, get run id [2b65b4e58a5917ac], server udp port [0]
2023/01/01 16:14:56 [I] [proxy_manager.go:136] [2b65b4e58a5917ac] proxy added: [rdp smb]
2023/01/01 16:14:56 [I] [control.go:143] [smb] start proxy success
2023/01/01 16:14:56 [I] [control.go:143] [rdp] start proxy success

强烈建议你在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。

此时可以在局域网外用相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端口为自定义的remote_port)即可访问到相应服务

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

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

相关文章

力扣 -- 139. 单词拆分

一、题目 题目链接:139. 单词拆分 - 力扣(LeetCode) 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:bool wordBreak(str…

学生管理系统(升级版)

import java.util.ArrayList; import java.util.Random; import java.util.Scanner;public class Demo_学生管理系统 {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();Scanner sc new Scanner(System.in);while (true) {Syste…

Transformer1.0-预热

一.Encoder encoder:译为编码器&#xff0c;负责将输入序列压缩成指定长度的向量&#xff0c;这个向量就可以堪称是这个序列的语义。然后可进行编码或特征提取等操作 在transformer中encoder由6个相同的层组成&#xff0c;每个层包含 Multi-Head Self-AttentionPosition-Wise …

SEO 链接建设:初学者指南 2023

链接在互联网上扮演着一种宝贵的角色&#xff0c;就像货币一样重要。当其他网页纷纷指向某个网页时&#xff0c;这个网页就会被视为很有"权威"&#xff0c;在搜索引擎&#xff08;比如谷歌&#xff09;中获得更高的排名。相反地&#xff0c;如果一个网页没有别的网页…

linuxARM裸机学习笔记(6)----UART串口通信和串口格式化函数移植实验

UART串口通信 协议介绍&#xff1a;串口通信协议_ft232和ch340是串口的哪种协议_夜路难行々的博客-CSDN博客 I.MX6U UART UART时钟源选择的是pll3_80m&#xff0c;然后在(bit5:0)设置分频值&#xff0c;设置为1分频 ADBR(bit14) &#xff1a;自动波特率检测使能位&#xff0c…

个人信息保护合规审计管理办法的发展方向

8月3日&#xff0c;为指导、规范个人信息保护合规审计活动&#xff0c;中央网信办就《个人信息保护合规审计管理办法》及配套的《个人信息保护合规审计参考要点》公开征求意见 个人信息保护合规审计参考要点 第一条 本要点依据《中华人民共和国个人信息保护法》等法律、行政法…

基于Spring Boot的在线视频教育培训网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的在线视频教育培训网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

zabbix触发器标签提取监控项子字符串实现对应告警恢复

0 实验环境 zabbix 6.0 1 监控项 1.1 监控项设置 通过zabbix agent自定义监控项&#xff0c;读取某文件内容模拟日志/trap告警&#xff0c;测试获取触发器标签中提取子字符串功能&#xff0c;以及相同标签的触发器自动恢复功能。 1.2 手工运行 手动触发之后&#xff0c;模…

嵌入式开发学习(STC51-17-DAC数模转换)

内容 使DAC(PWM)模块上的指示灯DA1呈呼吸灯效果&#xff0c;由暗变亮再由亮变暗&#xff1b; DAC介绍 简介 DAC&#xff08;Digital to analog converter&#xff09;即数字模拟转换器&#xff0c;它可以将数字信号转换为模拟信号&#xff0c;它的功能与ADC相反&#xff1b…

【Java设计模式】建造者模式 注解@Builder

概念 将一个复杂对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象&#xff0c;然后一步步构建而成。 每一个具体建造者都相对独立&#xff0c;而与其它的具体建造者无关&#xff0c;因此可以很方便地替换具…

【HDFS】每天一个RPC系列----complete(二):客户端侧

上图给出了最终会调用到complete RPC的客户端侧方法链路(除去Router那条线了)。 org.apache.hadoop.hdfs.DFSOutputStream#completeFile(org.apache.hadoop.hdfs.protocol.ExtendedBlock): 下面这个方法在complete rpc返回true之前,会进行重试,直到超过最大重试次数抛异…

解决Element Plus中Select在El Dialog里层级过低的问题(修改select选项框样式)

Element Plus是Vue.js的一套基于Element UI的组件库&#xff0c;提供了丰富的组件用于构建现代化的Web应用程序。其中&#xff0c;<el-select>是一个常用的下拉选择器组件&#xff0c;但在某些情况下&#xff0c;当<el-select>组件嵌套在<el-dialog>&#xf…

Python web实战之Django的文件上传和处理详解

概要 关键词&#xff1a;Python Web开发、Django、文件上传、文件处理 今天分享一下Django的文件上传和处理。 1. 上传文件的基本原理 在开始深入讲解Django的文件上传和处理之前&#xff0c;先了解一下文件上传的基本原理。当用户选择要上传的文件后&#xff0c;该文件会被发…

Oracle-ORA-00600:[ktspffbmb:objdchk_kcbnew_3]

问题背景: 应用执行存储过程报错ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4], [], [], [], [], [], [], [], []&#xff0c;导致过程无法正常执行 ORA-00600: 内部错误代码, 参数: [ktspffbmb:objdchk_kcbnew_3], [0], [3303775], [4]…

关联字典表查询记录

字典表 也可以case gender when xxx then xxx when xxx then xxx end 别名 注意前面case别忘了 重新编辑了下 字典表 key value更加合理点吧 嘿嘿

【计算机视觉】关于图像处理的一些基本操作

目录 图像平滑滤波处理均值滤波计算过程python实现 高斯滤波计算过程python实现 中值滤波计算过程python实现 图像的边缘检测Robert算子计算过程python实现 图像处理腐蚀算子计算过程python实现 Hog&#xff08;梯度方向直方图&#xff09;特征计算流程&#xff1a;Hog的特征维…

数据库操作系列-Mysql, Postgres常用sql语句总结

文章目录 1.如果我想要写一句sql语句&#xff0c;实现 如果存在则更新&#xff0c;否则就插入新数据&#xff0c;如何解决&#xff1f;MySQL数据库实现方案: ON DUPLICATE KEY UPDATE写法 Postgres数据库实现方案:方案1&#xff1a;方案2&#xff1a;关于更新&#xff1a;如何实…

【项目多人协作的困扰】git-cli 解决 git merge 合并时 lock 文件变化,忘记重新安装依赖的问题

项目多人协作的困扰 相信大家多多少少都遇到过&#xff0c;当主线分支的代码&#xff0c;合入到自己的分支的时候&#xff0c;如果这时候&#xff0c;主线中有一些依赖的更新或者添加或者删除&#xff0c;如果合入之后&#xff0c;没有及时的install的话&#xff0c;项目启动的…

力扣 -- 467. 环绕字符串中唯一的子字符串

一、题目 二、解题步骤 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:int findSubstringInWraproundString(string s) {int ns.size();vector<int> dp(n,1);int re…

diffusion model(六)Dalle2技术小结

Dalle2 技术小结 文章目录 Dalle2 技术小结系列阅读背景Dalle2的总体架构DiffusionPrior模块训练阶段推理阶段 DiffusionDecode 模块 Dalle2的生成质量和目前的局限性Dalle2的生成效果基于MS-COCO caption生成效果Other Dalle2的局限性 参考文献 系列阅读 diffusion model&…