Beijing, China: ☀️ 🌡️+28°C 🌬️↙11km/h

写在前面

🚀应用场景: 最近使用校园网搭建应用服务,但是其他人无法通过公网访问,因此需要将局域网的服务通过 frp 转发到公网端口 🌐,构建公共服务应用,这里我用的是阿里云的轻量应用服务器。

💡简介: frp1 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。🎃 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性。

🔍 基本原理: frp 主要由两个组件组成:客户端(frpc)服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。🔄 由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

服务端配置

服务端安装

# 从GitHub下载frp源文件
wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.60.0_linux_amd64.tar.gz

# 进入解压文件夹
cd frp_0.60.0_linux_amd64

编辑frps.toml文件vim frps.toml

[common]
# frp 监听端口,默认7000,可改为其它
bind_port = 7000

# 授权令牌,请改为更复杂的代码,客户端稍后将使用此令牌
token = "123456"

# frp 管理仪表板端口,根据需要更改
dashboard_port = 7500

# frp 管理仪表板用户名,密码
dashboard_user = "admin"
dashboard_pwd = "password"

# Prometheus服务能自动发现并监控节点或者更新节点,动态的进行数据采集和处理
enable_prometheus = true

# frp 日志配置
log_file = "/var/log/frps.log"
log_level = "info"
log_max_days = 6

服务端启用

在 Linux 系统下,使用  systemd  可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。建议安装:

  1. 安装 systemd
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
  1. 创建 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
  1. 使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps

# 停止frp
sudo systemctl stop frps

# 重启frp
sudo systemctl restart frps

# 查看frp状态
sudo systemctl status frps

# 设置开机自启动
sudo systemctl enable frps

验证服务端是否启动

  1. 运行 systemctl status frps,服务端开启后状态如下: 202408201727240.png 注意:这里需在阿里云控制台防火墙开启端口 7000 和 7500,及客户端端口
  2. 访问:http://服务器 IP:后台管理端口”,输入用户名和密码可以查看连接状态
    如:http://68.240.124.4:7500/,用户名和密码分别对应 frps.toml 文件中的adminpassword,登录之后界面如下: 202408201719234.png

客户端配置 (Windows)

客户端安转

Windows 平台直接下载Release v0.60.0 即可,解压后编辑frpc.toml文件:

[common]
server_addr = "68.240.124.4"
server_port = 7000 # 服务器映射端口
authentication_method = "token"
token = "123456"

[llama-chat]
type = "tcp"
local_ip = "127.0.0.1"
local_port = 5000 # 本地服务端口
remote_port = 20002 # 公网映射转发端口

客户端开启

  1. 进入控制面板,需要出站、入站规则中设置开启对应的 5000 端口: 202408201913679.png
  2. 运行frpc -c frpc.toml开启 frp 服务,访问http://68.240.124.4:20002即可进入应用页面:

补充说明

  1. 关于 SSH 服务: 有时候需要运行 sudo net start sshd开启 SSH 服务,但我本地测试发现即使不运行该命令,frp 服务也能正常启用;
  2. 本地关联服务: 对于像数据库这样的本地服务(例如 MySQL,本地直接运行sudo net start mysql即可),一旦主服务已经通过 frp 关联,就不需要再单独开启 frp 了。

参考文献