If my solution doesn't work, then there is something you haven't told us about your setup.
A -> B -> C
you're able to ping C unless "C" is dropping stuff
A: ping c
B: tcpdump -i eth0 icmp
C: tcpdump -i eth0 icmp
now see what packets go back and forth on B and C