1288 字
6 分钟
frp内网穿透
🤖AI 摘要

文章介绍 frp 内网穿透相关内容:

  1. 前提准备:需一台公网服务器(支持 TCP 端口开放)、一台内网设备(以 Windows 为例),并从官网https://github.com/fatedier/frp/releases下载 FRP 工具。

  2. 术语科普:frps 是服务端运行在公网服务器;frpc 是客户端运行在内网设备;frps.toml(老版 frps.ini)为服务端配置文件;frpc.toml(老版 frpc.ini)为客户端配置文件。

  3. 配置服务端

    • 方案 1(宝塔面板 docker):在 docker 搜索并安装 frp 第一个服务端。
    • 方案 2(手动):在公网服务器解压下载文件,创建并编辑 frps.toml 配置文件,设置绑定端口、仪表盘端口等;启动 frps,或设置成 systemd 服务。
  4. 配置客户端:解压并编辑 frpc.toml,按模板覆盖内容,设置公网地址、token 等;可通过不同方式查看服务端 token。注意服务端防火墙需释放所需端口。

  5. 连接测试:配置完成后可用远程桌面连接测试。

  6. 拓展 - Nextcloud 内网穿透:介绍通过 Docker Compose 安装 Nextcloud,包括创建项目文件夹、编写 docker - compose.yml、启动服务、访问安装向导;若外网访问失败,可进入容器通过php occ config:system:set trusted_domains命令设置域名解决。

FRP(Fast Reverse Proxy)这是一个超级实用的工具,适合在内网环境中将服务暴露给公网访问,例如在家访问你电脑上的网站、SSH、远程桌面什么的。

一、前提准备#

  1. 一台公网服务器(支持TCP端口开放)

    比如腾讯云、阿里云、vultr、搬瓦工等。

  2. 一台内网设备(要被穿透的那台)

    例如你家里的电脑(这里以Windows 为例)

  3. 下载 FRP 工具

    官网:https://github.com/fatedier/frp/releases

二、术语科普#

  • frps:服务端(运行在公网服务器)
  • frpc:客户端(运行在内网设备)
  • frps.toml(老版:frps.ini):服务端配置文件
  • frpc.toml(老版:frpc.ini):客户端配置文件

三、配置服务端(公网服务器)#

方案 1(宝塔面板 docker )#

可直接在 docker 里面搜索frp,安装第一个服务端

方案 2(手动)#

第一步:解压并创建配置文件#

在公网服务器上:

wget https://github.com/fatedier/frp/releases/download/v0.62.0/frp_0.62.0_linux_amd64.tar.gz
tar -zxvf frp_0.62.0_linux_amd64.tar.gz
cd frp_0.62.0_linux_amd64

编辑 frps.toml:

[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

第二步:启动 frps#

./frps -c ./frps.toml

或者设置成 systemd 服务。

四、配置客户端(内网设备)#

第一步:解压并编辑 frpc.toml(老版:frpc.inl)#

将下面配置模板覆盖到frpc.toml 里面#

注意把serverAddr设置成你的公网地址,token要改成你的

# ============ 公共配置 =============
serverAddr = "xxx.xxx.xxx.xxx" # frps 公网地址
serverPort = 7000 # frps 监听端口
[auth]
token = "uf08a7sfhaof0q8evn" # 与 frps 保持一致的 token
# ============ SSH 远程登录穿透 =============
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000 # 公网通过 6000 端口访问 SSH
# ============ Nextcloud 网盘穿透 =============
[[proxies]]
name = "nextcloud"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 6003 # 公网通过6003 访问 Nextcloud
# ============ HTTP 网站穿透(带域名) =============
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["xxx.xxx.xxx"] # 把这个域名解析到你 frps 的 IP
# ============ HTTPS 网站穿透(带域名) =============
[[proxies]]
name = "web-ssl"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["xxx.xxx.xxx"] # 同样解析到服务器 IP
# ============ Windows 远程桌面穿透(RDP) =============
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6002 # 公网通过 6002 端口访问远程桌面

查看服务端token#

方案 1(宝塔面板 docker )#

查看docker容器

docker ps

找到你的frps 容器(frps开头的),进入

docker exec -it frps_yt3p-frps_Yt3P-1 /bin/sh

(如果 /bin/sh 不行就试 /bin/bash)

查看token配置

cat /etc/frp/frps.toml

cat /etc/frp/frps.ini

Bonus:如果你想修改 token

  1. 直接在容器里 vi /etc/frp/frps.ini 修改

  2. 然后重启容器:

    docker restart frps_yt3p-frps_Yt3P-1

方案2#

如果不是docker安装的话,找到安装路径执行

cat /frps.toml

注意#

服务端可有防火墙,需要先将需要的端口释放才能访问

宝塔面板为例

连接测试#

至此已经连接成功,可再找一台电脑用远程桌面连接测试

拓展#

Nextcloud 内网穿透#

安装 Nextcloud(Docker Compose 方式)#

1. 创建项目文件夹#

mkdir nextcloud-docker
cd nextcloud-docker

2. 创建#

docker-compose.yml#

在这个文件夹中新建一个 docker-compose.yml 文件,写入以下内容:

version: '3'
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=example
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
environment:
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
volumes:
db:
nextcloud:

3. 启动服务#

运行以下命令启动:

docker-compose up -d

4. 访问网页安装向导#

打开浏览器访问:

http://localhost:8080

完成后就可以使用啦!

不过这时候如果用上面配置的外网访问,大概率会访问失败

解决步骤

步骤命令
查看容器docker ps
进入容器docker exec -it 容器ID bash
设置域名php occ config:system trusted_domains 1 —value=你的域名或IP

例子

可以设置多个

php occ config:system:set trusted_domains 1 --value=你的域名或IP1
php occ config:system:set trusted_domains 2 --value=你的域名或IP2
php occ config:system:set trusted_domains 3 --value=你的域名或IP3

设置成功后即可访问,无需重启

frp内网穿透
https://fuwari.vercel.app/posts/nat/frp内网穿透/
作者
Ke.ke
发布于
2025-06-10
许可协议
CC BY-NC-SA 4.0