Usei o IPROUTE com peso também. E para failover usei o script famoso da internet que é o gwping com algumas alterações. Vou te passar a configuração do srcipt de balançeamento abaixo:
# Balanceamento de Carga
# Variáveis
ROTAEMBRATEL="x.x.x.x"
ROTAMUNDIVOX="y.y.y.y"
IPEMBRATEL="x.x.x.z"
IPMUNDIVOX="y.y.y.z"
ETHE="eth0"
ETHM="eth1"
ROTADEL="route del default gw"
echo "Deleta rotas padrão"
$ROTADEL $ROTAMUNDIVOX
$ROTADEL $ROTAEMBRATEL
echo "OK"
ip route flush table embratel
ip route flush table mundivox
ip route add x.x.x.x/x dev eth0 src x.x.x.x table embratel
ip route add default via x.x.x.x table embratel
ip route add y.y.y.y/y dev eth1 src y.y.y.y table mundivox
ip route add default via y.y.y.y table mundivox
ip rule add from x.x.x.x table embratel
ip rule add from y.y.y.y table mundivox
# A regra abaixo é responsável pelo balanceamento com peso
ip route add default scope global nexthop via y.y.y.y dev eth1 weight 1 nexthop via x.x.x.x dev eth0 weight 3
ip route flush cache
# Firewall
# Fundamental estar desabilitado para funcionar o roteamento com 2 links
echo "0" > /proc/sys/net/ipv4/conf/default/rp_filter
echo "Balanceamento de carga OK!!!"