根据 HTTP 数据包内容进行第 3 层路由

根据 HTTP 数据包内容进行第 3 层路由

我正在运行HTTP代理服务并希望将流量路由到各种各样的 第 3 层 隧道编号基于内容HTTP数据包(例如HTTP 标头)。

我在用着北达科他州Linux但看起来它们都无法做到这一点第 7 层在进行路由决策时进行分类(至少,无需编写我自己的大量内核补丁)。

那么,是否有可能第 3 层 路由决策根据内容HTTP数据包Linux或者北达科他州

如果没有,Unix基于操作系统或者分布有这个能力吗?

答案1

对于 BSD 我会研究relayd(8)- 它是 OpenBSD 的原生版本,但我相信 FreeBSD 也有一个端口。它非常强大,可以做很多事情(例如,代理、负载平衡器、应用程序网关),包括您要求的。

阅读手册页,特别是“过滤规则”和“协议”部分:

如果您有问题,请务必加入 openbsd 'misc' 邮件列表。社区很活跃,作者经常在线。


relayd与数据包过滤器紧密相关pf,因此它能够共同创建第 3 层和第 7 层规则

答案2

我在这里看到的问题是,您必须先接受 TCP 连接,然后才能看到 http 请求。因此,即使系统可以使用应用程序级数据,在需要决定连接去往何处时,它也不会拥有这些数据。

我认为没有太多选择,只能使用“反向代理”来终止来自客户端的 TCP 连接,然后建立到原始服务器的向前 TCP 连接。

相关内容