之前写过使用旧版本的FRP进行内网穿透,由于FRP更新后配置文件做了更改,故再写一篇新版本的以作备份。

本文主要实现新版本FRP内网穿透并实现日志保存及注册为Windows系统服务。


FRP配置

1. 客户端配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frpc.toml - 客户端配置文件

# 服务端的公网 IP 地址或域名
serverAddr = "xxx.xxx.xxx.xxx"
# 与服务端 frps.toml 中的 bindPort 保持一致
serverPort = 7000

# 身份验证配置,必须与服务端保持一致
auth.method = "token"
auth.token = "密码"

# 定义一个 HTTP 代理,将内网的 Web 服务暴露出去
[[proxies]]
name = "web1"
type = "tcp"
# 内网 Web 服务的本地 IP
localIP = "127.0.0.1"
# 内网 Web 服务的本地端口
localPort = 12345
# 访问公网服务时使用的自定义域名
# customDomains = ["xxx.xxx.com"]
# 在服务端开放的远程端口
remotePort = 5000
# 如果不使用自定义域名,需要将客户端配置中的代理类型从 http 改为 tcp,并注释掉 customDomains 配置项,同时指定一个 remotePort

# 定义一个 TCP 代理,例如用于 SSH 远程访问
[[proxies]]
name = "my_ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# 在服务端开放的远程端口,通过这个端口访问内网 SSH
remotePort = 6000

# 定义一个安全的 STCP 代理,不占用服务端公网端口
[[proxies]]
name = "secret-ssh"
type = "stcp"
# 只有拥有相同 secretKey 的访问者才能连接
secretKey = "密码"
localIP = "127.0.0.1"
localPort = 22

2. 服务端配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# frps.toml - 服务端配置文件

# 服务端监听地址,接收客户端连接
bindAddr = "0.0.0.0"
# 服务端与客户端通信的端口
bindPort = 7000

# HTTP 类型代理监听的端口,用于将内网的 Web 服务暴露到公网
# vhostHTTPPort = 80
# HTTPS 类型代理监听的端口
# vhostHTTPSPort = 443

# 配置允许使用的端口 - 可以指定单个端口,也可以指定端口范围
allowPorts = [
# { start = 2000, end = 3000 }, # 允许 2000 到 3000 之间的所有端口
# { start = 8000, end = 10000 }, # 允许 8000 到 10000 之间的所有端口
{ single = 5000 }, # 允许单个端口 5000
{ single = 6000 }, # 允许单个端口 6000
{ single = 7000 } # 允许单个端口 7000
]

# 身份验证配置
auth.method = "token"
# 请替换为你自己的强密码
auth.token = "密码"

# Web 控制面板配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "用户名"
webServer.password = "密码"

# 日志配置
log.level = "info"
log.to = "/XX/log/frps.log"
log.maxDays = 3

将FRP注册为Windows系统服务

1. 准备工作

  1. **下载 WinSW**:
    • 前往 WinSWGitHub发布页,下载最新版本的二进制文件WinSW-x64.exe
    • 将其重命名为 winsw.exe,并放置在 frp目录下。
  2. 确认 Frp文件
    • 确保 frpc.exe 和配置文件(frpc.toml)在同一目录下。

2. 配置 WinSW

winsw.exe 同目录下,创建一个与 .exe 同名的 .xml 配置文件。

将以下内容复制到 winsw.xml 中,并根据实际路径进行修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<service>
<!-- 服务的唯一标识 -->
<id>frpc-client</id>
<!-- 服务显示名称 -->
<name>FRP Client Service</name>
<!-- 服务描述 -->
<description>FRP内网穿透客户端服务</description>

<!-- 指定 frpc 的绝对路径 -->
<executable>D:XX\XX\frp\frpc.exe</executable>

<!-- 指定配置文件的绝对路径 -->
<arguments>-c D:XX\XX\frp\frpc.toml</arguments>

<!-- 日志配置:将日志输出到指定目录 -->
<!-- 这里的 %BASE% 代表 winsw.exe 所在的目录 -->
<log mode="roll">
<path>%BASE%\logs</path>
<!-- 也可以指定具体文件名,或者让 WinSW 自动按日期滚动 -->
</log>

<!-- 失败自动重启配置 -->
<!-- 10S自动重启 -->
<onfailure action="restart" delay="10 sec"/>
</service>

参数说明:

  • <executable>: 必须填写 frpc.exe绝对路径(如 C:\frp\frpc.exe),不要使用相对路径。
  • <arguments>: 填写启动参数,通常是 -c 加上配置文件的绝对路径
  • <log>: <path> 标签内指定日志目录。使用 %BASE%\logs 会在 frp目录下创建一个 logs 文件夹来存放日志。

3. 安装并启动服务

  1. 打开管理员终端

    • frp 目录的空白处按住 Shift 键并点击鼠标右键,选择“在此处打开 Powershell 窗口”。
  2. 执行安装命令

    • 输入以下命令并回车:

      1
      .\winsw.exe install
      • 如果提示“安装成功”,说明服务已注册到 Windows系统中。
  3. 启动服务

    • 继续输入命令启动服务:

      1
      .\winsw.exe start

4. 验证运行

  1. 检查服务状态
    • Win + R,输入 services.msc 打开服务管理器。
    • 找到名为 FRP Client Service 的服务,查看其状态是否为 “正在运行”,启动类型是否为 “自动”
  2. 检查日志
    • 前往在 .xml 中配置的日志目录,应该能看到生成的 .log 日志文件,里面记录了 frp的运行情况。

5. 停止并卸载任务

输入命令停止服务:

1
.\winsw.exe stop

输入命令停止服务:

1
.\winsw.exe uninstall