FRP(Fast Reverse Proxy) 是一款开源的内网穿透工具,可以将局域网中的服务通过公网服务器暴露到互联网上。它通过端口映射实现内网服务的公网访问,非常适合没有公网IP的场景。
以下是使用FRP进行端口映射的详细步骤:
1. FRP的基本原理
-
FRP客户端(frpc):运行在内网设备上,负责将内网服务映射到公网服务器。
-
FRP服务端(frps):运行在公网服务器上,负责接收外部请求并转发到内网客户端。
-
端口映射:通过配置FRP,将公网服务器的某个端口映射到内网设备的指定端口。
2. 准备工作
-
一台公网服务器:用于运行FRP服务端(frps)。
-
内网设备:用于运行FRP客户端(frpc)。
-
FRP软件:从 FRP GitHub 下载对应操作系统的版本。
3. 配置FRP服务端(frps)
-
下载FRP:
-
在公网服务器上下载FRP,解压后找到
frps
和frps.ini
文件。
-
-
编辑配置文件:
-
打开
frps.ini
,配置如下:[common] bind_port = 7000 # FRP服务端监听的端口 token = 123456 # 客户端连接时的认证令牌(可选)
-
保存并退出。
-
-
启动FRP服务端:
-
在公网服务器上运行以下命令:
./frps -c frps.ini
-
如果一切正常,服务端会监听
7000
端口,等待客户端连接。
-
4. 配置FRP客户端(frpc)
-
下载FRP:
-
在内网设备上下载FRP,解压后找到
frpc
和frpc.ini
文件。
-
-
编辑配置文件:
-
打开
frpc.ini
,配置如下:[common] server_addr = x.x.x.x # 公网服务器的IP地址 server_port = 7000 # FRP服务端的端口 token = 123456 # 与服务端一致的认证令牌(如果设置了) [web] # 自定义服务名称 type = http # 映射的协议类型(http/tcp/udp等) local_port = 80 # 内网服务的端口 local_ip = 127.0.0.1 # 内网服务的IP地址 remote_port = 8080 # 公网服务器暴露的端口
-
保存并退出。
-
-
启动FRP客户端:
-
在内网设备上运行以下命令:
./frpc -c frpc.ini
-
如果连接成功,客户端会与服务端建立连接。
-
5. 访问内网服务
-
通过公网服务器的IP地址和映射的端口访问内网服务。
-
例如:
-
公网服务器IP:
x.x.x.x
-
映射端口:
8080
-
访问地址:
http://x.x.x.x:8080
-
-
6. 常见配置示例
映射HTTP服务
-
假设内网有一台Web服务器,运行在
80
端口。 -
配置
frpc.ini
:[web] type = http local_port = 80 local_ip = 127.0.0.1 remote_port = 8080
映射TCP服务
-
假设内网有一台SSH服务器,运行在
22
端口。 -
配置
frpc.ini
:[ssh] type = tcp local_port = 22 local_ip = 127.0.0.1 remote_port = 2222
-
通过
x.x.x.x:2222
访问内网SSH服务。
映射UDP服务
-
假设内网有一台DNS服务器,运行在
53
端口。 -
配置
frpc.ini
:[dns] type = udp local_port = 53 local_ip = 127.0.0.1 remote_port = 5353
7. 高级功能
-
域名绑定:
-
在
frpc.ini
中配置custom_domains
,将服务绑定到域名。
[web] type = http local_port = 80 custom_domains = yourdomain.com
-
-
多服务映射:
-
在
frpc.ini
中配置多个[service_name]
段落,映射多个服务。
-
-
加密与压缩:
-
在
[common]
中启用加密和压缩:
use_encryption = true use_compression = true
-
8. 注意事项
-
安全性:
-
使用
token
认证,避免未授权访问。 -
仅暴露必要的端口,避免内网服务被攻击。
-
-
性能:
-
如果流量较大,建议使用高性能的公网服务器。
-
-
稳定性:
-
可以将FRP客户端和服务端配置为系统服务,确保长期运行。
-
总结
FRP是一款功能强大且易于使用的内网穿透工具,通过端口映射可以将内网服务暴露到公网。按照上述步骤配置FRP服务端和客户端,即可实现内网服务的公网访问。如果有更复杂的需求,可以参考FRP的官方文档进行高级配置。
9. 将FRP配置为系统服务(以Linux为例)
为了确保FRP客户端和服务端在系统重启后自动运行,可以将它们配置为系统服务。
配置FRP服务端为系统服务
-
创建服务文件:
-
在
/etc/systemd/system/
目录下创建frps.service
文件:sudo nano /etc/systemd/system/frps.service
-
-
编辑服务文件:
-
添加以下内容:
[Unit] Description=Frp Server Service After=network.target [Service] Type=simple ExecStart=/path/to/frps -c /path/to/frps.ini Restart=on-failure [Install] WantedBy=multi-user.target
-
替换
/path/to/frps
和/path/to/frps.ini
为实际的FRP路径。
-
-
启动并启用服务:
-
重新加载系统服务配置:
sudo systemctl daemon-reload
-
启动FRP服务端:
sudo systemctl start frps
-
设置开机自启:
sudo systemctl enable frps
-
配置FRP客户端为系统服务
-
创建服务文件:
-
在
/etc/systemd/system/
目录下创建frpc.service
文件:sudo nano /etc/systemd/system/frpc.service
-
-
编辑服务文件:
-
添加以下内容:
[Unit] Description=Frp Client Service After=network.target [Service] Type=simple ExecStart=/path/to/frpc -c /path/to/frpc.ini Restart=on-failure [Install] WantedBy=multi-user.target
-
替换
/path/to/frpc
和/path/to/frpc.ini
为实际的FRP路径。
-
-
启动并启用服务:
-
重新加载系统服务配置:
sudo systemctl daemon-reload
-
启动FRP客户端:
sudo systemctl start frpc
-
设置开机自启:
sudo systemctl enable frpc
-
10. 使用FRP的Web管理界面
FRP服务端支持Web管理界面,方便查看客户端连接状态和配置信息。
-
启用Web管理界面:
-
在
frps.ini
中添加以下配置:[common] bind_port = 7000 dashboard_port = 7500 # Web管理界面端口 dashboard_user = admin # 用户名 dashboard_pwd = admin # 密码
-
-
访问Web管理界面:
-
在浏览器中访问
http://x.x.x.x:7500
,输入用户名和密码即可查看FRP状态。
-
11. 使用FRP的日志功能
FRP支持日志记录,方便排查问题。
-
配置日志:
-
在
frps.ini
或frpc.ini
中添加以下配置:[common] log_file = /path/to/frp.log # 日志文件路径 log_level = info # 日志级别(debug/info/warn/error) log_max_days = 7 # 日志保留天数
-
-
查看日志:
-
使用以下命令查看日志:
tail -f /path/to/frp.log
-
12. 使用FRP的TCP多路复用
FRP支持TCP多路复用,可以减少连接数,提高性能。
-
启用TCP多路复用:
-
在
frps.ini
和frpc.ini
中添加以下配置:[common] tcp_mux = true
-
13. 使用FRP的负载均衡
FRP支持负载均衡,可以将请求分发到多个内网服务。
-
配置负载均衡:
-
在
frpc.ini
中添加以下配置:[web] type = http local_port = 80 local_ip = 127.0.0.1 remote_port = 8080 group = web_servers # 组名称 group_key = 123456 # 组密钥
-
-
启动多个客户端:
-
在多个内网设备上启动FRP客户端,并配置相同的组名称和密钥。
-
14. 使用FRP的HTTP/HTTPS代理
FRP支持HTTP/HTTPS代理,可以将内网Web服务暴露到公网。
-
配置HTTP代理:
-
在
frpc.ini
中添加以下配置:[web] type = http local_port = 80 custom_domains = yourdomain.com
-
-
配置HTTPS代理:
-
在
frpc.ini
中添加以下配置:[web] type = https local_port = 443 custom_domains = yourdomain.com
-
15. 常见问题排查
-
客户端无法连接服务端:
-
检查服务端防火墙是否开放
7000
端口。 -
检查客户端配置中的
server_addr
是否正确。
-
-
公网无法访问映射的服务:
-
检查服务端防火墙是否开放映射的端口(如
8080
)。 -
检查客户端配置中的
local_port
和remote_port
是否正确。
-
-
日志中出现错误:
-
查看日志文件,根据错误信息进行排查。
-
总结
FRP是一款功能强大的内网穿透工具,支持端口映射、HTTP/HTTPS代理、负载均衡等多种功能。通过合理配置,可以轻松将内网服务暴露到公网。如果需要更高级的功能,可以参考FRP的官方文档进行配置。