Exclui entradas específicas do conntrack?

3

em uma configuração multi-ISP, estou roteando e tráfego específico de NAT, por exemplo VoIP, através de interface específica - para um provedor distinto. Quando uma das interfaces (ou rotas) fica indisponível, todas as conexões que a usavam precisam ser eliminadas e o tráfego subseqüente deve ser roteado através da conexão ainda em funcionamento. Após a mudança no status, estou redefinindo e carregando entradas iptables apropriadas e entradas de roteamento (é "shorewall restart" - estou usando o shorewall).

O problema é que as entradas conntrack ainda presentes fazem com que o endereço externo antigo (e agora errado) ainda esteja sendo usado para NAT para essas conexões! Depois de 'conntrack -D', o NAT funciona como esperado novamente.

Gostaria de excluir apenas as entradas do conntrack que pertencem ao antigo endereço externo ou resolver o problema de uma maneira que não afetaria as conexões por meio de outras interfaces.

Por exemplo - Gostaria de excluir todas as entradas do conntrack tendo destino de conexão reversa dst=old.ext.ip.adr , como

udp 17 164 src=192.168.158.3 dst=213.208.5.40 sport=5060 dport=5060 packets=178 bytes=104509 src=213.208.5.40 dst=old.ext.ip.adr sport=5060 dport=5060 packets=234 bytes=127268 [ASSURED] mark=256 secmark=0 use=2

O que eu já tentei:

# conntrack -D -r 212.108.43.143
^C (nothing happens, it just hangs)
# conntrack -D -r 213.208.5.40 -d 212.108.43.143
Operation failed: such conntrack doesn't exist

Obrigado antecipadamente! Cumprimentos, Zrin

    
por Zrin 08.03.2012 / 14:26

3 respostas

2

A solução é fornecida aqui .

Eu tenho uma tarefa semelhante - para excluir entradas específicas do conntrack relacionadas a conexões UDP para um host de Internet específico e ser SNAT'ed, então criei o seguinte script:

#!/bin/sh

set -e -u

HUB=AAA.BBB.CCC.DDD # target host's IP address

value()
{
    echo ${1#*=}
}

/usr/sbin/conntrack -L conntrack -p udp -d $HUB |
    while read proto _ _ src dst sport dport _; do
       /usr/sbin/conntrack -D conntrack \
          --proto 'value $proto' \
          --orig-src 'value $src' \
          --orig-dst 'value $dst' \
          --sport 'value $sport' \
          --dport 'value $dport'
done
    
por 20.08.2012 / 18:51
0

Tente,

conntrack -D --src-nat --reply-dst old.ext.ip.adr
    
por 12.05.2012 / 10:22
0

Crie um arquivo chamado clrcontrack, cole o código abaixo, dê ao usuário o acesso adequado, torne-o executável, execute-o como "clrcontrack ip port", por exemplo, clrcontrack 192.168.56.123 80. Ele deve limpar todos os registros de contração de estado estabelecidos para porta 80 no ip. Se você não quiser direcionar o estado, remova a parte ESTAB do grep ou substitua-a de acordo com o estado desejado.

 /usr/sbin/conntrack -L |grep $1 | grep ESTAB |grep 'dport=$2' |
     awk '{ system("/usr/sbin/conntrack -D --orig-src '$1' --orig-dst " 
     substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst $2");}';
    
por 06.01.2018 / 21:17