FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,可以实现内网穿透功能。它帮助你将内网的服务暴露到公网,无需公网IP和端口映射,非常适合需要穿透防火墙、NAT的场景。以下是 FRP 内网穿透的配置和设置方法。
### 环境准备
- **FRP 服务端(frps)**:运行在公网服务器上,负责接收内网客户端的请求并转发。
- **FRP 客户端(frpc)**:运行在内网机器上,负责将内网的服务暴露到公网。
你需要一台公网服务器(VPS 或其他有公网 IP 的服务器)来部署 `frps`,以及你想要穿透的内网机器来运行 `frpc`。
### 步骤 1:下载 FRP
首先,去 [FRP GitHub 页面](https://github.com/fatedier/frp)下载适合你操作系统的 FRP 版本。
你可以在 FRP 官网或者 GitHub 页面上找到最新的版本,下载后解压。
### 步骤 2:配置 FRP 服务端(frps)
1. **编辑服务端配置**:在公网服务器上创建 `frps.ini` 文件,配置 FRP 服务端的参数。
```ini
# frps.ini (服务端配置)
[common]
bind_port = 7000 # FRP 服务端监听的端口
bind_udp_port = 7001 # UDP 端口(可选)
vhost_http_port = 8080 # HTTP 协议的虚拟主机端口
vhost_https_port = 443 # HTTPS 协议的虚拟主机端口(可选)
dashboard_port = 7500 # Web Dashboard 的端口(可选)
dashboard_user = admin # Dashboard 用户名
dashboard_pwd = admin # Dashboard 密码
```
- `bind_port`: 服务端监听的端口,客户端通过此端口与服务端通信。
- `vhost_http_port`: FRP 服务端暴露 HTTP 服务的端口。
- `dashboard_port`: 可选的 Web Dashboard 端口,用于监控 FRP 服务状态。
2. **启动 FRP 服务端**:
使用命令启动 `frps` 服务端:
```bash
./frps -c frps.ini
```
此时 FRP 服务端将开始监听并等待客户端连接。
### 步骤 3:配置 FRP 客户端(frpc)
1. **编辑客户端配置**:在内网机器上创建 `frpc.ini` 文件,配置要暴露的服务。```ini
# frpc.ini (客户端配置)
[common]
server_addr = x.x.x.x # 公网服务器 IP 地址
server_port = 7000 # 与服务端配置中的端口一致[web]
type = http
local_ip = 127.0.0.1 # 内网服务的 IP
local_port = 80 # 内网服务的端口
remote_port = 8080 # 映射到公网的端口
```
- `server_addr`: 你公网服务器的 IP 地址。
- `server_port`: 服务器端口,通常是 `7000`,与你在服务端配置中的 `bind_port` 一致。
- `[web]` 部分:表示将本地的 HTTP 服务(80端口)暴露到公网的 8080 端口。
- `local_ip`: 内网服务所在机器的 IP 地址,通常是 `127.0.0.1`。
- `local_port`: 内网服务监听的端口。
- `remote_port`: 公网服务器上暴露的端口。
2. **启动 FRP 客户端**:
使用以下命令启动客户端:
```bash
./frpc -c frpc.ini
```
客户端启动后,将自动连接到 FRP 服务端,并将配置的服务暴露到公网服务器上。
### 步骤 4:访问内网服务
- 通过浏览器访问 `http://<公网IP>:8080`(假设你设置了 8080 端口),就可以访问内网的 HTTP 服务。
### 步骤 5:(可选)使用 Web Dashboard
FRP 提供了一个 Web 界面(Dashboard)来监控和管理连接。你可以在服务端配置中启用 Dashboard,然后通过浏览器访问:
```bash
http://<公网IP>:7500
```
登录使用你在 `frps.ini` 配置文件中设置的用户名和密码。
### 示例配置总结
#### 服务端 `frps.ini`:
```ini
[common]
bind_port = 7000
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
```
#### 客户端 `frpc.ini`:```ini
[common]
server_addr = <公网服务器IP>
server_port = 7000[web]
type = http
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
```
### 注意事项
1. **防火墙设置**:确保服务端的 `7000`、`8080` 端口以及你希望暴露的其他端口没有被防火墙阻塞。
2. **安全性**:可以通过配置 SSL、JWT 或其他认证机制来保护你的 FRP 连接,避免不受信的访问。
3. **持久化运行**:你可以使用 `systemd` 或其他进程管理工具来确保 FRP 客户端和服务端在服务器重启后自动启动。
4. **多端口支持**:FRP 可以暴露多个端口,你可以通过多个 `[section]` 来配置不同的服务。例如,你可以暴露 SSH 服务、数据库服务等。
### 进阶配置
1. **TCP 映射**:
如果你想通过 FRP 映射一个 TCP 服务(比如数据库),你可以配置如下:
```ini
[mysql]type = tcplocal_ip = 127.0.0.1local_port = 3306remote_port = 6000
```
这样,外部可以通过 `公网IP:6000` 访问内网的 MySQL 服务。
2. **UDP 映射**:
FRP 也支持 UDP 映射。配置方式和 TCP 类似:
```ini
[game]type = udplocal_ip = 127.0.0.1local_port = 12345remote_port = 12345
```
### 总结
FRP 是一个非常轻量且功能强大的内网穿透工具,可以帮助你轻松地将内网服务暴露到公网。通过配置服务端和客户端,你可以在几分钟内搭建起一个可靠的内网穿透解决方案。