Dortmund lost to Napoli two weeks ago but Robert Lewandowski put them on course for victory in the 19th minute and Marco Reus made it two seven minutes after the break.
Lewandowski finished off the scoring in the 79th minute from the penalty spot after Reus had been fouled.
Ozil opened the scoring after eight minutes and then set up Olivier Giroud for the second seven minutes later.
In-form Jackson Martinez gave the visitors a 16th-minute lead but Diego Godin levelled 13 minutes into the second half and Turan struck the winner in the 86th minute.
The Russian league leaders hit a post early on through Hulk but were dealt a major blow just before half-time when Axel Witsel was sent off.
Celtic kept Barca at bay until the 76th minute, while Fabregas' header came moments after the hosts had twice gone agonisingly close.
Celtic's task was made even harder by the 59th-minute sending off of midfielder Scott Brown for a foul on Neymar.
The Dutchmen thought they had won it through Stefano Denswil's 90th-minute header but there was still time for Balotelli to be felled by Mike van der Hoorn and the Italian converted from the spot.
The Londoners were dealt a blow early on when Fernando Torres suffered a knee injury and was replaced by Samuel Eto'o.
But they soon had something to cheer as Eto'o set up Ramires for the opener after 20 minutes and a minute before half-time Eto'o's shot was pushed against Daniel Georgievski by goalkeeper Ciprian Tatarusanu for an own goal.
Ramires grabbed his second 10 minutes after the break to make sure of the three points, and Frank Lampard added some late gloss in the final minute.