概述:
我有一款软件,其中硬编码了我们的 Edge/DNS 服务器,但 DNS 服务器返回的 DNS 查询没有被正确屏蔽。我需要使用请求查询的原始服务器而不是 DNS 服务器 IP 来屏蔽 BIND 查询请求返回的 DNS 条目。我想要屏蔽的原因是,如果攻击者获取了我的某个边缘服务器 IP 并对其进行 DDoS 攻击,他们将无法获取其他服务器 IP 并对其进行 DDoS 攻击或攻击它们。
下图说明了我想要完成的任务的一个简单版本。
用户可以通过两种方式连接:
- 直接发送到提供给他们的/硬编码的边缘服务器 IP
或者
- 直接连接到指定的边缘服务器,然后通过 Web 界面选择连接到哪个办公室/服务器,在后端通过 VPN 隧道在其边缘服务器上执行 iptables REDIRECT。
问题:
事件顺序:
- 用户 2 连接到其边缘服务器 (server2)
- 边缘服务器 2 将其查询重定向到边缘服务器 1
- 边缘服务器 1 将查询响应返回给边缘服务器 2,其中 DNS 数据包中嵌入了边缘服务器 1 的 IP。
- 用户获得他们不应该知道的隐藏边缘服务器 IP。
核心问题:
边缘服务器的 IP 嵌入在 DNS 响应数据包中,需要屏蔽为用户连接到的原始边缘服务器 IP
DNS 查找示例输出:
- 用户 2 查询 google.ca
- DNS Server1 处理查询并返回其自己的 IP 而不是 Google 的 IP 的结果。
查找请求(错误):
nslookup google.ca
Server: UnKnown
Address: 2.2.2.2
Name: google.ca
Address: 1.1.1.1
应显示的查找请求:
nslookup google.ca
Server: UnKnown
Address: 2.2.2.2
Name: google.ca
Address: 2.2.2.2
以下是构建的网络/系统的大规模版本。
根据用户数量,办公室可以拥有一台或多台服务器。
(这只是为了让你了解它需要如何扩展)
我尝试过的:
- iptables 预/后路由(未屏蔽)
- 使用 BIND 配置(修改 db.override 文件以返回服务器 IP)可以工作,但由于此文件无法实时更新,因此每个边缘服务器都需要一个单独的服务器。
潜在解决方案理论:
- 第 7 层解决方案可以改变 DNS 查询结果 IP,无论是防火墙还是强制特定查询显示原始边缘服务器 IP 的嗅探器/注入脚本。