使用 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 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
准备工作
- 一台服务器
- 服务器的配置看个人需求,建议购买国外 VPS ,可以减少备案和带宽限制的麻烦
- Vultr 注册购买:SSD VPS Servers, Cloud Servers and Cloud Hosting - Vultr.com
- SSH 连接工具(可选)
- 现在很多服务器厂商都支持 WEB 端访问,不过建议安装必要的工具,因为这样操作比较方便(不针对小白)
- FinalShell 下载:FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网
- 域名(可选)
- 建议准备好一个域名,它满足市面上 99% 搭建场景,放在哪里都是合适的
- 域名购买地址:Cheap Domain Names & Web Hosting Starting at $0.99! | NameSilo
- 反向代理工具(可选)
- 全称 Nginx Proxy Manager,用于通过简单而强大的界面管理 Nginx 代理主机
- 官方文档:Nginx Proxy Manager
快速安装
使用源码文件方式安装
- 服务端 frps
- 查看系统架构
uname -a
# 或
arch
- 下载对应系统的软件包并解压
GitHub:Releases · fatedier/frp
- 修改或更新
frps.ini
- 启动服务
./frpc -c ./frpc.ini
注意:不同的系统,命令方式可能存在差异,所以一定要找对对应的系统
使用 Docker 方式安装
- 服务端 frps
下面以 CentOS 系统为例
- 环境搭建
- 在系统任意位置创建一个文件夹,此文档以
/opt/docker/frps
为例
mkdir -p /opt/docker/frps && cd /opt/docker/frps
mkdir -p ./{conf,data,logs}
注意:后续操作中,产生的所有数据都会保存在这个目录,请妥善保存
- 在
conf
目录下创建frps.ini
touch conf/frps.ini
# frps.ini
[common]
# frp 监听端口,与客户端绑定端口
bind_port= 5443
kcp_bind_port = 5443
# dashboard 用户名和密码
dashboard_user= username
dashboard_pwd= password
# dashboard 端口,启动成功后可通过浏览器访问如http://ip:9527
dashboard_port= 9527
# 设置客户端 token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端
token = 8ad3d1x429a2d
- 创建
docker-compose.yml
version: '3.3'
services:
frps:
restart: always
network_mode: host
volumes:
- './conf/frps.ini:/etc/frp/frps.ini'
container_name: frps
image: snowdreamtech/frps
- 启动容器
docker-compose up -d
- 客户端 frpc
一般客户端会安装在 window、macOS、nas 等一些在局域网中使用的设备
下面是使用命令行方式,仅作为参考示例
- 环境搭建
- 在系统任意位置创建一个文件夹,此文档以
/opt/docker/frpc
为例
mkdir -p /opt/docker/frpc && cd /opt/docker/frpc
mkdir -p ./{conf,data,logs}
- 在
conf
目录下创建frps.ini
# frpc.ini
[common]
# 服务端IP
server_addr = 108.166.202.212
server_port = 5443
token = 8ad3d1x429a2d
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 222
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6000
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 8092
remote_port = 6001
[NAS]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 6003
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 5900
use_encryption = true
use_compression = true
- 创建
docker-compose.yml
version: '3.3'
services:
frpc:
restart: always
network_mode: host
volumes:
- './conf/frpc.ini:/etc/frp/frpc.ini'
container_name: frpc
image: snowdreamtech/frpc
- 启动容器
docker-com pose up -d
资源下载
官方文档: gofrp
镜像地址:snowdreamtech/frpc - Docker Image | Docker Hub