The visitors had raced into an early 10-0 lead as Argentina international Juan Martin Hernandez kicked a penalty and converted Bernard Le Roux’s try.
But a try from Gonzalo Canale, converted by Brock James, got Clermont back within three points and further scores followed after the break for prop Thomas Domingo and replacement Jason White. James converted both those scores to put the hosts 21-10 ahead.
Julien Jane pulled a try back for Racing but captain Aurelien Rougerie grabbed the vital fourth try to seal Clermont’s win, and the extra point, with nine minutes remaining.
Leinster’s superior head-to-head record with Clermont means they still hold all the aces as they prepare to face Saracens today.
A bonus-point victory over the English side would give Leinster an unassailable five-point lead and guarantee their qualification ahead of their final game away to Paris outfit Racing.
A win of any sort will put them in a commanding position to top the pool, as well as giving them a favourable chance if they are forced to compete for a best runners-up slot.
Scorers for Clermont: Canale, Domingo, White, Rougerie try each; James 3 cons, Parra con.
Scorers for Racing Metro: Le Roux, Jane try each; Hernandez 2 cons, pen.
CLERMONT: Baby; Fofana, Rougerie, Canale, Malzieu; James, Senio; Domingo, Paulo, Ric; Pierre, Jacquet; Bonnaire, Lapandry, Lauaki.
Replacements: Lavea for James (70), Parra for Senio (43), Zirakashvili for Domingo (68), Debaty for Ric (49), White for Jacquet (55).
RACING METRO: Scarbrough; Fall, Vakatawa, Masi, Saubade; Hernandez, Durand; Brugnaut, Festuccia, Sa; Ghezal, van der Merwe; Vaquiin, Le Roux, Galindo.
Replacements: Jane for Fall (58), Chavancy for Vakatawa (70), Loree for Durand (60), Lo Cicero for Brugnaut (49), Battut for Galindo (53).
Referee: Wayne Barnes (RFU).