frp 搭建内网穿透服务续
frp简单、高效的内网穿透工具。
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
我们继续搭建frp服务,在搭建frp服务时,可以注意到,我们只使用了一个开放的7000端口,客户端满足网络和端口连通即可连接frp服务器,所以这个对于服务器而言,我们还缺少鉴权的操作。从frp的特性,我们也知道,还有http服务,以及其它的协议支持。所以继续frp其它协议相关的实践。
身份认证
目前 frpc 和 frps 之间支持两种身份验证方式,token 和 oidc,默认为 token。这些认证方式允许您验证客户端与服务端之间的通信,并确保只有授权用户能够建立连接。
** Token **
Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。
** 配置示例 **
1 2 3
| bindPort = 7000 auth.token = "abc"
|
配置文件中加入鉴权配置之后,我们启动frpc客户端程序,通过认证密码连接到服务器。
1 2 3 4 5 6
| ~/frp_0.61.1_linux_amd64$ ./frpc -c ./frpc.toml 2025-01-01 18:58:44.809 [I] [sub/root.go:142] start frpc service for config file [./frpc.toml] 2025-01-01 18:58:44.809 [I] [client/service.go:295] try to connect to server... 2025-01-01 18:58:44.916 [I] [client/service.go:287] [8c4f292f082b7fb8] login to server success, get run id [8c4f292f082b7fb8] 2025-01-01 18:58:44.917 [I] [proxy/proxy_manager.go:173] [8c4f292f082b7fb8] proxy added: [ubuntu-ssh-tcp] 2025-01-01 18:58:44.953 [I] [client/control.go:168] [8c4f292f082b7fb8] [ubuntu-ssh-tcp] start proxy success
|
linux客户端配置
在之前的实践中,我们使用windows作为内网穿透代理,在linux这个更好实现,搭建和服务端一样。把frpc程序和frpc.toml配置文件放置任意目录,创建一个system服务。
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
ExecStart = /path/to/frpc -c /path/to/frpc.toml
[Install] WantedBy = multi-user.target
|
更新创建的服务
1
| sudo systemctl daemon-reload
|
使用systemd命令管理frpc服务,接下来就熟悉了,比起windows注册服务要简单得多。
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
|
日志配置
日志可以帮助我们了解frp服务状态,我们也可以通过日志排除程序运行中出现的错误。
Field |
Type |
Description |
Required |
to |
string |
日志输出文件路径,如果为 console,则会将日志打印在标准输出中。 |
No |
level |
string |
日志级别,可选值为 trace, debug, info, warn, error,默认级别为 info。 |
No |
maxDays |
int |
日志文件最多保留天数,默认为 3 天。 |
No |
disablePrintColor |
bool |
禁用标准输出中的日志颜色。 |
No |
以上参考配置,我们可以直接在服务端的配置文件中添加以上参数。
1 2 3 4
| log.to = "/path/to/frps_dir/frps.log" log.level = "info" log.maxDays = 3
|
添加完配置文件后,我们需要重新启动一下服务:
然后我们就可以在程序目录中找到生成的日志文件。日志输出大概如下:
1 2 3 4 5 6 7 8 9 10 11
| tail -10f ./frps.log 2025-01-01 18:58:52.964 [I] [server/dashboard_api.go:107] Http request: [/api/serverinfo] 2025-01-01 18:58:52.964 [I] [server/dashboard_api.go:100] Http response [/api/serverinfo]: code [200] 2025-01-01 18:58:59.885 [I] [server/dashboard_api.go:227] Http request: [/api/proxy/tcp] 2025-01-01 18:58:59.885 [I] [server/dashboard_api.go:221] Http response [/api/proxy/tcp]: code [200] 2025-01-01 19:01:42.585 [I] [proxy/proxy.go:115] [8c4f292f082b7fb8] [ubuntu-ssh-tcp] proxy closing 2025-01-01 19:01:42.585 [W] [proxy/proxy.go:201] [8c4f292f082b7fb8] [ubuntu-ssh-tcp] listener is closed: accept tcp [::]:6100: use of closed network connection 2025-01-01 19:01:42.585 [I] [server/control.go:357] [8c4f292f082b7fb8] client exit success 2025-01-01 19:05:40.069 [I] [server/service.go:576] [c008afd520c62f3c] client login info: ip [112.10.252.242:24770] version [0.61.1] hostname [] os [linux] arch [amd64] 2025-01-01 19:05:40.105 [I] [proxy/tcp.go:82] [c008afd520c62f3c] [ubuntu-ssh-tcp] tcp proxy listen port [6100] 2025-01-01 19:05:40.105 [I] [server/control.go:399] [c008afd520c62f3c] new proxy [ubuntu-ssh-tcp] type [tcp] success
|
以上日志可以看到http服务和ubuntu ssh proxy连接的状态。
同理,客户端也一样,我们在frpc.toml中添加日志配置,也可以看到客户端的日志信息。补充一个验证配置文件的操作,在我们重启服务之前,可以验证一下配置文件参数是否正确,以实现需要的特性。
1 2 3
| ./frpc verify -c ./frpc.toml frpc: the configuration file ./frpc.toml syntax is ok
|
web界面
目前 frpc 和 frps 分别内置了相应的 Web 界面方便用户使用。
服务器端的Dashboard
服务端Dashboard使用户可以通过游览器查看frp的状态以及代理统计信息。
需要在frps.toml中指定dashboard服务使用的端口,即可开启此功能:
1 2 3 4 5 6
| webServer.addr = "0.0.0.0" webServer.port = 7500
webServer.user = "admin" webServer.password = "admin"
|
打开游览器通过http://[server addr]:7500,访问dashboard界面,输入配置的用户名和密码。
验证结果:

我们已经可以通过web端查看frp服务端的信息。
客户端的Dashboard
客户端也一样,我们同样在frpc.toml中指定服务使用的端口,即可开启此功能。

客户端的dashboard可以直接更新配置参数。