总结:如何将自控 Linux WiFi 接入点上连接设备的所有 HTTP 流量重定向到同一台机器上的 Apache/nginx 并让 Apache/nginx 响应?
设想:我有一个带 WiFi 的硬件设备(“D”)。我还有一个 Linux 设备(“L”,基于 Ubuntu),它跨越 Wifi 网络,并且 D 连接到 L。到目前为止一切顺利。D 具有内置功能,可以向制造商拥有的某些外部服务器发出 HTTP 请求(例如检查固件更新)。
我现在想要 L 充当这个外部服务器并伪造响应以让 D 强制认为有(例如)一个新的固件更新。
我不需要像 这样的代理mitmproxy
,它将请求转发到真正的服务器,或者需要大量的手动用户交互!我知道 D 需要的 HTTP 标头和正文。我只想直接用伪造的响应回复 D。
简化:D 执行 a 操作GET http://manufacturer-server.com/firmware-version-check
,L 应使用我伪造的 HTTP 文档进行回答。然后 D 将执行 a 操作GET http://manufacturer-server.com/firmware-file-download
,L 应再次回答,就像我为这个新 URL 伪造的一样。
我需要什么工具?由于 D 只执行 HTTP 请求,我可以将其连接到 L,Apache 或 nginx 就足够了(我不想使用过于复杂的设置)为我需要的所有外部端点提供静态文件 - 但如何让 HTTP 服务器监听并响应连接的 D 的请求?我需要摆弄 DNS 吗?
答案1
有两个选项可以开始:
您可以摆弄 DNS 来覆盖域名的响应,将其直接指向您自己的计算机。
如果域名当前存在且指向某个特定 IP 地址,则可以将该地址 DNAT 到您自己的计算机。(DNAT 是“端口转发”类型的 NAT。)
在这两种情况下你都需要一些配置,但可能比设置代理要少。例如,如果您可以静态配置设备的 IP 地址(当然还有它使用的“默认网关”),那么您可以告诉它使用您的 Linux 服务器或 OpenWRT 盒作为网关,这样即使您的主路由器无法执行 DNAT,它也会执行 DNAT。(Linux 甚至有一个“DNAT 到自身”的特殊情况,即“REDIRECT”iptables 规则。)