Você tem uma situação NAT hairpin aqui, que suas regras atuais do iptables não suportam. Quando o container envia o pedido, o pacote se parece com isto:
10.0.3.21:12345 -> 1.2.3.4:7999
O gateway então DNATs o pacote para isso, e envia de volta para o recipiente:
10.0.3.21:12345 -> 10.0.3.21:7999
O container recebe os pacotes e envia uma resposta assim:
10.0.3.21:7999 -> 10.0.3.21:12345
i.e. Ele é endereçado diretamente ao contêiner em si. Mas a porta 12345 não sabe sobre uma conexão com 10.0.3.21:7999, porque a conexão era com 1.2.3.4:7999 e, portanto, a resposta é ignorada.
A solução também é SNAT o pacote no gateway para que a resposta retorne ao gateway, que então desfaz os dois NATs. Tente adicionar algo assim:
iptables -t NAT -A POSTROUTING -o lxcbr0 -d 10.0.3.21 -s 10.0.3.21 -j SNAT --to 10.0.3.1