Date:2023-10-23

Auth:晴风

FRP

项目地址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

官方文档地址:frp/README_zh.md at dev · fatedier/frp · GitHub

前置工作

需求
  • 公网服务器(服务端)
  • 域名(可选)
  • 内网服务器,能正常连接到公网服务器(客户端)
下载

根据服务端与客户端类型下载,Releases · fatedier/frp · GitHub,本次部署为linux和openwrt,下载liunx版本即可

经实测,0.52版后与本次搭建的客户端0.51.3存在兼容性问题(token错误),此次下载0.51.3版

FRPS搭建

服务端搭建在公网服务器,本次使用系统为Debian11

安装配置
# 创建项目路径
mkdir -p /opt/origin/frp

# 上传下载的程序到项目路径
mv frp_0.51.3_linux_amd64.tar.gz /opt/origin/frp/

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

# 创建软连接,方便进行版本管理
ln -snf /opt/origin/frp/frp_0.51.3_linux_amd64 /opt/start/frp

# 服务端配置文件
# cd /opt/start/frp && vim frps.toml # 具体内容参考下文或者官方文档
cd /opt/start/frp && vim frps.ini # 具体内容参考下文或者官方文档

# 根据实际情况,需要防火墙放行端口,还需要在vps服务商处放行
ufw allow 7777 # frps服务端口
ufw allow 3389 # 本次主要需求是代理远程桌面
ufw reload

# 前台启动服务端,用于客户端调试
# ./frps -c ./frps.toml
./frps -c ./frps.ini

# 创建systemd服务
vim /lib/systemd/system/frps.service # 根据实际情况配置ExecStart,具体内容参考下文

# 启动&查看&停止服务
systemctl start frps
systemctl status frps
systemctl stop frps
frps.toml
# 通用
bindPort = 7777
tls_enable = false
disable_custom_tls_first_byte = false

# 日志
log_file = "./frps.log"
log_level = "info"
log_max_days = 10

# 鉴权
authentication_method = "token"
token = "xxxxxxxx"
frps.ini
[common]
# 服务端口
bind_port = 7777
# 鉴权
token = xxxxxxxx

# 日志
log_file = /opt/start/frp/frps.log
log_level = info
log_max_days = 10 
frps.service
[Unit]                                                                               
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/opt/start/frp/frps -c /opt/start/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

FRPC搭建

与被代理机器在同一局域网内,或者是被代理机器本身也行,此次客户端使用的是

OpenWRT,其它服务端类似的,官方文档有很多示例

在OpenWRT中使用FRPC

安装

若固件未预装frpc,在软件包处安装luci-i18n-frpc-zh-cn即可,会自动安装依赖包

使用

有UI界面,根据frps的配置填写即可,较为简单,这里略过

配置好并启用之后直接使用服务端的ip或域名连接被代理的机器

优化

开启kcp

  1. 服务端防火墙放行kcp对应端口udp协议,在frps配置文件中加入kcp端口绑定,重启frps
  2. 在客户端配置中启用kcp,重启frpc
frps.ini
[common]
# 服务端口
bind_port = 7777
# kcp服务端口
kcp_bind_port = 7777
# 鉴权
token = xxxxxxxx

# 日志
log_file = /opt/start/frp/frps.log
log_level = info
log_max_days = 10 

开启远程桌面udp

  1. 确认frps宿主机防火墙放行3389端口的tcp、udp协议,vps服务商的防火墙也要同步放行
  2. frpc中原始的3389/tcp的代理无需变更,在frpc中新增一项代理:3389/udp
  3. 两项代理均开启,重启frpc,重新连接远程桌面,查看是否已启用udp