Estou executando um serviço de proxy HTTP e desejo rotear o tráfego para vários TUNs da Camada 3 com base no conteúdo dos pacotes HTTP (por exemplo, cabeçalhos HTTP ).
Estou usando BSD e Linux para fazer isso, mas não parece que nenhum deles seja capaz de classificar a Camada 7 ao tomar decisões de roteamento (pelo menos, sem escrever meus próprios patches de kernel extensos).
Então, é possível tomar decisões de roteamento da Camada 3 com base no conteúdo dos pacotes HTTP no Linux ou BSD ?
E, se não, algum sistema operacional ou distribuição baseado em Unix tem essa capacidade?
Para o BSD, eu procuraria
relayd(8)
- é nativo do OpenBSD, mas acredito que o FreeBSD também tenha uma porta. É bastante poderoso e pode fazer mais do que algumas coisas (por exemplo, proxy, balanceador de carga, gateway de aplicativo), incluindo o que você está pedindo.Leia as páginas man, particularmente as seções 'Filter Rules' e 'Protocols':
Definitivamente, pule na lista de discussão 'misc' do openbsd se você tiver problemas. A comunidade é rápida e o autor está frequentemente disponível.
relayd
está intimamente conectado aopf
filtro de pacotes, que é como ele é capaz de criar regras conjuntamente para a Camada 3 e 7O problema que vejo aqui é que você precisa aceitar a conexão TCP antes de ver a solicitação http. Portanto, mesmo que o sistema pudesse usar dados no nível do aplicativo, ele não teria esses dados no momento em que precisa decidir para onde a conexão precisa ir.
Não acho que haja muita escolha a não ser ter um "proxy reverso" que encerra a conexão TCP do cliente e estabelece uma conexão TCP progressiva com o servidor de origem.