今日热门-什么值得买好文 ( ) • 2024-04-17 13:33

本文首发于只抄博客,欢迎点击原文链接了解更多内容。

前言

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

通过 frp 内网穿透 实现公网访问内网服务

与 Tailscale、ZeroTier 之类的异地组网工具不同,frp 是把内网的服务穿透在公网上,让所有人都可以访问。因此,部署 frp 的前提是有一台具有公网 IP服务器

下载

首先,我们需要去 Github 的下载最新版本的 frp,根据自身的系统以及架构下载正确的版本,常见有 amd64、arm64 等,下载时注意区分。下载完成后,分为 frps 与 frpc 文件,其中 frps 为服务端,用于具有公网 IP 的服务器;frpc 为客户端,用于内网服务器,而对应 toml 文件则是其配置文件。

从 v0.52.0 版本开始,frp 支持 toml, yaml, json 作为配置文件,ini 将被废弃

服务端

基本配置

  1. 将 frps 文件上传至 /opt/frp 目录,并添加运行权限 chmod +x frps

  2. 创建一个配置文件 vim /opt/frp/frps.yaml

    • bindPort: frp 服务端监听端口

    • token: 用于验证客户端

    • webServer: frp 面板配置

    • 更多配置项可以查看官方文档 - 服务端配置

bindPort: 7000 auth: token: password webServer: addr: 0.0.0.0 port: 7500 user: admin password: password

  1. 通过 ./frps -c ./frps.yaml 运行,输出以下内容就代表运行成功

2024-04-16 19:00:08.773 [I] [frps/root.go:105] frps uses config file: ./frps.yaml 2024-04-16 19:00:09.022 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000 2024-04-16 19:00:09.022 [I] [frps/root.go:114] frps started successfully 2024-04-16 19:00:09.023 [I] [server/service.go:350] dashboard listen on 0.0.0.0:7500

  1. 访问 7500 端口,就可以进入 frp 面板了

通过 frp 内网穿透 实现公网访问内网服务
  1. 服务端完成以上配置即可,具体穿透的端口只需要在客户端配置

后台运行

  1. 通过 ./frps -c ./frps.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行

  2. 创建 /etc/systemd/system/frps.service 文件,用于描述 frps 服务的配置

[Unit] Description=frps service After=network.target NetworkManager.service systemd-networkd.service iwd.service ​ [Service] Type=simple Restart=always ExecStart=/opt/frp/frps -c /opt/frp/frps.yaml ​ [Install] WantedBy=multi-user.target

  1. 启动 frps 服务

systemctl enable frps systemctl start frps

客户端

基本配置

  1. 将 frpc 文件上传至 /opt/frp 目录,并添加运行权限 chmod +x frpc

  2. 创建一个配置文件 vim /opt/frp/frpc.yaml

    • serverAddr: 服务器的公网 IP

    • serverPort: 服务器 frp 端口

    • token: 与 frps.yaml 保持一致

    • proxies: 需要穿透的服务,以 AList 为例

    • 更多配置项可以查看官方文档 - 客户端配置

serverAddr: x.x.x.x serverPort: 7000 auth: token: password proxies: - name: AList type: tcp localPort: 5244 remotePort: 5244

  1. 通过 ./frpc -c ./frpc.yaml 运行,输出以下内容就代表运行成功

2024-04-16 19:13:44.111 [I] [sub/root.go:142] start frpc service for config file [./frpc.yaml] 2024-04-16 19:13:44.112 [I] [client/service.go:294] try to connect to server... 2024-04-16 19:13:44.549 [I] [client/service.go:286] [b997b2af10c6f8dd] login to server success, get run id [b997b2af10c6f8dd] 2024-04-16 19:13:44.551 [I] [proxy/proxy_manager.go:173] [b997b2af10c6f8dd] proxy added: [AList] 2024-04-16 19:13:44.693 [I] [client/control.go:170] [b997b2af10c6f8dd] [AList] start proxy success

  1. 再次打开 frp 面板,就可以看到,Client Counts 变为 1

通过 frp 内网穿透 实现公网访问内网服务
  1. 点击左侧的 Proxies -> TCP,还可以看到具体的每一项,此时,访问服务器的 5244 端口,就可以直接打开 AList

通过 frp 内网穿透 实现公网访问内网服务

后台运行

  1. 通过 ./frpc -c ./frpc.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行

  2. 创建 /etc/systemd/system/frpc.service 文件,用于描述 frpc 服务的配置

[Unit] Description=frpc service After=network.target NetworkManager.service systemd-networkd.service iwd.service ​ [Service] Type=simple Restart=always ExecStart=/opt/frp/frpc -c /opt/frp/frpc.yaml ​ [Install] WantedBy=multi-user.target

  1. 启动 frpc 服务

systemctl enable frpc systemctl start frpc