我正在运行HTTP代理服务,并希望根据HTTP数据包的内容 (例如HTTP标头 )将stream量路由到各种 第3层 TUN 。
我正在使用BSD和Linux来做这件事,但是在做路由决定时(至less不用编写我自己的内核补丁),看起来它们都不能做第7层的分类。
那么,是否有可能根据Linux或BSD中的HTTP数据包的内容做出第3层 路由决策 ?
而且,如果没有,任何基于Unix的操作系统或发行版都有这个能力吗?
对于BSD,我会研究relayd(8) – 它的原生OpenBSD,但我相信FreeBSD也有一个端口。 这是相当强大的,可以做更多的事情(例如,代理,负载平衡器,应用程序网关),包括你问的东西。
通读手册页,特别是“过滤规则”和“协议”部分:
如果你有问题,肯定会跳到openbsd'misc'邮件列表。 社区很快,作者经常可用。
relayd与pf数据包filter紧密连接,这就是它如何能够共同创build第3层和第7层的规则
我在这里看到的问题是,你必须接受TCP连接,才能看到http请求。 因此,即使系统可以使用应用程序级别的数据,它也不会在需要确定连接需要去哪里时获得这些数据。
我不认为有太多的select,只能有一个“反向代理”,它终止来自客户端的TCP连接,然后build立到源服务器的前向TCP连接。