是否有一种合理的方法可以使用本地测试服务器以有限的方式劫持 DNS 来模拟传出的 HTTP 连接?
这个想法是,代码将以与平常相同的方式执行,但是请求将被重定向到某个本地测试服务器并返回模拟响应。
我知道这可以通过一组测试配置来实现,这样请求的 URI 就是 localhost,但我发现这会导致大量问题,最常见的问题是开发人员忘记取消注释生产配置或对设置测试配置感到困惑。
答案1
不触碰代码进行检查是明智的。因此,操纵环境以强制使用测试服务器的做法是正确的。
DNS 黑客攻击会影响整个网络,可能会激怒针对同一服务的其他测试。
为了最大限度地减少影响,将网络流量重新路由到测试服务器的最简单方法是配置hosts
文件在客户端要测试的软件的安装位置。
# Linux:
/etc/hosts
# Windows:
%SystemRoot%\System32\drivers\etc\hosts
只需将测试系统的 IP 映射到生产服务器的 DNS 名称:
# IP of the test server:
192.168.10.20 prod.server.com prod2.server.com
192.168.10.20 prod prod2 # if prod-servers are part of the local network.
为了解析服务器名称,系统将首先检查hosts
文件。如果不成功,则将遵循 DNS 请求。
重新配置后清除 DNS 缓存可能是一个好主意:
# Linux:
resolvectl flush-caches
# Windows:
ipconfig /flushdns
对于此解决方案(或任何 DNS 解决方案),您必须确保软件不会在任何地方编码生产服务器的 IP 地址。(也许将测试网络与互联网/生产网络断开?)