Недавно у меня стали происходить очень частые «сбросы соединения одноранговым узлом» при звонках к внешнему провайдеру. Мое приложение (клиент) - это приложение Go, выполняющее простой POST для внешнего провайдера через HTTPS.
Некоторый контекст:
RST
может прийти откуда угодно между нами.Экземпляр хоста 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)
Я попытался:
tcpdump -vv -i eth0 -s 65535 -n dst host [[PROVIDER IP]] -w capture.cap &
на хост-экземпляре (EC2)tcp.flags.reset==1
Ничего не нашел. И я уверен, что во время захвата одноранговый узел сбросил соединение (поскольку у нас есть вход в систему). Все, что я хотел понять, это где RST
исходит (если это возможно).
Итак, какие варианты мне нужны, чтобы найти первопричину всех этих внезапных ошибок?
Чтобы доказать, что пакеты исходят извне, попробуйте добавить это в свой маршрутизатор:
iptables -I FORWARD -i eth0 -p tcp --tcp-flags RST RST -j DROP
Имейте в виду, что для нормальной работы необходимы пакеты RST, и это может быстро перегрузить ваши ресурсы, поэтому ограничьте их до определенного --sport
, даже для тестирования, если только маршрутизатор не используется очень осторожно и оставьте его на месте только для этого теста.
Замените FORWARD на INPUT, если вы тестируете и фильтруете на одной машине. Замените eth0 вашим фактическим подключением к Интернету.
Для элементарного подтверждения вы можете выдать iptables -nvL | grep spt
и посмотрите, как увеличилось число на старте.