【内网映射】frps实现内网映射

embedded/2024/10/15 20:07:09/
http://www.w3.org/2000/svg" style="display: none;">

1. 简介

在当今互联网时代,远程访问内网资源已成为一种常见需求。无论是在家访问办公室的电脑,还是远程管理家庭NAS,内网映射都是一种强大的解决方案。
本文将详细介绍如何使用frp(Fast Reverse Proxy)来实现这一目标。

1.1 frp

frp是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,将NAT或防火墙后的本地服务器暴露到互联网。它支持TCP、UDP、HTTP、HTTPS等多种协议,使用起来非常灵活。

1.2 frp的主要组件

frp主要由两部分组成:
frps (服务端): 运行在具有公网IP的服务器上
frpc (客户端): 运行在您想要暴露到公网的内网机器上

内网映射的概念和用途:内网映射允许您将内网服务器的端口映射到公网IP的特定端口上,使得外网用户可以通过访问公网IP和端口来访问内网服务

2.准备工作

2.1软件下载

访问frp的GitHub发布页面: https://github.com/fatedier/frp/releases
根据您的操作系统下载适合的版本
解压下载的文件,您会看到frps和frpc两个可执行文件
下载后的操作步骤

Windows:

创建目录:C:\frp
使用内置的解压工具或7-Zip等软件,将文件解压到 C:\frp 目录下

Linux/macOS:

创建目录:

python">sudo mkdir /usr/local/frp

解压文件到该目录:

python">sudo tar -zxvf frp_x.xx.x_linux_amd64.tar.gz -C /usr/local/frp

设置适当的权限:

python">sudo chown -R $(whoami):$(whoami) /usr/local/frp

解压后,在您指定的目录(如 C:\frp 或 /usr/local/frp)中,您会看到以下文件:
frps: 服务端程序(用于公网服务器)
frpc: 客户端程序(用于内网设备)
frps.ini: 服务端配置文件模板
frpc.ini: 客户端配置文件模板
frps_full.ini 和 frpc_full.ini: 包含所有可能配置项的完整配置文件
配置服务端(公网服务器)

3.开始配置

3.1 ssh请求配置

配置完即可通过客户端ssh连接到服务端

进入 frp 目录:

python">Windows: cd C:\frp
Linux/macOS: cd /usr/local/frp

编辑 frps.ini 文件:

python">[common]
bind_port = 7000
token = your_secure_token

将 frps 和 frps.ini 上传到您的公网服务器的相应目录(如 /usr/local/frp/)

配置客户端(内网设备)
进入 frp 目录:

python">Windows: cd C:\frp
Linux/macOS: cd /usr/local/frp

编辑 frpc.ini 文件:

python">[common]
server_addr = your_server_public_ip
server_port = 7000
token = your_secure_token[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

确保 frpc 和 frpc.ini 保存在您的内网设备上的指定目录中

启动服务
在公网服务器上启动 frps:

python">cd /usr/local/frp
./frps -c frps.ini

在内网设备上启动 frpc:

Windows:

python">cd C:\frp
frpc.exe -c frpc.ini

Linux/macOS:

python">cd /usr/local/frp
./frpc -c frpc.ini

http_116">3.2 http请求配置

3.2.1 服务端配置(frps)

编辑 frps.ini 文件,添加 HTTP 服务的端口:

python">[common]
bind_port = 7000
vhost_http_port = 80
token = your_secure_token

这里的 vhost_http_port 是用于接收 HTTP 请求的端口,通常设置为 80。

如果您的服务器已经有 Web 服务占用了 80 端口,可以选择其他端口,如 8080:

python">vhost_http_port = 8080

3.2.2客户端配置(frpc)

编辑 frpc.ini 文件,添加 HTTP 服务的配置:

python">[common]
server_addr = your_server_public_ip
server_port = 7000
token = your_secure_token[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = yourdomain.com

type = http: 指定这是一个 HTTP 服务。
local_ip 和 local_port: 指向您本地的 Web 服务地址和端口。
custom_domains: 指定要使用的域名,这个域名应该解析到您的公网服务器 IP。

如果您想要通过子域名访问,可以这样配置:

python">[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test

启动服务

在公网服务器上启动 frps:

python">./frps -c frps.ini

在内网设备上启动 frpc:

python">./frpc -c frpc.ini

访问测试
配置完成后,您应该能够通过 http://yourdomain.com 或 http://test.yourdomain.com 来访问您的内网 Web 服务了。
这样就配置完成。

下一篇博客会讲完成之后如何测试是否联通,以及一些debug方法。


http://www.ppmy.cn/embedded/128048.html

相关文章

(AtCoder Beginner Contest 375) 题解(下)

一、题解 第 E 题 3 Team Division 一眼看像背包,观察数据范围,合法的总能力值 ≤ 500 \le 500 ≤500,那么我们可以设计一个背包DP: int dp[110][510][510]; //dp[i][j][k] 表示前 i 个人,分给第一组的能力值是 j&…

使用Python抓取并分析外汇汇率数据

使用Python抓取并分析外汇汇率数据 在当今全球化的经济环境中,了解不同货币之间的汇率是非常重要的。对于个人投资者、旅行者以及企业来说,准确及时的汇率信息可以帮助他们做出更加明智的决策。本文将介绍如何使用Python编程语言来从网络上获取最新的外…

Unity游戏通用框架——UI的管理和加载

需求:为了方便UI的管理,编写一个管理类,管理所有UI的加载、隐藏或销魂,每个UI都继承自一个UIWindow类,存放在Resource的指定目录下,通过UIManager进行管理。每个继承自UIWindow的UI天然有UI的打开关闭等基本…

Python 无法安装pybluez 解决办法

直接使用 pip install pybluez 安装会报错 那么可以尝试手动安装 先下载 pybluez-0.30的包: CSDN: https://download.csdn.net/download/rotion135/89884852 Github:https://github.com/pybluez/pybluez 先安装依赖 sudo apt-get install …

Kafka之生产者

本章内容将整理下Kafka体系结构中的生产者相关的一些知识。 1. 生产者客户端 生产者客户端在Kafka的发展历程当中一共有两个重大版本: 一个是基于Scala语言开发的版本,称为Old Producer或Scala版的生产者客户端。一个是Kafka0.9.x版本之后以Java语言开发…

【微服务】微服务注册:构建灵活的服务管理机制

目录 引言一、什么是微服务注册?1.1 服务注册中心的作用1.2 服务注册中心的工作原理1.3 示意图 二、常见的微服务注册中心2.1 各注册中心详细对比 三、微服务注册的实现方式3.1 Spring Cloud Netflix Eureka3.2 Consul3.3 Zookeeper3.4 etcd 四、微服务注册的注意事…

JavaScript 入门

1. HTML、CSS、JavaScript 之间的关系 HTML:网页的结构(骨) CSS:网页的表现(皮) JavaScript:网页的行为(魂) 2. 引入方式 3种引入方式,语法如下&#xff…

【Unity - 屏幕截图】技术要点

在Unity中想要实现全屏截图或者截取某个对象区域的图片都是可以通过下面的函数进行截取 Texture2D/// <summary>/// <para>Reads the pixels from the current render target (the screen, or a RenderTexture), and writes them to the texture.</para>/…