The boot of Racing Metro fly-half Jonathan Wisniewski condemned London Irish to defeat in the Heineken Cup.
It leaves the Exiles in third place in Pool Two and with only a faint hope of reaching the quarter-finals.
Wing Tom Homer kicked 14 points for Irish, but Wisniewski slotted three penalties and three drop-goals.
Sereli Bobo added a try early in the second half to keep the French in charge, although David Paice touched down with the last move of the game.
But the result leaves Toby Booth's side battling to qualify for the knock-out stages as Racing belied their status as the bottom team in the pool, and one with little to play for, with a battling display.
Homer and Wisniewski were the only two players on the scoresheet in the first half, the latter profiting from Irish indiscipline.
The Exiles twice infringed at the ruck and were punished by Wisniewski while the Racing pack, led by France international Sebastien Chabal, twice got within range to set up drop-goal opportunities for their kicker.
Racing held a narrow 15-12 advantage at the interval and scored the first try of the afternoon when an Irish player dropped the ball and Bobo kicked on to score under the posts, Wisniewski adding a simple conversion.
The visitors remained dominant, although Wisniewski was sin-binned late on for a deliberate knock-on.
And Irish at least had the consolation of a losing bonus point after hooker Paice's late try was converted by Homer to keep alive the Exiles' faint hopes of reaching the last eight.
London Irish: D. Armitage, Homer, Ansbro, Spratt, Thompstone, Jarvis, Allinson, Dermody, Paice, Ion, Evans, Garvey, Danaher, Gibson, Treviranus.
Replacements: Hape for Spratt (63), Ojo for Thompstone (69), Hodgson for Allinson (73), Lahiff for Dermody (63), Rautenbach for Ion (63), Casey for Evans (68), Thorpe for Treviranus (52).
Not Used: Blaney.
Racing Metro: Germain, Saubade, Vakatawa, Matavesi, Bobo, Wisniewski, Durand, Brugnaut, Bianchin, Orlandi, Dellape, van der Merwe, Vaquiin, Galindo, Chabal.
Replacements: Descons for Durand (63), Coetzee for Brugnaut (71), Noirot for Bianchin (52), Tuugahala for Orlandi (52), Nailiko for Dellape (52), Ghezal for van der Merwe (48), Le Roux for Galindo (40).
Not Used: Hernandez.
Sin Bin: Wisniewski (59).