Skip to content

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

前言

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

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

下载

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

WARNING

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

服务端

基本配置

  1. 将 frps 文件上传至 /opt/frp 目录,并添加运行权限 chmod +x frps
  2. 创建一个配置文件 vim /opt/frp/frps.yaml
yaml
bindPort: 7000 
auth:
  token: password
webServer:
  addr: 0.0.0.0
  port: 7500
  user: admin
  password: password
  1. 通过 ./frps -c ./frps.yaml 运行,输出以下内容就代表运行成功
txt
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 面板了

frp1

  1. 服务端完成以上配置即可,具体穿透的端口只需要在客户端配置

后台运行

  1. 通过 ./frps -c ./frps.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行
  2. 创建 /etc/systemd/system/frps.service 文件,用于描述 frps 服务的配置
ini
[Unit]
Description=frps service
After=network-online.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 服务
bash
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 为例
    • 更多配置项可以查看官方文档 - 客户端配置
yaml
serverAddr: x.x.x.x
serverPort: 7000
auth:
  token: password
proxies:
  - name: AList
    type: tcp
    localPort: 5244
    remotePort: 5244
  1. 通过 ./frpc -c ./frpc.yaml 运行,输出以下内容就代表运行成功
txt
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

frp2

  1. 点击左侧的 Proxies -> TCP,还可以看到具体的每一项,此时,访问服务器的 5244 端口,就可以直接打开 AList

frp3

后台运行

  1. 通过 ./frpc -c ./frpc.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行
  2. 创建 /etc/systemd/system/frpc.service 文件,用于描述 frpc 服务的配置
ini
[Unit]
Description=frpc service
After=network-online.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 服务
bash
systemctl enable frpc
systemctl start frpc
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0

预览:

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3