通过 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 将被废弃
服务端
基本配置
- 将 frps 文件上传至
/opt/frp
目录,并添加运行权限chmod +x frps
- 创建一个配置文件
vim /opt/frp/frps.yaml
- bindPort: frp 服务端监听端口
- token: 用于验证客户端
- webServer: frp 面板配置
- 更多配置项可以查看官方文档 - 服务端配置
yaml
bindPort: 7000
auth:
token: password
webServer:
addr: 0.0.0.0
port: 7500
user: admin
password: password
- 通过
./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
- 访问 7500 端口,就可以进入 frp 面板了
- 服务端完成以上配置即可,具体穿透的端口只需要在客户端配置
后台运行
- 通过
./frps -c ./frps.yaml
运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行 - 创建
/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
- 启动 frps 服务
bash
systemctl enable frps
systemctl start frps
客户端
基本配置
- 将 frpc 文件上传至
/opt/frp
目录,并添加运行权限chmod +x frpc
- 创建一个配置文件
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
- 通过
./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
- 再次打开 frp 面板,就可以看到,Client Counts 变为 1
- 点击左侧的 Proxies -> TCP,还可以看到具体的每一项,此时,访问服务器的 5244 端口,就可以直接打开 AList
后台运行
- 通过
./frpc -c ./frpc.yaml
运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行 - 创建
/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
- 启动 frpc 服务
bash
systemctl enable frpc
systemctl start frpc
预览: