什么是frp?
frp (Fast Reverse Proxy) 是一个高性能的反向代理应用,可以帮助您轻松实现内网穿透,将内网服务暴露到公网。无论您是想远程访问家里的NAS、监控摄像头,还是需要调试本地开发环境,frp都是绝佳选择。
环境准备
服务器端需求
- 具有公网IP的云服务器(1核1G配置即可)
- Linux系统(推荐CentOS 7+或Ubuntu 18.04+)
- 开放所需端口权限
客户端需求
- 需要暴露服务的内网设备
- Windows/Linux/macOS系统均可
部署步骤
第一步:下载frp
访问 frp GitHub发布页面 下载最新版本。
服务器端操作:
# 下载最新版本(请替换为实际版本号)
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.65.0_linux_amd64.tar.gz
cd frp_0.65.0_linux_amd64
第二步:frps身份认证
目前 frpc 和 frps 之间支持两种身份验证方式,token 和 oidc,默认为 token。这些认证方式允许您验证客户端与服务端之间的通信,并确保只有授权用户能够建立连接。
Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。
# frps.toml
bindPort = 7000
auth.token = "abc"
# frpc.toml
auth.token = "abc"
第三步:通过自定义域名访问内网的 Web 服务
HTTP 类型的代理非常适合将内网的 Web 服务通过自定义域名提供给外部用户。相比于 TCP 类型代理,HTTP 代理不仅可以复用端口,还提供了基于 HTTP 协议的许多功能。
HTTPS 与此类似,但是需要注意,frp 的 https 代理需要本地服务是 HTTPS 服务,frps 端不会做 TLS 终止。也可以结合 https2http 插件来实现将本地的 HTTP 服务以 HTTPS 协议暴露出去。
-
配置 frps.toml
在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:
bindPort = 7000 vhostHTTPPort = 80 vhostHTTPSPort = 443如果需要配置 HTTPS 代理,还需要设置
vhostHTTPSPort。 -
配置 frpc.toml
在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:
serverAddr = "x.x.x.x" serverPort = 7000 [[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["www.yourdomain.com"] [[proxies]] name = "web2" type = "http" localPort = 8080 customDomains = ["www.yourdomain2.com"] -
启动 frps 和 frpc
-
域名解析
将
www.yourdomain.com和www.yourdomain2.com的域名 A 记录解析到服务器的 IP 地址x.x.x.x。如果服务器已经有对应的域名,您还可以将 CNAME 记录解析到原始域名。另外,通过修改 HTTP 请求的 Host 字段也可以实现相同的效果。 -
通过浏览器访问
使用浏览器访问
http://www.yourdomain.com:8080即可访问内网机器上的 80 端口服务,访问http://www.yourdomain2.com:8080可以访问内网机器上的 8080 端口服务。
第四步:管理 frps 服务
在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
以下是具体的操作步骤:
-
安装 systemd
如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如
yum(适用于 CentOS/RHEL)或apt(适用于 Debian/Ubuntu)来安装它:使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd -
创建 frps.service 文件
使用文本编辑器 (如 vim) 在
/etc/systemd/system目录下创建一个frps.service文件,用于配置 frps 服务。sudo vim /etc/systemd/system/frps.service写入内容
[Unit] # 服务名称,可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /path/to/frps -c /path/to/frps.toml [Install] WantedBy = multi-user.target -
使用 systemd 命令管理 frps 服务
启动frp
sudo systemctl start frps停止frp
sudo systemctl stop frps重启frp
sudo systemctl restart frps查看frp状态
sudo systemctl status frps设置 frps 开机自启动
sudo systemctl enable frps