1. 下载 frp Github Releases
根据对应架构选择文件,Linux 可以通过 uname -a
命令查看。下载的文件以实际版本为准。例如在本文中:
服务器是 x86_64 架构:下载 frp_0.58.1_linux_amd64.tar.gz
客户端是 aarch64 架构:下载 frp_0.58.1_linux_arm64.tar.gz
2. 启动服务端 1 2 3 4 5 6 7 8 9 10 tar xzvf frp_0.58.1_linux_amd64.tar.gz cd frp_0.58.1_linux_amd64cat frps.toml./frps -c frps.toml
输出内容如下:
1 2 3 2024-06-21 17:31:49.861 [I] [frps/root.go:105] frps uses config file: frps.toml 2024-06-21 17:31:49.935 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000 2024-06-21 17:31:49.935 [I] [frps/root.go:114] frps started successfully
** 如果使用的是云服务器,还需要在安全组开放 frp 服务端口 **
至此,frp 服务端启动完成。
3. 启动本地服务(可选)
此步骤启动了一个用于测试的本地服务,如果你的本地服务已经启动,可以跳过。
首先启动要映射到公网的服务,此处使用 Python 启动了一个简单的 Web 服务,运行在内网服务器的 12345 端口:
1 python3 -m http.server 12345
4. 启动客户端 1 2 3 4 5 6 tar xzvf frp_0.58.1_linux_arm64.tar.gz cd frp_0.58.1_linux_arm64vi frpc.toml
文件内容如下:
1 2 3 4 5 6 7 8 9 serverAddr = "123.123.123.123" serverPort = 7000 [[proxies]] name = "test-tcp" type = "tcp" localIP = "127.0.0.1" localPort = 19999 remotePort = 6000
文件内容说明:
serverAddr:服务器地址,即第 2 步中启动了 frp 服务端的服务器地址
serverPort:服务器端口,即第 2 步中启动了 frp 服务端的服务器端口
name:客户端代理名称,可以自定义
type:代理类型,此处为 tcp
localIP:本地服务地址
localPort:本地服务端口,即第 3 步中启动的本地服务的端口
remotePort:映射到公网的端口,此处为 6000,映射完成后可以通过 123.123.123.123:6000
访问到本地服务
** 如果使用的是云服务器,还需要在安全组开放 frp 客户端端口 **
更多配置可以参考:配置文件
配置文件修改完成后,使用如下命令启动客户端
输出内容如下:
1 2 3 4 5 2024-06-21 17:45:36.127 [I] [sub/root.go:142] start frpc service for config file [frpc.toml] 2024-06-21 17:45:36.128 [I] [client/service.go:294] try to connect to server... 2024-06-21 17:45:36.252 [I] [client/service.go:286] [23400a3005b9864b] login to server success, get run id [23400a3005b9864b] 2024-06-21 17:45:36.252 [I] [proxy/proxy_manager.go:173] [23400a3005b9864b] proxy added: [test-tcp] 2024-06-21 17:45:36.301 [I] [client/control.go:168] [23400a3005b9864b] [test-tcp] start proxy success
5. 测试 通过 123.123.123.123:6000
可以访问到本地服务
6. 身份认证 为了确保安全,强烈建议为 frp 配置身份认证。目前 frp 支持 Token 和 OIDC 两种认证方式,本文使用 Token 方式配置:
6.1. 修改服务端配置 1 2 3 vi frps.toml auth.token = "your_token"
6.2. 修改客户端配置 1 2 3 vi frpc.toml auth.token = "your_token"
6.3. 重新启动服务 1 2 3 4 ./frps -c frps.toml ./frpc -c frpc.toml
如果客户端配置的 Token 不正确,则启动失败报错:
1 2 3 4 5 6 2024-06-21 17:52:19.453 [I] [sub/root.go:142] start frpc service for config file [frpc.toml] 2024-06-21 17:52:19.454 [I] [client/service.go:294] try to connect to server... 2024-06-21 17:52:19.577 [E] [client/service.go:279] token in login doesn't match token from configuration 2024-06-21 17:52:19.578 [W] [client/service.go:297] connect to server error: token in login doesn't match token from configuration 2024-06-21 17:52:19.578 [I] [sub/root.go:160] frpc service for config file [frpc.toml] stopped login to the server failed: token in login doesn't match token from configuration. With loginFailExit enabled, no additional retries will be attempted
此时服务端也会输出日志:
1 2 2024-06-21 17:52:19.539 [I] [server/service.go:576] [ba3229df1d1f803f] client login info: ip [116.116.116.116:53964] version [0.58.1] hostname [] os [linux] arch [arm64] 2024-06-21 17:52:19.539 [W] [server/service.go:446] register control error: token in login doesn't match token from configuration
至此,frp 身份认证配置完成
7. 使用 systemd 管理 frp 服务 每次手动启动,或者使用 nohup 等方式启动 frp 比较麻烦,可以使用 systemd 管理 frp 服务。
服务端 1 vi /etc/systemd/system/frps.service
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 [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 服务
1 2 3 4 5 6 7 8 9 10 sudo systemctl start frps sudo systemctl stop frps sudo systemctl restart frps sudo systemctl status frps sudo systemctl enable frps
客户端 1 vi /etc/systemd/system/frpc.service
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] # 服务名称,可自定义 Description = frp client After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /path/to/frpc -c /path/to/frpc.toml [Install] WantedBy = multi-user.target
保存后,可以使用 systemd 命令管理 frpc 服务
1 2 3 4 5 6 7 8 9 10 sudo systemctl start frpc sudo systemctl stop frpc sudo systemctl restart frpc sudo systemctl status frpc sudo systemctl enable frpc
References