CONNMARK em pacotes reescritos

2

Eu tenho um host, no qual eu reescrevo saddr e daddr dos pacotes IP que chegam a ele, isso é feito pelo programa, empregando libnetfilter_queue. Basicamente age como proxy. Por exemplo, o pacote vem de 10.0.0.2 destinado a este host (IP host ), nós reescrevemos este pacote para vir de IP host para por exemplo. google.com. Eu quero usar conntrack para marcar o pacote de resposta google.com → IP host para ir para a mesma fila para ser reescrito e ser enviado de volta para 10.0.0.2.

Eu uso duas regras PREROUTING:

iptables -tmangle -A PREROUTING -p tcp -s 10.0.0.2 -j CONNMARK --set-mark 0x10
iptables -tmangle -A PREROUTING -m connmark --mark 0x10 -j NFQUEUE

Mas os pacotes de resposta não possuem este ctmark, e eu vejo apenas o pacote 10.0.0.2 → IP host na saída do programa conntrack.

Então a questão é se é possível fazer assim? Ou não entendo o que a CONNMARK faz? Eu acho que deve definir essa marca em tudo relacionado à conexão, incluindo os pacotes de resposta.

    
por aikipooh 05.11.2013 / 12:39

1 resposta

0

Fechar. O CONNMARK não faz nada aos pacotes - ele apenas armazena uma marcação na tabela conntrack com a entrada daquela sessão. Esse connmark deve ser usado mais tarde com "--restore-mark", que é necessário para que um pacote "herde" a marca que foi atribuída à sua conexão.

Isso pode ser interrompido com base na sua reescrita do pacote no espaço do usuário. restore-mark pode não associar o pacote de saída com a entrada conntrack que foi criada usando o original src / dst.

    
por 24.12.2013 / 21:17