基本原理
FRP内网穿透的基本原理是在内网客户端(frpc)和外网服务器(frps)之间建立一个连接通道。具体过程如下:
在具有公网IP的节点上部署FRP服务端(frps)。
在内网中运行FRP客户端(frpc),启动时会连接到公网上的FRP服务端,并保持长连接(如果断开了会进行重试)。
当外部用户请求内网服务时,FRP服务端会接收请求,并在本地查看是否有可用的连接。
如果没有可用的连接,FRP服务端会将请求转发到FRP客户端。
FRP客户端处理请求后,将响应转发回FRP服务端。
FRP服务端将响应返回给外部用户。
优缺点
优点:
隐藏内网中的服务器,避免因直接暴露内网服务器导致的安全问题。
支持动态端口映射,方便实现内网的服务器负载均衡。
客户端服务端通信支持多种协议,如TCP、QUIC、KCP以及Websocket等。
提供诸多专业的功能特性,如TCP连接流式复用、代理组间的负载均衡、端口复用等。
缺点:
在多端口映射或连接数多的情况下可能会出现不稳定的现象。
需要一台具有公网IP的服务器作为代理服务器。
应用场景
FRP内网穿透技术广泛应用于各种需要远程访问内网服务的场景,如:
远程访问和管理:允许用户从任何地方通过互联网连接到位于其他局域网内的设备或服务器。
游戏娱乐:如邀请朋友加入联机游戏,需要使用内网穿透技术将设备访问权暴露出去。
共享本地服务:实现文件共享、打印机访问或监控摄像头等资源的远程访问。
测试和开发环境:开发人员可以使用内网穿透将本地开发环境暴露给外部世界,方便进行开发和调试。
如需了解更多信息,可以访问其官方网站或查阅相关的技术文档。
Docker镜像-服务端 https://hub.docker.com/r/snowdreamtech/frps
Docker镜像-客户端 https://hub.docker.com/r/snowdreamtech/frpc
GitHub地址 https://github.com/fatedier/frp
客户端下载地址 https://github.com/fatedier/frp/releases
安装教程
安装之前需要一台云服务器并且带公网IP,用于搭建服务端。
Docker部署操作步骤:安装Docker、创建配置文件、编写配置文件、安装服务端、安装客户端。
| 安装docker
sudo apt update
sudo apt install -y docker.io docker-compose
| 创建配置文件
# 创建frp文件
mkdir -p /home/docker/frp && cd /home/docker/frp
# 编辑文件
vim frps.ini
| 编写配置文件
[common]
bind_port = 7000
# 启用面板
dashboard_port = 7500
# 面板登录名和密码
dashboard_user = admin
dashboard_pwd = 123456
# 使用http代理并使用8888端口进行穿透
vhost_http_port = 8888
# 使用https代理并使用9999端口进行穿透
vhost_https_port = 9999
# 日志路径
log_file = ./frps.log
# 日志级别
log_level = info
# 日志最大保存天数
log_max_days = 1
# 认证超时时间
authentication_timeout = 900
# 认证token,客户端需要和此对应
token = 12345678
# 最大连接数
max_pool_count = 15
max_ports_per_client = 0
| 安装服务端
docker run -d \
--restart always \
--network host \
--name frps \
-v /home/docker/frp/frps.ini:/etc/frp/frps.ini \
snowdreamtech/frps
上述指令执行后,在浏览器中访问http://ip:7500即可。
[common]
# 服务端公网ip
server_addr = xxx.xxx.xxx.xxx
# 对应服务端配置 bind_port
server_port = 7000
# 对应服务端配置中的 token
token = 12345678
[mysql]
type = tcp
# 此处不需要改
local_ip = 127.0.0.1
# windows服务器默认的远程端口,如果考虑安全问题,可以修改远程端口,对应再修改此处
local_port = 3306
# local_port映射的远程端口,也就是映射的服务端的端口
remote_port = 6000
frpc.exe -c frpc.ini
docker run --restart=always --network host -itd \
-v /home/docker/frp/frpc.ini:/etc/frp/frpc.ini \
--name frpc snowdreamtech/frpc
更多内容也可看笔者出版图书!