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
)