准备
首先从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明。
接着:
- 解压下载的压缩包。
- 将
frpc复制到内网服务所在的机器上。 - 将
frps复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。
frpc部署
我这里将frpc文件的相关文件保存在了:/usr/local/frpc文件夹中。
创建 frps.service 文件
使用文本编辑器 (如 nano) 在
/etc/systemd/system目录下创建一个frpc.service文件,用于配置 frpc 服务。nano /etc/systemd/system/frpc.service写入内容
[Unit] # 服务名称,可自定义 Description = frpc Wants=network-online.target After=network.target network-online.target Requires=network-online.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /usr/local/frpc/frpc -c /usr/local/frpc/frpc.toml ExecStop=/bin/kill $MAINPID Restart=always RestartSec=30 StartLimitInterval=0 [Install] WantedBy = multi-user.target使用 systemd 命令管理 frpc 服务
# 启动frp systemctl start frpc # 停止frp systemctl stop frpc # 重启frp systemctl restart frpc # 查看frp状态 systemctl status frpc设置 frpc 开机自启动
systemctl enable frpc- 配置frpc.toml,以下是frpc.toml的详细配置参考,包含常见的各种type服务类型:
服务器连接配置
# frp服务端的地址,可以是IP或域名
serverAddr = "frps.example.com"
# frp服务端的监听端口
serverPort = 7000
# 鉴权方式,通常为token
auth.method = "token"
# 与服务端一致的鉴权token
auth.token = "your_token"
# 客户端的唯一标识,避免与其他用户重复
user = "your_username" HTTP服务配置
[[proxies]]
name = "web_http" # 代理名称,需唯一
type = "http" # 代理类型为HTTP
localIP = "192.168.1.100" # 本地服务的IP地址
localPort = 80 # 本地服务的端口号
# 自定义域名,可解析到frps服务器的域名或IP
customDomains = ["yourdomain.com"]
# 可选,访问服务时的用户名密码认证
httpUser = "admin"
httpPwd = "password"HTTPS服务配置
[[proxies]]
name = "web_https"
type = "https"
localIP = "192.168.1.100"
localPort = 443
customDomains = ["yourdomain.com"]
# HTTPS服务的证书文件路径,若使用frps的TLS需正确配置
certificatePath = "/path/to/your/certificate.crt"
privateKeyPath = "/path/to/your/private.key"TCP服务配置
[[proxies]]
name = "ssh_tcp"
type = "tcp"
localIP = "192.168.1.100"
localPort = 22
# 映射到frps服务器的远程端口,可通过该端口访问本地服务
remotePort = 6000 UDP服务配置
[[proxies]]
name = "dns_udp"
type = "udp"
localIP = "192.168.1.100"
localPort = 53
# 若不指定remotePort,则由frps自动分配
remotePort = 8000多个服务复用一个域名的HTTP配置
[[proxies]]
name = "web1_http"
type = "http"
localIP = "192.168.1.101"
localPort = 80
# 使用path来区分不同的服务
locations = ["/web1/*"]
customDomains = ["yourdomain.com"]
[[proxies]]
name = "web2_http"
type = "http"
localIP = "192.168.1.102"
localPort = 80
locations = ["/web2/*"]
customDomains = ["yourdomain.com"]STCP(内网穿透到特定IP和端口)服务配置
[[proxies]]
name = "stcp_example"
type = "stcp"
localIP = "192.168.1.100"
localPort = 3306
# 指定frps服务器上用于监听该服务的端口和IP
remoteAddr = "127.0.0.1:6001"XTCP(增强型内网穿透)服务配置
[[proxies]]
name = "xtcp_example"
type = "xtcp"
localIP = "192.168.1.100"
localPort = 5500
# frps服务器上用于监听的端口
remotePort = 7000
# 可选,设置该选项后,客户端连接到frps的地址必须为frps服务器的地址
bindAddr = "frps.example.com"PCDN(内容分发网络)服务配置
[[proxies]]
name = "pcdn_example"
type = "pcdn"
localIP = "192.168.1.100"
localPort = 8080
# 自定义域名,客户端通过该域名访问服务
customDomains = ["pcdn.yourdomain.com"]
# 指定客户端访问服务时的协议,可为http或https
protocol = "http"
# 可选,设置为true时,frpc会定期向frps发送心跳包,保持连接活跃
heartbeat = trueSocks5代理服务配置
[[proxies]]
name = "socks5_example"
type = "socks5"
localIP = "127.0.0.1"
localPort = 1080
# 映射到frps服务器的远程端口
remotePort = 8080
# 可选,设置用户名密码认证
socks5User = "user"
socks5Pwd = "password"其他通用配置项
# 全局代理的其他配置文件包含路径
includes = ["./other_config/*.toml"]
# 客户端的元数据,可用于服务端的访问控制等
metadatas.var1 = "abc"
metadatas.var2 = "123"
# 是否启用TLS加密,若服务端支持TLS可启用以加密传输数据
tls.enable = true
tls.certFile = "/path/to/client_cert.crt"
tls.keyFile = "/path/to/client_key.key"
# 日志配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 3
# 健康检查配置
healthCheck.type = "tcp" # 或http
healthCheck.timeoutSeconds = 3
healthCheck.maxFailed = 3
healthCheck.intervalSeconds = 10
# 带宽限制配置
transport.bandwidthLimit = "1MB" # 限制代理的带宽
transport.bandwidthLimitMode = "client" # 限制带宽的位置
# 加密与压缩配置
transport.useEncryption = false
transport.useCompression = false
# TCPmux配置
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 60