У меня 2 бокса Linux со следующим описанием
Блок A: Ядро: Linux 2.6 IP: 172.19.1.99/24
Блок B: Ядро: Linux 3.14 IP: 192.168.200.100/24
Подключен к коммутатору уровня 2
Оба устройства запускают службу широковещательной передачи UDP и службу приемника UDP. Все, что было отправлено по трансляции, принимается службой приема. Эти службы вместе образуют настраиваемый протокол обнаружения, используемый веб-приложением, работающим на этих устройствах.
Проблема:
Когда Box A перемещается в подсеть 192.168.200.0/24, а затем возвращается в подсеть 172.19.1.0/24, служба приемника на Box B по-прежнему будет принимать широковещательные сообщения от Box A, но технически он должен прекратить прием широковещательных сообщений от A. Теперь та же служба, работающая в Box A, не принимает широковещательную рассылку от Box B в этот момент.
Просто чтобы подтвердить, что я подключил strace к службе приема в Box B, и я вижу recvfrom
Системный вызов действительно принимает широковещательную рассылку, отправленную ящиком A на адрес 192.168.200.255.
Теперь, если я убью службу приема в Box B и перезапущу ее, она перестанет получать широковещательные рассылки, отправленные из Box A.
Короче говоря, проблема возникает только тогда, когда блок, работающий в одной подсети, переносится в другую подсеть и виден только в блоке B.
Есть идеи, почему это может происходить?
ОБНОВЛЕНИЕ: просто чтобы добавить больше информации, Box B также использует iptables с модулями conntrack, может ли это как-то повлиять на это поведение ?.