Isso se deve ao que o Linux chama de filtragem de caminho inverso (veja também wikipedia ) .
Basicamente, se o tráfego vier de um host em uma interface que o tráfego para o host não usaria, o kernel descartará o tráfego.
Corrigir é simples
sysctl -w net.ipv4.conf.$iface_b.rp_filter=2
sysctl -w net.ipv4.conf.$iface_c.rp_filter=2
Substitua $iface_b e $iface_c pelos nomes de interface apropriados.
(em kernels mais velhos, 2 pode estar indisponível, então use 0 )