























FRP(Fast Reverse Proxy)是一款开源的高性能内网穿透工具,它允许你将内网服务器暴露到公网,实现外部访问。FRP 的工作原理是通过在内网和外网各部署一个代理服务,使得外部请求能够通过外网代理转发到内网服务,从而解决了内网环境下的访问问题。
在实际应用中,我们常常需要从外部访问位于内网中的应用或服务或者是云服务器太贵,刚好有自己本地的虚拟机,可以将本地虚拟机的内网IP暴露在公网IP进行访问,如远程管理内网服务器、访问开发环境、测试应用等。然而,由于内网环境通常是封闭的,且受限于 NAT(网络地址转换)或防火墙,直接访问这些内网服务是不可行的。
内网穿透技术能够解决这些问题,通过在公网和内网之间建立一个中介服务,使得内网中的服务能够被安全、可靠地访问。这对于开发者、运维人员及需要远程访问的用户来说是非常重要的。
客户端 ( frpc ) 和 服务端 ( frps )。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。
Frp 是一款在 Github 上非常热门的项目,使用 Golang 语言开发,目前已经有 82k 的 star 数,社区也很活跃。
https://github.com/fatedier/frp/releases

:::info[准备工作]
:::info[环境]
#frp镜像:
#配置
首先来云服务器安装服务端,服务端需要在具有公网 IP 的设备上进行安装,我目前的云服务器是装了 CentOS 7.6 64bit 系统。(是linux系统就好)
安装步骤详情查看ruyu-blog部署详细教程)中的1.1.安装Docker和1.1.1安装 Docker Engine(遇到选择一路按y回车)
填写frp服务端配置信息,这里会启动两个端口号
7000:用于和内网设备数据交互;
7500:提供 frp 图形化界面,同时需要配置面板访问的账号和密码,以及 token 是内网设备和 frp 服务端建立连接时的密码。
bash
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
# 登录面板的密码
dashboard_pwd = 123456
# 身份验证,随便填写无要求
token = 123456使用下面 docker 命令,下载我们的 frp 服务端。其中,这里使用到了蘑菇的阿里云镜像仓库地址,官方的镜像地址因为被墙的原因,可能很多小伙伴目前无法访问了。
bash
docker run --restart=always --network host -d -v /root/frps.ini:/etc/frp/frps.ini --name frps registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps:::tip[提示] 细心的小伙伴,可能会发现:命令行中使用了 --network host 定网络模式为 host 模式。
众所周知,Docker 使用了 Linux 的 Namespaces 技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable 规则等都与其他的 Network Namespace 隔离。
如果使用 host 模式时,容器中的应用都直接绑定在宿主机的端口上,没有经过 NAT 转换,但容器的其他如文件系统等还是隔离的。 :::
bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12c1f6d8df8e registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps "/bin/sh -c '/usr/bi…" 40 hours ago Up 40 hours frps
同时,frp 还提供了图形化的界面,我们使用 http://your_ip:7500 即可打开对应的图形化界面。输入上面配置文件中,配置的账号和密码登录即可。

如果能看到下面的页面,说明就我们的服务端就安装成功了

客户端需要在我们的内网的机器上进行安装,打开内网机器之前,先使用 SSH 工具进行连接。
bash
[common]
# 云服务器的IP地址,FRP客户端连接到此地址
server_addr = [填写云服务器的IP地址]
# 服务端监听的端口,FRP客户端将连接此端口
server_port = 7000
# 服务端设置的token,用于客户端与服务端之间的身份验证
token = [填写云服务器的token,比如123456]
[ruyu-blog-qt]
# 代理的类型,这里是TCP代理
type = tcp
# 本地应用的IP地址,FRP客户端会从这里转发流量
local_ip = 127.0.0.1
# 本地应用的端口,FRP客户端会将请求转发到这个端口
local_port = 80
# 远程服务器上对应的端口,外部访问此端口时流量会被转发到本地的local_ip:local_port
remote_port = 8082
[ruyu-blog-ht]
# 代理的类型,这里是TCP代理
type = tcp
# 本地应用的IP地址,FRP客户端会从这里转发流量
local_ip = 127.0.0.1
# 本地应用的端口,FRP客户端会将请求转发到这个端口
local_port = 81
# 远程服务器上对应的端口,外部访问此端口时流量会被转发到本地的local_ip:local_port
remote_port = 8083
[ruyu-hitokoto]
# 代理的类型,这里是TCP代理
type = tcp
# 本地应用的IP地址,这里是一个内网地址,FRP客户端会从这里转发流量
local_ip = 192.168.80.128
# 本地应用的端口,FRP客户端会将请求转发到这个端口
local_port = 8000
# 远程服务器上对应的端口,外部访问此端口时流量会被转发到本地的local_ip:local_port
remote_port = 8084
[ruyu-minio]
# 代理的类型,这里是TCP代理
type = tcp
# 本地应用的IP地址,这里是一个内网地址,FRP客户端会从这里转发流量
local_ip = 192.168.80.128
# 本地应用的端口,FRP客户端会将请求转发到这个端口
local_port = 9000
# 远程服务器上对应的端口,外部访问此端口时流量会被转发到本地的local_ip:local_port
remote_port = 9000配置完成后,依次执行下面命令下载客户端的 docker 镜像,并加载上面的配置文件,启动 frp 的客户端。
bash
# 运行 FRP 客户端的 Docker 容器
docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc
我们再打开 frp 的图形化界面,选中:Proxies → TCP,可以看到这几个端口都已经注册上来了


访问公网 IP 的8083端口,即可看到本地虚拟机部署的页面。http://IP:8083/

首先在内网客户端使用Xftp 7远程连接,进入 /root/frps.ini文件路径双击打开,并找到需要删除的代理项,然后保存退出。
bash
[nginx-test]
type = http
local_port = 80
remote_port = 8080
...
[ruyu-blog]
type = tcp
local_port = 81
remote_port = 8081
...
[ssh]
type = tcp
local_port = 22
remote_port = 8022
...为了使配置更改生效,您需要在云服务器重启 FRP 服务端。如果您是在 Docker 中运行的 FRP 服务端,可以使用以下命令。
验证代理项已删除

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。