Você precisa que o host B faça traduções NAT para que A não veja o mesmo pacote novamente. Em vez disso, B deve enviar pacotes através de A como se fossem originados de B. Para conseguir isso, você adiciona uma regra iptables
da seguinte forma:
# iptables -t nat -A POSTROUTING -s ip-of-C -j MASQUERADE
Por essa regra, todos os pacotes de B serão reescritos para serem originados de B, mas mantendo uma tabela de retrotraduções, para que as respostas associadas possam ser retrotraduzidas e enviadas para C.
Observe a parte -s ...
que limita a regra a ser aplicada apenas aos pacotes originados de C (ou pode ser definida como a LAN local) e, por exemplo, não aos pacotes de resposta.
EDIT (levando em consideração o comentário do theuncle): A explicação de por que ele não funciona sem o NAT seria que o host B perceba que o pacote entra e sai inalterado na mesma interface, para melhorar o trabalho em rede. dizendo a C para falar diretamente com A sobre o tráfego em questão.