FRP(Fast Reverse Proxy)是一款优秀的内网穿透工具,能够帮助我们轻松地搭建内网穿透服务,实现本地文件的外网访问, 支持 TCP、UDP、HTTP、HTTPS 等多种协议。
部署过程包含两部分:
-
1. FRP 服务器端 (frps): 运行在一台具有公网 IP 地址的机器上(通常是云服务器 VPS)。 -
2. FRP 客户端 (frpc): 运行在你本地的 Windows 机器上,也就是运行着你想穿透的那个应用服务的机器。
假设:
-
• 你已经有一台具有公网 IP 地址的服务器(比如 Linux VPS),其公网 IP 为 your_server_public_ip
。 -
• 你本地 Windows 机器上有一个应用服务正在运行,监听在某个端口(例如,一个 Web 服务监听在 127.0.0.1:8080
)。 -
• 你想通过公网访问这个本地服务。
步骤一:在公网服务器上部署 FRP 服务器端 (frps)
(通常服务器是 Linux 系统,这里以 Linux 为例。如果你需要在 Windows 服务器上部署 frps,过程类似,只是文件名和运行方式略有不同)
-
1. 下载 FRP: -
• 访问 FRP 的 GitHub Releases 页面: https://github.com/fatedier/frp/releases -
• 根据你的服务器 操作系统 和 CPU 架构 (通常是 linux_amd64
) 下载最新的frp_..._linux_amd64.tar.gz
文件。 -
• 例如,使用 wget
下载 (版本号可能需要更新):wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
-
-
2. 解压: tar -zxvf frp_0.58.1_linux_amd64.tar.gz
-
3. 配置 frps.ini (服务器配置文件): -
• 进入解压后的目录,例如 cd frp_0.58.1_linux_amd64
。 -
• 编辑 frps.ini
文件(如果不存在则创建,但通常解压后会有一个frps.toml
或frps.ini
示例,新版本推荐frps.toml
,这里用.ini
举例,语法类似)。 -
• 一个 最基本 的配置如下: [common] # frps 服务端监听的端口,用于接收 frpc 客户端的连接 bind_port = 7000 # 设置一个身份验证令牌,frpc 连接时需要提供此令牌 token = YourSecretToken123 # (可选) Dashboard 仪表盘,方便查看 frp 状态 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin_password
-
• 重要参数说明: -
• bind_port
: frps 和 frpc 之间通信的端口,必须在服务器防火墙上允许外部访问。 -
• token
: 用于身份验证,防止未经授权的 frpc 连接。请务必修改为你自己的复杂密码。 -
• dashboard_port
: 如果启用,这个端口也需要在服务器防火墙上放行,但建议只允许特定 IP 访问或配置反向代理增加安全性。 -
• 如果你想通过域名(如 http://web.yourdomain.com
)访问 HTTP 服务,还需要配置vhost_http_port = 80
和/或vhost_https_port = 443
,并在防火墙放行这些端口。
-
-
-
4. 防火墙设置: -
• 确保你的服务器防火墙(如 ufw
,firewalld
) 以及云服务商的安全组规则允许 入站 流量访问你配置的bind_port
(例如 7000) 和dashboard_port
(例如 7500)。 -
• 如果配置了 vhost_http_port
或vhost_https_port
,也需要放行这些端口(通常是 80 和 443)。 -
• 示例 (UFW on Ubuntu): sudo ufw allow 7000/tcp sudo ufw allow 7500/tcp # 如果启用了 Dashboard # sudo ufw allow 80/tcp # 如果使用 vhost_http_port # sudo ufw allow 443/tcp # 如果使用 vhost_https_port sudo ufw enable sudo ufw status
-
-
5. 运行 frps: -
• 前台运行 (用于测试): ./frps -c ./frps.ini
按
Ctrl+C
停止。 • 后台运行 (推荐): nohup ./frps -c ./frps.ini > frps.log 2>&1 &
这会在后台运行
frps
,并将日志输出到frps.log
文件。• 使用 systemd (更健壮的方式):
可以创建一个 systemd service 文件来管理 frps 服务,实现开机自启和自动重启。具体方法可以搜索 "frps systemd service"。
-
步骤二:在本地 Windows 机器上部署 FRP 客户端 (frpc)
-
1. 下载 FRP: -
• 再次访问 FRP 的 GitHub Releases 页面: https://github.com/fatedier/frp/releases -
• 这次根据你的 Windows 系统和 CPU 架构 (通常是 windows_amd64
) 下载frp_..._windows_amd64.zip
文件。
-
-
2. 解压: -
• 在你本地 Windows 机器上找一个合适的位置(例如 C:\frp
)解压下载的.zip
文件。你会看到frpc.exe
和frpc.ini
(或frpc.toml
) 等文件。
-
-
3. 配置 frpc.ini (客户端配置文件): -
• 使用文本编辑器(如 Notepad++ 或 VS Code)打开解压目录中的 frpc.ini
文件。 -
• 编辑配置,指定要连接的服务器和要穿透的本地服务。 -
• 一个 示例配置 如下 (假设穿透本地 8080 端口的 Web 服务和 RDP 远程桌面): [common] # frps 服务器的公网 IP 地址 server_addr = your_server_public_ip # frps 服务器监听的端口 (必须与 frps.ini 中的 bind_port 一致) server_port = 7000 # frps 服务器设置的身份验证令牌 (必须与 frps.ini 中的 token 一致) token = YourSecretToken123 # --- 定义第一个要穿透的服务:本地 Web 服务 --- [web_service_http] # 类型:tcp, udp, http, https, stcp, xtcp 等 type = tcp # 本地服务的 IP 地址 (通常是 127.0.0.1) local_ip = 127.0.0.1 # 本地服务的端口号 local_port = 8080 # 在 frps 服务器上监听的端口,外部通过这个端口访问你的本地服务 # 这个端口必须是你的 frps 服务器上未被占用的端口 remote_port = 8081 # (可选) 如果 frps 配置了 subdomain_host,可以用 http 类型和 subdomain # type = http # local_port = 8080 # subdomain = mylocalweb # 访问地址将是 http://mylocalweb.yourdomain.com (需配置 DNS) # --- 定义第二个要穿透的服务:Windows 远程桌面 (RDP) --- [windows_rdp] type = tcp local_ip = 127.0.0.1 # RDP 默认端口是 3389 local_port = 3389 # 在 frps 服务器上为 RDP 分配一个端口 remote_port = 7001
-
• 重要参数说明: -
• server_addr
: 你的公网服务器 IP。 -
• server_port
: 必须和服务器frps.ini
中的bind_port
相同。 -
• token
: 必须和服务器frps.ini
中的token
相同。 -
• [<service_name>]
: 每个方括号定义一个要穿透的服务,名称自定义(如web_service_http
,windows_rdp
)。 -
• type
: 服务的协议类型。tcp
和udp
是最通用的,会直接转发端口。http
和https
通常用于 Web 服务,可以配合subdomain
或custom_domains
使用域名访问。 -
• local_ip
,local_port
: 你本地服务的监听地址和端口。 -
• remote_port
: 公网服务器上用于接收外部访问的端口。外部用户将通过your_server_public_ip:remote_port
来访问你的本地服务。确保这个端口在服务器防火墙上也是放行的! -
• subdomain
/custom_domains
: 如果使用http
或https
类型,并且服务器配置了vhost_http_port
/vhost_https_port
和subdomain_host
,可以用这些参数通过域名访问,而不需要指定remote_port
。这需要你将域名或子域名解析到你的服务器 IP。
-
-
-
4. 防火墙设置 (Windows): -
• 通常 Windows 防火墙会询问是否允许 frpc.exe
访问网络,选择“允许”。 -
• 确保 Windows 防火墙没有阻止你的本地应用服务 (例如,端口 8080 或 3389) 被 frpc.exe
访问(通常127.0.0.1
之间的访问是被允许的)。
-
-
5. 运行 frpc: -
• 打开 Windows 的命令提示符 (cmd) 或 PowerShell。 -
• 使用 cd
命令切换到你存放frpc.exe
和frpc.ini
的目录。例如:cd C:\frp
-
• 前台运行 (用于测试): .\frpc.exe -c .\frpc.ini
观察输出。如果看到类似 "login to server success" 和 "start proxy success" 的信息,表示连接和代理设置成功。保持这个窗口打开,服务就在运行中。关闭窗口则停止 frpc。
• 后台运行/设置为 Windows 服务 (推荐):
为了让 frpc 在后台稳定运行,并且开机自启,最好将其设置为 Windows 服务。推荐使用第三方工具 NSSM (Non-Sucking Service Manager):1. 下载 NSSM: https://nssm.cc/download 2. 解压 NSSM,找到对应你系统架构(32位或64位)的 nssm.exe
。3. 以 管理员身份 打开命令提示符 (cmd)。 4. 切换到 NSSM 所在的目录。 5. 执行安装命令: nssm install frpc
6. 会弹出一个 NSSM 服务安装界面: • Path: 点击 ...
按钮,选择你的frpc.exe
文件路径 (例如C:\frp\frpc.exe
)。• Startup directory: 它通常会自动填充为 frpc.exe
所在的目录 (例如C:\frp
)。• Arguments: 输入 -c frpc.ini
(注意frpc.ini
是相对于 Startup directory 的路径,如果它们在同一目录,这样写即可)。• (可选) 在 I/O
标签页,可以设置日志文件路径,方便排查问题。• 点击 Install service
按钮。
7. 安装成功后,启动服务: nssm start frpc
或在 Windows 服务管理器 (services.msc
) 中找到名为frpc
的服务,手动启动它,并可以设置其启动类型为“自动”。8. 管理服务的常用 NSSM 命令: nssm start frpc
,nssm stop frpc
,nssm restart frpc
,nssm status frpc
,nssm edit frpc
,nssm remove frpc
。
-
步骤三:测试访问
-
1. 确保 frps 在服务器上运行,并且 frpc 在你的 Windows 电脑上运行且连接成功。 -
2. 根据你的 frpc.ini
配置进行访问:-
• 对于 [web_service_http] (TCP 类型): 在任何可以访问互联网的设备上,打开浏览器,访问 http://your_server_public_ip:8081
(使用你在remote_port
配置的端口)。你应该能看到你本地127.0.0.1:8080
上的 Web 服务内容。 -
• 对于 [windows_rdp]: 在另一台电脑上打开远程桌面连接工具 ( mstsc.exe
),输入your_server_public_ip:7001
(使用你在remote_port
配置的端口),然后尝试连接。你应该会看到 Windows 登录界面。 -
• 如果使用了 subdomain (HTTP 类型): 确保你的子域名(如 mylocalweb.yourdomain.com
)已经通过 DNS 解析指向了your_server_public_ip
。然后直接在浏览器中访问http://mylocalweb.yourdomain.com
。
-
安全注意事项:
-
• 使用强 Token: frps.ini
和frpc.ini
中的token
一定要设置复杂且保密。 -
• 防火墙精细化: 只开放必要的端口。对于 remote_port
,只开放你确实需要从公网访问的那些。如果可能,限制访问remote_port
的源 IP 地址。 -
• Dashboard 安全: 如果启用 Dashboard,务必修改默认用户名密码,并考虑使用 Nginx/Caddy 等反向代理增加 HTTPS 和访问控制。 -
• HTTPS: 对于暴露的 Web 服务,强烈建议配置 HTTPS 加密。可以在 frps 端使用 type=https
,plugin=https2http
等方式,或者在本地服务就启用 HTTPS 并使用type=https
或type=tcp
转发。 -
• STCP (Secret TCP): 对于像 RDP 或 SSH 这样敏感的服务,可以考虑使用 type = stcp
。这需要在访问端也运行一个 frpc 客户端,提供更高的安全性,因为它不会在服务器上直接暴露端口。 -
• 本地服务安全: FRP 只是打通了网络路径,确保你本地的应用服务本身是安全的(例如,有身份验证、及时更新补丁)。 -
• 日志监控: 定期检查 frps 和 frpc 的日志,关注异常连接或错误。
按照以上步骤操作,你应该就能成功地在 Windows 上使用 FRP 将你的本地服务穿透到公网了。如果在过程中遇到问题,请仔细检查配置文件、防火墙设置以及 frps 和 frpc 的运行日志。
本文内容来源于公开网络,出于传递信息之目的整理发布。原文版权归原作者所有,若涉及侵权请先提供版权后联系我们删除