文章介绍 frp 内网穿透相关内容:
-
前提准备:需一台公网服务器(支持 TCP 端口开放)、一台内网设备(以 Windows 为例),并从官网https://github.com/fatedier/frp/releases下载 FRP 工具。
-
术语科普:frps 是服务端运行在公网服务器;frpc 是客户端运行在内网设备;frps.toml(老版 frps.ini)为服务端配置文件;frpc.toml(老版 frpc.ini)为客户端配置文件。
-
配置服务端
:
- 方案 1(宝塔面板 docker):在 docker 搜索并安装 frp 第一个服务端。
- 方案 2(手动):在公网服务器解压下载文件,创建并编辑 frps.toml 配置文件,设置绑定端口、仪表盘端口等;启动 frps,或设置成 systemd 服务。
-
配置客户端:解压并编辑 frpc.toml,按模板覆盖内容,设置公网地址、token 等;可通过不同方式查看服务端 token。注意服务端防火墙需释放所需端口。
-
连接测试:配置完成后可用远程桌面连接测试。
-
拓展 - Nextcloud 内网穿透:介绍通过 Docker Compose 安装 Nextcloud,包括创建项目文件夹、编写 docker - compose.yml、启动服务、访问安装向导;若外网访问失败,可进入容器通过
php occ config:system:set trusted_domains
命令设置域名解决。
FRP(Fast Reverse Proxy)这是一个超级实用的工具,适合在内网环境中将服务暴露给公网访问,例如在家访问你电脑上的网站、SSH、远程桌面什么的。
一、前提准备
-
一台公网服务器(支持TCP端口开放)
比如腾讯云、阿里云、vultr、搬瓦工等。
-
一台内网设备(要被穿透的那台)
例如你家里的电脑(这里以Windows 为例)
-
下载 FRP 工具
二、术语科普
- 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.gztar -zxvf frp_0.62.0_linux_amd64.tar.gzcd frp_0.62.0_linux_amd64
编辑 frps.toml:
[common]bind_port = 7000dashboard_port = 7500dashboard_user = admindashboard_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 = 22remotePort = 6000 # 公网通过 6000 端口访问 SSH
# ============ Nextcloud 网盘穿透 =============[[proxies]]name = "nextcloud"type = "tcp"localIP = "127.0.0.1"localPort = 8080remotePort = 6003 # 公网通过6003 访问 Nextcloud# ============ HTTP 网站穿透(带域名) =============[[proxies]]name = "web"type = "http"localIP = "127.0.0.1"localPort = 80customDomains = ["xxx.xxx.xxx"] # 把这个域名解析到你 frps 的 IP
# ============ HTTPS 网站穿透(带域名) =============[[proxies]]name = "web-ssl"type = "https"localIP = "127.0.0.1"localPort = 443customDomains = ["xxx.xxx.xxx"] # 同样解析到服务器 IP
# ============ Windows 远程桌面穿透(RDP) =============[[proxies]]name = "rdp"type = "tcp"localIP = "127.0.0.1"localPort = 3389remotePort = 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
-
直接在容器里 vi /etc/frp/frps.ini 修改
-
然后重启容器:
docker restart frps_yt3p-frps_Yt3P-1
方案2
如果不是docker安装的话,找到安装路径执行
cat /frps.toml
注意
服务端可有防火墙,需要先将需要的端口释放才能访问
宝塔面板为例

连接测试
至此已经连接成功,可再找一台电脑用远程桌面连接测试
拓展
Nextcloud 内网穿透
安装 Nextcloud(Docker Compose 方式)
1. 创建项目文件夹
mkdir nextcloud-dockercd 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 |
例子
可以设置多个
php occ config:system:set trusted_domains 1 --value=你的域名或IP1php occ config:system:set trusted_domains 2 --value=你的域名或IP2php occ config:system:set trusted_domains 3 --value=你的域名或IP3
设置成功后即可访问,无需重启