frp内网穿透实操(Kali NAT 环境 · 附原理说明)

frp 内网穿透实操(Kali NAT 环境 · 附原理说明)

环境:VMware 下的 Kali 虚拟机(NAT 模式)+ Windows 宿主机 + 同一 WiFi 下的手机

目标:把 Kali 上的服务通过 FRP 暴露出来,让手机能够访问,并彻底搞懂 7000 端口的作用。


一、实验环境与拓扑

1.1 设备与地址

设备 IP 地址 在 FRP 中的角色
Windows 宿主机 192.168.31.161(WLAN) 192.168.211.1(VMnet8) 服务端 frps(模拟"公网服务器")
Kali 虚拟机 192.168.211.128 客户端 frpc(内网目标机器)
手机 192.168.31.x 外部访问者

1.2 拓扑与连通性

复制代码
  手机 192.168.31.x ──同WiFi── Windows宿主机 192.168.31.161 ──VMnet8──┐
                                192.168.211.1                          │ NAT隔离
                                                                       ▼
                                                          Kali 192.168.211.128
                                                          (在VMware NAT内网里)

三台设备的可达性是不对称的,这是本实验的关键:

  • 手机与宿主机在同一 WiFi,可以互相访问。
  • Kali 处于 VMware NAT 模式 ,只有宿主机(经由 VMnet8 网卡 192.168.211.1)能直接看到它。
  • 手机没有任何路由 能到达 192.168.211.128,因此无法直接访问 Kali 上的服务。

结论 :宿主机是唯一"手机和 Kali 都能到达"的节点,天然适合扮演"公网中转服务器"。本实验就是把 Kali 的 Web 服务通过 FRP 搬到宿主机的 8080 端口上,让手机访问宿主机即可看到 Kali 的内容。

⚠️ 注意:由于三台设备实际都在同一局域网内,这是一次模拟的内网穿透。真实生产环境里,扮演 frps 的机器必须是真正具备公网 IP 的服务器(如云主机),其余原理完全一致。


二、原理速览

2.1 三个角色

角色 你的环境中是谁 部署什么 职责
公网服务端 S Windows 宿主机 frps 监听 7000,接收并转发外部请求
内网客户端 C Kali 虚拟机 frpc + 业务服务 主动连接 S,把内网服务"挂"出去
外部访问者 V 手机 / 浏览器 无 通过 S 的地址访问内网服务

2.2 两种端口,分工完全不同

类别 端口 谁监听 谁连接 作用
控制端口 7000(bindPort) frps(宿主机) frpc(Kali)主动连出去 认证、注册代理、心跳保活、承载隧道数据
业务端口 8080(remotePort) frps(宿主机) 手机等外部访问者 真正对外提供服务的入口

一句话记住 :7000 是 frpc 找服务端"挂号"并保持联络的控制通道入口 ,只在内网机器与服务端之间"内部通话";手机从头到尾访问的是 8080,不会碰 7000。

2.3 数据流两阶段

复制代码
【阶段一:建立隧道】内网主动向外(这一步穿透 NAT)

  Kali(frpc)  ──TCP 连到 7000──▶  Windows(frps)
      │  提交 token、注册 "把本地80映射到远端8080"
      └◀── 通道建立,之后持续心跳保活 ──▶

【阶段二:访问业务】外部请求进来

  手机 ──HTTP 请求 8080──▶ Windows(frps)
                              │ 复用 7000 那条已建立的连接转发
                              ▼
                          Kali(frpc) ──▶ 127.0.0.1:80(你的 Web 服务)

为什么这样就穿透了 NAT? FRP 的思路是让内网先主动连出去并一直挂着,之后外部请求顺着这条已有连接被"送"进来。


三、实操步骤

3.0 环境约定

项 值
frps 所在 Windows 宿主机,目录 C:\frp
frpc 所在 Kali,目录 ~/frp_0.71.0_linux_amd64
Kali 连接宿主机用 192.168.211.1
手机访问宿主机用 192.168.31.161
token kali_frp_2026(请自行改成更复杂的)

第 1 步:下载 FRP

前往官方发布页 github.com/fatedier/frp/releases,按你的架构下载最新稳定版 (当前为 v0.71.0):

  • Windows 端:frp_0.71.0_windows_amd64.zip,解压到 C:\frp
  • Kali 端:frp_0.71.0_linux_amd64.tar.gz

解压后目录里会有 frps、frps.toml、frpc、frpc.toml 四个文件:

  • Kali 只用带 c 的(客户端 frpc)
  • Windows 只用带 s 的(服务端 frps)

📌 重要 :FRP 自 v0.52.0 起已彻底弃用 .ini 配置,全面改用 .toml,且参数由下划线命名(server_addr)改为驼峰命名(serverAddr)、多代理由 [分区] 改为 [[proxies]] 数组。网上大量老教程仍是 INI 写法,照抄会直接报错。

第 2 步:配置服务端(Windows)

在 C:\frp 下用记事本新建 / 编辑 frps.toml:

toml 复制代码
bindPort = 7000

auth.method = "token"
auth.token = "kali_frp_2026"

# 可选的监控面板,想省事可先不加
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"

在 C:\frp 目录打开 CMD,启动服务端:

cmd 复制代码
frps.exe -c frps.toml

看到类似 frps started successfully 的输出即启动成功。

第 3 步:配置客户端(Kali)

在 Kali 的 frp 目录下编辑 frpc.toml:

toml 复制代码
serverAddr = "192.168.211.1"
serverPort = 7000

auth.method = "token"
auth.token = "kali_frp_2026"

[[proxies]]
name = "kali-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

# 可以顺手把 SSH 也穿出去,方便后面玩
[[proxies]]
name = "kali-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

启动客户端:

bash 复制代码
./frpc -c frpc.toml

看到 start proxy success 就说明隧道已打通。

💡 修改配置后,可用官方校验命令先检查语法,避免启动即报错:

bash 复制代码
./frpc verify -c ./frpc.toml

第 4 步:在 Kali 上起一个测试服务

另开一个 Kali 终端:

bash 复制代码
mkdir -p /tmp/frp_test && cd /tmp/frp_test
echo "Hello from Kali via FRP!" > index.html
sudo python3 -m http.server 80

80 是特权端口,必须用 sudo。若不想占用 80,可改成 python3 -m http.server 8000,同时把 frpc.toml 里的 localPort 改成 8000。

第 5 步:放行 Windows 防火墙(关键)

必须放行三个 TCP 端口:7000(让 Kali 连进来)、8080(让手机访问)、6000(SSH 映射,可选)。用管理员权限的 CMD:

cmd 复制代码
netsh advfirewall firewall add rule name="FRP bind 7000" dir=in action=allow protocol=TCP localport=7000 profile=any
netsh advfirewall firewall add rule name="FRP web 8080" dir=in action=allow protocol=TCP localport=8080 profile=any
netsh advfirewall firewall add rule name="FRP ssh 6000" dir=in action=allow protocol=TCP localport=6000 profile=any

⚠️ 这里必须单独放行 TCP 端口 ,TCP 端口是独立的规则。

第 6 步:分层验证

按从近到远逐层确认,出问题好定位:

  1. Kali 本机 :curl http://127.0.0.1/ → 应看到 Hello from Kali via FRP!
  2. Windows 本机浏览器 :访问 http://127.0.0.1:8080 → 应看到同样内容(说明 frps ↔ frpc 隧道 OK)
  3. 手机浏览器 :访问 http://192.168.31.161:8080 → 应看到同样内容(说明外部访问链路 OK)

如果第 2 步通、第 3 步不通,基本就是 Windows 防火墙没放行 8080,或 WLAN 被识别成"公用网络"而规则未覆盖到。


停止frp后手机就无法访问kali了

四、端口与配置速查表

配置项 写在哪 含义 你的取值
bindPort frps 控制端口,frpc 连过来的入口 7000
webServer.port frps Dashboard 面板端口(可选) 7500
serverAddr frpc frps 的地址 192.168.211.1
serverPort frpc 须与 frps 的 bindPort 一致 7000
localIP / localPort frpc 内网真实服务地址 127.0.0.1 : 80
remotePort frpc 业务端口,映射到服务端对外 8080
auth.token 两端 身份凭证,必须完全一致 自定义

五、常见报错排查

现象 / 报错 原因与解决
login to server failed: i/o timeout 7000 端口不通。先 telnet 192.168.211.1 7000 测 TCP 连通,90% 是 Windows 防火墙未放行 7000
token mismatch 两端 auth.token 不一致,逐字符核对
port already used 8080 被占用,换一个 remotePort(如 8081)
提示 INI 文件已被弃用 配置里混用了 [common] 等 INI 分区写法。改后缀名也没用,必须彻底改成 TOML 语法
start proxy success 但手机打不开 手机应访问 192.168.31.161:8080(WLAN 网卡),不是 192.168.211.1;同时确认防火墙已放行 8080
能访问但页面空白 / 连接被重置 Kali 上 Web 服务没真正起来,检查 python3 -m http.server 是否仍在运行、端口是否对得上

六、进阶练习方向

  • 加 Dashboard :浏览器打开 http://192.168.31.161:7500,用配置里的用户名密码登录,能实时看到在线客户端、代理列表与流量统计,比翻日志直观。

    端口情况查看

  • 试 HTTP 类型的域名映射 :把 type 改成 http,配 customDomains 与 frps 的 vhostHTTPPort,体验基于域名的反向代理。

  • 错误 token 实验 :故意把一端 token 改错(kali的改为kali_frp_2027),观察 frpc 的认证失败日志,理解鉴权机制。

  • 开启加密与压缩 :在 [[proxies]] 里加 transport.useEncryption = true 和 transport.useCompression = true,对比开启前后的大文件传输速度。

  • 换成云主机:把 frps 部署到一台有公网 IP 的云服务器上,内部服务换成更真实的应用,即可获得一套真正可用的内网穿透环境。

相关推荐
MaAidan2 小时前
AI 交付前的质量门禁:复杂度、分层、安全配置、测试,一个都不能少
人工智能·安全
由你创机器人4 小时前
具身智能机器人定制交付、安全设计与验收落地要点
安全·机器人
Zadig4 小时前
从 Claude Code 投毒到币安入侵:高权限 DevOps 终端,正在成为黑客突破口
安全·devops
是真的小外套5 小时前
网络安全实战第13期:侦察报告撰写
安全·web安全
是真的小外套5 小时前
网络安全实战第15期:SQL注入根源之一条拼接语句的警示
sql·安全·web安全
10岁的博客6 小时前
Chrome 扩展安全攻防实录:从权限模型到真实漏洞复盘
前端·chrome·安全
滼6 小时前
AI 数据安全面试应答框架:从大框架到小点
大数据·人工智能·安全·面试·安全架构
johnsong8 小时前
AI前沿日报 · 2026-11-01 | 资本狂潮与安全崩塌 —— 当AI大国博弈遇上供应链暗战
人工智能·安全
m0_738120728 小时前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全