Я пинг хоста:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=47 time=53.8 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=47 time=54.2 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=47 time=49.1 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 49.112/52.401/54.202/2.329 ms
И сразу после прерывания первой команды ping я делаю это снова:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2016ms
100% потеря пакетов. Зачем?
Это происходит каждый раз. Только после ожидания не менее 30 секунд (дайте или возьмите секунду) после прерывания первого пинга перед выполнением второго пинга второй пинг будет работать так, как должен. Выполнение команды ping до истечения 30 секунд приведет к сбою команды ping (как показано выше), даже если я позволю ему пройти за 30-секундную отметку, но 30-секундный "таймер" не будет сброшен.
Пинг разных хостов с первой и второй попытки ничего не меняет.
Запустив tcpdump во время пинга, я вижу, что эхо-сигналы ICMP отправляются и ответы ICMP принимаются в обоих случаях.
Я также воспроизвел проблему, используя модуль Perl Net::Ping, поэтому проблема не ограничивается /bin /ping (если только Net::Ping не использует /bin /ping).
Я использую довольно стандартную, текущую установку Debian, которая работает как брандмауэр и использует NAT, используя, как я полагаю, довольно стандартные правила iptables.