
Estou tentando configurar um redirecionamento de portal web cativo no CentOS usando a seguinte configuração:
Esta configuração funciona para os primeiros pacotes, mas de repente a porta de destino é corrompida na resposta do servidor. O rastreamento do pacote é assim:
Cliente: O host que faz a solicitação da web original. Servidor: Destino original da solicitação Portal: Servidor do portal cativo
Esse rastreamento de pacote é obtido de um local que pode ver o tráfego do cliente e do portal. As linhas que começam com c: são do lado do cliente e p: são do lado do portal.
c: client:57877 -> server:80 [SYN]
p: client:1092 -> portal:80 [SYN] NAT adjusted SYN
p: portal:80 -> client:1092 [SYN, ACK]
c: server:80 -> client:57877 [SYN, ACL] NAT reversed on the SYN/ACK
c: client:57877 -> server:80 [ACK]
c: client:57877 -> server:80 HTTP GET
p: client:1092 -> portal:80 [ACK]
p: client:1092 -> portal:80 HTTP GET
p: portal:80 -> client:1092 [ACK]
c: server:68 -> client:57877 [ACK]
^^ WTF?!?
Neste ponto, a conexão é mangueira. O cliente não espera um pacote nessa porta e envia um RST. O número da porta quebrada aumenta em 1 cada vez que esta conexão é tentada (presumivelmente funcionará uma vez daqui a 12 tentativas). Todas as retransmissões têm o mesmo número de porta quebrado na resposta. Não tenho ideia do que poderia estar causando isso.
Isso é um bug ou estou fazendo algo errado? Esta máquina tem uma configuração um tanto incomum. Está configurado como uma ponte. Para aplicar a regra NAT apenas aos pacotes que vão em uma única direção, os pacotes são marcados primeiro com uma regra NAT ebtables, e essa marca é verificada quando o NAT iptables é aplicado.
Isso está no Enterprise Linux 6 com Kernel 2.6.32-279.5.2.el6.x86_64
A regra NAT é:
target prot opt in out source destination
DNAT tcp -- ilb any anywhere anywhere multiport dports http,https mark match 0x8 to:<portal IP>
ilb é a ponte.