我想测试我的数据平面应用程序,并且想了解是否有一种使用容器的方法。
当我启动一个包含我的应用程序的容器后,我可以将所有机器生成的互联网流量定向到该容器,在我的应用程序中处理该流量并将其发送回主机网络命名空间并从物理接口发出(例如, eth0)?
例子:
我访问 Facebook,所有流量(DNS/UDP、HTTPS/TCP)都应该进入同一台计算机中的容器应用程序,由我的应用程序处理,然后通过 eth0 发送出去。来自互联网的返回流量首先返回到我的应用程序,然后发送到主机客户端(此处为浏览器)。
答案1
对于非 DNS TCP 流量 - 告诉您的应用程序 facebook 的 IP 地址是您容器的 IP 地址。在您的容器上运行 TLS MITM 代理(以前在鱿鱼中称为 sslbump,但当前的实现称为窥视拼接)。
除非您愿意单击证书警告,否则您还需要建立自己的证书颁发机构并在运行客户端的主机上的 CA 证书数据库中安装 CA 证书。
您需要设置自己的 DNS 服务器并配置区域来伪造 DNS(我怀疑这可能通过 pihole 实现)或者只是覆盖主机文件中的 DNS 条目。
我怀疑您在实现这一目标的过程中需要学习很多东西。