Docker搭建一款高性能的FRP内网穿透技术

文摘   2024-10-07 08:00   广东  
系统介绍
内网穿透(NAT穿透)技术使得处于局域网(内网)中的设备或服务可以被外部网络访问。由于局域网设备通常使用私有IP地址,这些地址在互联网上是不可路由的,因此需要内网穿透技术来实现外部访问。FRP(Fast Reverse Proxy)是一个专注于内网穿透的高性能的反向代理应用,可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。

基本原理

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即可。

安装客户端
客户端以Windows为例,在GitHub下载相应版本并解压,然后修改配置文件frpc.ini。
[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
在解压后的目录创建Windows启动bat文件frp_client.bat,文件代码如下
frpc.exe -c frpc.ini
运行bat文件后,在其他电脑使用数据库连接工具输入服务器公网IP和端口6000即可连接客户端的数据库。
除此之外,客户端还可以使用docker搭建,指令如下:
docker run --restart=always --network host -itd \
-v /home/docker/frp/frpc.ini:/etc/frp/frpc.ini \
--name frpc snowdreamtech/frpc
关注公众号,为你推荐更多原创干货!

更多内容也可看笔者出版图书

—————————

幼稚猿
分享各类技术资讯和教程,出版多本IT图书《Django+Vue系统架构设计与实现》、《Golang+Vue.js商城项目实战》等
 最新文章