frp搭建内网穿透服务-续

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
# frps.toml 服务端
bindPort = 7000
auth.token = "abc"
1
2
# frpc.tom 客户端
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
# 启动frpc的命令,需修改为您的frpc的安装路径
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
# 启动frp
sudo systemctl start frpc
# 停止frp
sudo systemctl stop frpc
# 重启frp
sudo systemctl restart frpc
# 查看frp状态
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
systemctl restart frps

然后我们就可以在程序目录中找到生成的日志文件。日志输出大概如下:

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
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"

打开游览器通过http://[server addr]:7500,访问dashboard界面,输入配置的用户名和密码。

验证结果:

frps_dashboard_overview

我们已经可以通过web端查看frp服务端的信息。

客户端的Dashboard

客户端也一样,我们同样在frpc.toml中指定服务使用的端口,即可开启此功能。

frpc_dashboard

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


frp搭建内网穿透服务-续
https://ywmy.xyz/2025/01/01/frp搭建内网穿透服务-续/
作者
ian
发布于
2025年1月1日
许可协议