使用 FRP 代理多个端口的详细配置步骤和示例,帮助你实现内网穿透并同时暴露多个服务到公网。
一、准备工作
公网服务器:
- 一台具备公网 IP 的服务器(如阿里云、腾讯云等)。
- 安装 FRP 服务端(
frps)。
内网设备:
- 需要穿透的内网服务(如 Web 服务、SSH 等)。
- 安装 FRP 客户端(
frpc)。
二、FRP 服务端配置(frps.ini)
在公网服务器上配置 frps.ini,允许客户端连接并监听多个端口。
示例配置:
[common]
bind_port = 7000 # 客户端连接端口
vhost_http_port = 8080 # HTTP 代理端口(可选)
dashboard_port = 7500 # Web 管理界面端口(可选)
token = your_token # 认证令牌(可选)启动服务端:
./frps -c frps.ini三、FRP 客户端配置(frpc.ini)
在内网设备上配置 frpc.ini,为每个需要穿透的服务创建独立的代理配置。
示例配置:
[common]
server_addr = <公网服务器IP> # 替换为公网服务器 IP
server_port = 7000
token = your_token # 与服务端一致(可选)
# 代理服务1:Web 服务(端口 80)
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8081 # 公网服务器映射端口
# 代理服务2:SSH 服务(端口 22)
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222 # 公网服务器映射端口
# 代理服务3:数据库(端口 3306)
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3306 # 公网服务器映射端口启动客户端:
./frpc -c frpc.ini四、外网访问方式
直接通过 IP + 端口访问:
- Web 服务:
http://<公网服务器IP>:8081 - SSH 服务:
ssh -p 2222 user@<公网服务器IP> - MySQL 服务:
mysql -h <公网服务器IP> -P 3306 -u root -p
- Web 服务:
通过 Nginx 反向代理绑定域名(可选):
如果希望用域名访问不同服务,可以在公网服务器上配置 Nginx 反向代理,将域名映射到不同的remote_port。Nginx 配置示例:
server { listen 80; server_name web.example.com; location / { proxy_pass http://127.0.0.1:8081; # 对应 Web 服务的 remote_port proxy_set_header Host $host; } } server { listen 80; server_name ssh.example.com; location / { proxy_pass http://127.0.0.1:2222; # 对应 SSH 服务的 remote_port proxy_set_header Host $host; } }重启 Nginx:
nginx -s reload
五、验证配置
检查 FRP 服务状态:
- 登录 FRP 服务端管理界面(
http://<公网服务器IP>:7500),查看代理状态是否正常。 - 检查客户端日志(
frpc.log)和服务器日志(frps.log)是否有错误。
- 登录 FRP 服务端管理界面(
测试访问:
- 使用外网设备访问
http://<公网服务器IP>:8081,确认 Web 服务是否可用。 - 使用 SSH 连接
ssh -p 2222 user@<公网服务器IP>,确认 SSH 是否可达。
- 使用外网设备访问
六、高级配置(可选)
使用 HTTP 代理绑定域名:
如果希望直接通过域名访问服务(如web.example.com),可以使用type = http并配置custom_domains。客户端配置示例:
[web] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = web.example.com服务端配置:
[common] bind_port = 7000 vhost_http_port = 80 # HTTP 代理端口外网用户访问
http://web.example.com即可访问内网 Web 服务。端口范围映射(支持 v0.56.0+):
使用 Go 模板语法批量映射端口范围。客户端配置示例:
serverAddr = "x.x.x.x" serverPort = 7000 {{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }} [[proxies]] name = "tcp-{{ $v.First }}" type = "tcp" localPort = {{ $v.First }} remotePort = {{ $v.Second }} {{- end }}
七、注意事项
端口冲突:
- 确保
remote_port在公网服务器上未被占用。 - 如果使用 HTTP 代理,
vhost_http_port必须唯一。
- 确保
防火墙规则:
- 在公网服务器上开放所有
remote_port(如8081,2222,3306)。
- 在公网服务器上开放所有
安全性:
- 启用
token认证,防止未授权访问。 - 使用 HTTPS 加密(需额外配置 SSL 证书)。
- 启用
日志排查:
- 如果服务无法访问,检查
frpc.log和frps.log中的错误信息。
- 如果服务无法访问,检查
评论0
暂时没有评论