This question was actually posted by a colleague of mine. Here's the issue, all of our servers have Intel Pro/1000s, and it's cheaper to link those directly together than to buy a switch capable of handling the server-to-server load (tbh, we can't afford such a switch). We have ip_forward set to 1 on all servers. We're using Gentoo with iproute2. Server C is Gentoo with ifconfig. Here's copies of their conf.d/net's, with the server names being the only thing changed:
Server A eth1 -> Server B eth1
Server B eth0 -> Server C eth2
config_eth1="10.0.2.1 netmask 255.255.255.0"
routes_eth1="add 10.0.2.2 dev eth1
add -net 10.0.1.0/24 dev eth1"
config_eth1="10.0.2.2 netmask 255.255.255.0"
routes_eth1="10.0.2.0/24 dev eth1"
config_eth0="10.0.1.1 netmask 255.255.255.0"
routes_eth0="10.0.1.2 dev eth0"
config_eth2="10.0.1.2 netmask 255.255.255.0"
routes_eth2=10.0.1.1 dev eth2
10.0.2.0/24 via 10.0.1.2"
Server A has no problem talking with Server B, and server B has no problem talking with Server C, but A and C cannot communicate via B. During a communication attempt, tcpdump shows unanswered arp who-has requests. I've never used Linux as a router before, so my knowledge on the topic is quite limited.