内网穿透神器-frp的概念,搭建和使用,方便访问内网服务

FRP概念

FRP是什么(借助官网的描述)?

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

为什么是用FRP(借助官网的描述)?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
  • 采用 TCP连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
  • 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp客户端完成某些工作。
  • 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

代理

FRP的安装

下载

访问:https://github.com/fatedier/frp/releases
也可以通过如下命令来看:

shell 复制代码
[root@VM-0-15-centos ~]# arch
x86_64

下载之后上传至公网服务器:

解压:

bash 复制代码
tar -zxf frp_0.51.3_linux_amd64.tar.gz
text 复制代码
frpc:客户端可执行程序
frpc_full.ini:客户端所有配置项(可以在此文件查看frp的所有的配置项)
frpc.ini:客户端配置项
frps:服务端可执行程序
frps_full.ini:服务端所有配置项(可以在此文件查看frp的所有的配置项)
frps.ini:服务端配置项

配置并启动服务端

编辑配置文件:frps.ini

bash 复制代码
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的,这个token之后在客户端会用到
token = e10adc3949ba59abbe56e057f20f883e
# 开启HTTP
#vhost_http_port = 8088
# 去除TCP速度限制
tcp_mux = false

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin123456
enable_prometheus = true

# frp日志配置
log_file = /home/frp/frp/frps.log
log_level = info
log_max_days = 3

然后启动服务端:

bash 复制代码
./frps -c frps.ini  # 启动服务端
 nohup ./frps -c frps.ini & # 后台启动

切记一定将云服务器防火墙对应的端口打开。

然后访问FRP后台:http://云服务器IP:管理后台端口

配置客户端

一样的方式,下载对应系统版本的客户端。这个地方以ubuntu的ssh服务为例演示。

然后解压:

编辑frpc.ini

bash 复制代码
[common]
server_addr = 47.xxx.xxx.xxx  # 服务端所在的公网ip地址
server_port = 7000  # 服务端默认端口号,与服务端配置文件保持一致
token = e10adc3949ba59abbe56e057f20f883e
# 去掉速度限制
tcp_mux = false

[ssh]
type = tcp # 注意:这个地方一律填写tcp
local_ip = 192.168.1.211  # 所在内网服务器的ip地址
local_port = 22 # 本地访问端口号
remote_port = 8088 # 映射到云服务器的端口号
use_compression = true
use_encryption = true

[rdp]
type = tcp # 注意:这个地方一律填写tcp
local_ip = 192.168.1.211  # rdp所在内网服务器的ip地址
local_port = 3389 # 本地访问端口号
remote_port = 8081 # 映射到云服务器的端口号

然后启动客户端:

bash 复制代码
./frpc -c frpc.ini # 启动客户端
nohup ./frpc -c frpc.ini & # 后台启动客户端

然后观察frp后台:

直接:ssh 用户名@云服务器ip -p 映射的端口

即可访问内网的SSH服务。

注意配置/etc/ssh/sshd_config

将PermitRootLogin 改为yes

去掉PasswordAuthentication yes前的#

相关推荐
花姐夫Jun12 分钟前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
运维&陈同学18 分钟前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
地球资源数据云21 分钟前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
不惑_28 分钟前
List 集合安全操作指南:避免 ConcurrentModificationException 与提升性能
数据结构·安全·list
是店小二呀29 分钟前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化
baihb10241 小时前
Jenkins 构建流水线
运维·jenkins
BUG 4041 小时前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea1 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
深海的鲸同学 luvi1 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
dowhileprogramming2 小时前
Python 中的迭代器
linux·数据库·python