Como depurar freqüentes “conexão redefinida pelo peer”

1

Recentemente, comecei a ter "redefinições de conexão por pares" muito frequentes em chamadas para um provedor externo. Meu aplicativo (cliente) é um aplicativo Go, fazendo algum POST simples para um provedor externo via HTTPS

Algum contexto:

  • O aplicativo cliente está sendo executado no docker.
  • A "conexão redefinida pelo peer" é frequente, mas errática.
  • O provedor diz que nada está errado no final. Ok, RST pode vir de qualquer lugar entre nós.

A instância do host ifconfig:

docker0   Link encap:Ethernet  HWaddr [REDACTED]
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

eth0      Link encap:Ethernet  HWaddr [REDACTED]
          inet addr:10.208.19.134  Bcast:10.208.19.255  Mask:255.255.255.128
          inet6 addr: fe80::8d:fdff:fe90:f410/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:37685240 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37927624 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13408927179 (12.4 GiB)  TX bytes:14057395581 (13.0 GiB)

Eu tentei:

  • Ran tcpdump -vv -i eth0 -s 65535 -n dst host [[PROVIDER IP]] -w capture.cap & na instância do host (EC2)
  • Captura aberta com o Wireshark e procurada por tcp.flags.reset==1

Não foi possível encontrar nada. E tenho certeza de que houve conexão redefinida pelo peer durante a captura (como temos logging no lugar). Tudo que eu queria entender é de onde o RST está vindo (se é que isso é possível).

Então, quais opções eu tenho que procurar pela causa raiz de todos esses erros repentinos?

    
por eduardev 19.06.2018 / 15:46

1 resposta

0

Para provar que os pacotes são originados do lado de fora, tente adicionar isso ao seu roteador:

iptables -I FORWARD -i eth0 -p tcp --tcp-flags RST RST -j DROP

Esteja ciente de que os pacotes RST são necessários na operação normal e isso pode rapidamente sobrecarregar seus recursos, limitando-os a um determinado --sport , mesmo para testes, a menos que o roteador seja usado muito levemente teste.

Substitua FORWARD por INPUT se você estiver testando e filtrando em uma única máquina. Substitua eth0 pela sua conexão de internet real.

Para uma confirmação rudimentar, você pode emitir iptables -nvL | grep spt e ver como o número no início aumentou.

    
por 19.06.2018 / 16:27