我正在运行一个HTTP代理服务,并希望根据HTTP数据包的内容(例如HTTP 标头)将流量路由到各种 第 3 层 TUN 。
我正在使用BSD和Linux来执行此操作,但在做出路由决策时,它们中的任何一个似乎都不能进行第 7 层分类(至少,在没有编写我自己的大量内核补丁的情况下)。
那么,是否有可能在Linux或BSD中根据HTTP数据包的内容做出第 3 层 路由决策?
如果没有,是否有任何基于Unix的操作系统或发行版具有此功能?
我正在运行一个HTTP代理服务,并希望根据HTTP数据包的内容(例如HTTP 标头)将流量路由到各种 第 3 层 TUN 。
我正在使用BSD和Linux来执行此操作,但在做出路由决策时,它们中的任何一个似乎都不能进行第 7 层分类(至少,在没有编写我自己的大量内核补丁的情况下)。
那么,是否有可能在Linux或BSD中根据HTTP数据包的内容做出第 3 层 路由决策?
如果没有,是否有任何基于Unix的操作系统或发行版具有此功能?
对于 BSD,我会研究
relayd(8)
- 它原生于 OpenBSD,但我相信 FreeBSD 也有一个端口。它非常强大,可以做很多事情(例如,代理、负载平衡器、应用程序网关),包括您所要求的。通读手册页,特别是“过滤规则”和“协议”部分:
如果您有问题,请务必加入 openbsd 'misc' 邮件列表。社区很快,作者经常可用。
relayd
与数据包过滤器密切相关pf
,这就是它能够为第 3 层和第 7 层共同创建规则的方式我在这里看到的问题是,您必须先接受 TCP 连接,然后才能看到 http 请求。因此,即使系统可以使用应用程序级别的数据,它在需要决定连接需要去哪里时也不会拥有该数据。
我认为除了拥有一个“反向代理”之外别无选择,它终止来自客户端的 TCP 连接,然后建立到源服务器的向前 TCP 连接。