City dominated the early possession but Leipzig, lining up in a nominal 4-5-1, were happy to absorb the pressure and hit the champions on the counter-attack. Xavi Simons span the first attempt on goal narrowly past Stefan Ortega's far post and the visitors had the lead minutes later. Janis Blaswich's clearance found its way to Openda and the Belgian sped clear before finishing low beyond former Arminia Bielefeld man Ortega. Ruben Dias headed over Blaswich's crossbar before Erling Haaland uncharacteristically miscued a handful of chances. Rico Lewis then blazed high on the half hour. Leipzig punished the profligacy soon after, with Openda scoring a better version of his opener, spinning Dias before dummying his way past former Leipzig man Joško Gvardiol and finishing low inside the near post. Lukas Klostermann nicked another Haaland chance off his toe and it was 2-0 at the break.
City pulled one back early in the second half when Phil Foden slipped Haaland in for another chance which he steered into the bottom corner, and Foden went from maker to taker soon after when he latched onto Gvardiol's low cross, controlled sharply, and steered home low beyond Blaswich. Benjamin Šeško and Fabio Carvalho entered the fray late on and both had good chances. The former stung Ortega's gloves with a shot from the edge of the box, and the latter even had the ball in the back of the net, but the Liverpool-owned youngster's effort was ruled out with the offside flag going up against him. Haaland headed an effort straight at Blaswich, but there was still time for Julián Álvarez to snatch the win late on.
Match stats
Openda doubled his European haul this season to four, and now has 13 goals in all competitions since his summer arrival from Lens.
Xavi's assist means the PSG-owned youngster now has 15 direct goal involvements in all competitions.
Leipzig were victorious on British soil last season, beating Celtic 2-0. To date, they have won 11 of 23 away games in the Champions League.
Gvardiol made 87 competitive appearances for Leipzig, before moving to City in the summer of 2023.
Man City manager Pep Guardiola won three successive Bundesliga titles with Bayern between 2013 and 2016.
Champions League Group G, Matchday 5 Group G, Matchday 5 Etihad Stadium, Manchester
90'
FULL TIME: Man City 3-2 Leipzig
Manchester City peg RB Leipzig back after Loïs Openda's brace.
87'
GOAL Man City 3-2 Leipzig
Doku and Foden combine on the left before Álvarez finishes coolly.
76'
Carvalho offside
Fabio Carvalho has the ball in the net but the Liverpool-owned youngster was a fraction offside in the build-up.
73'
More Leipzing subs
Yussuf Poulsen and Fabio Carvalho replace Xavi and Amadou Haidara.
71'
Šeško lets fly
Benjamin Šeško stings Ortega's gloves with a shot from the edge of the box.
70'
GOAL! Man City 2-2 Leipzig
City are back on level terms. Gvardiol whips the ball low into Foden and he controls quickly before steering it low beyond Blaswich.
66'
Leipzig chance goes begging
Gvardiol misjudges a long ball forward but there is too much on a subsequent through-ball for Xavi to latch onto it.
60'
Leipzig changes
Benjamin Šeško and Christoph Baumgartner are on for Openda and Emil Forbserg.
57'
Positive from Leipzig
Openda gets City on the back foot and earns a corner… which comes to nothing.
54'
GOAL! Man City 1-2 Leipzig
… and moments later Haaland pulls one back for the hosts with a cool finish into the bottom corner.
54'
City subs
Julián Álvarez and Jeremy Doku are on for Kyle Walker and Jack Grealish - an attacking change for City
46'
Back underway
Can Leipzig add more in the second half?
45'
+ 6
HT: Man City 0-2 Leipzig
An Openda brace has silenced the European champions heading into the break!
45'
+ 3
Haaland header
A textbook downward header from Haaland but not enough on it to test Blaswich.
43'
Well played Klostermann!
Bernardo lofts it through for Haaland but Lukas Klostermann takes it off the Norwegian's toe and City's chance goes begging.
36'
Record tumbling?
City haven't lost at home since last November…
35'
Haaland sitter
Big Erling should have done better than to scoop it over the Leipzig bar from close range.
33'
GOAL! City 0-2 Leipzig
OPENDA!!! What a goal! The Belgian spins Ruben Dias and turns the jets on before dropping Joško Gvardiol and firing inside the near post! Leipzig in dream land!
30'
Lewis chance!
Rico Lewis finds space near the penalty spot but blazes over!
21'
Haaland again
Haaland get clear on the edge of the box but snatches at his attempt.
17'
Haaland chance!
Erling Haaland would have been one-on-one with Blaswich with a better touch but his composure let him down.
15'
Dias heads high
Ruben Dias meets Bernardo Silva's delivery from the left but his header fails to test Blaswich.
13'
GOAL! City 0-1 Leipzig
Loïs Openda springs the offside trap and steers the opener into Ortega's bottom corner.
8'
Xavi round the back
Xavi gets in around the back of the City defence but former Dortmund man Manuel Akanji gets back to cover the danger.
5'
Xavi goes close!
Xavi Simons gets some space on the edge of the box at the other end but his effort spins wide of Stefan Ortega's goal.
3'
City possession
The hosts have had most of the ball so far but Janis Blaswich and co. have had everything covered.
1'
Kick-off!
We're underway at the Etihad!
Leipzig results so far
RBL have done themselves proud in Europe this season, winning their opening game against Young Boys and beating Red Star Belgrade home and away and away. Their lone blemish so far was the reverse fixture, which City won 3-1.
Group G permutations
Both of these sides have already qualified for the knock-out stages, but victory would keep Leipzig in with a chance of finishing top of the section ahead of the champions.
Forsberg leading Leipzig
With Willi Orban injured and Kevin Kampl benched, Emil Forsberg leads Leipzig out at the Etihad.
More on Leipzig's team
Loïs Openda looks like he's ploughing a lone furrow up front with Xavi Simons in support. Yussuf Poulsen and Benjamin Šeško are both on the bench. Timo Werner - another potential option in attack - has a groin injury.
More on City's team
First-choice goalkeeper Ederson is rested for former Arminia Bielefeld man Stefan Ortega, with Jack Grealish preferred on the left flank to Jeremy Doku. Erling Haaland is one of four Bundesliga alumni playing for the champions.
Janis Blaswich had never played in the Bundesliga before the start of last season, but following Péter Gulácsi's long-term injury, the Leipzig goalkeeper has handily filled the gloves of the Hungary international. At 32, he recently received his first call-up to the Germany squad from former Leipzig boss Julian Nagelsmann.
1:12
Forsberg milestone
Leipzig's super Swede is closing in on a 40th Champions League appearance for the Saxony-based side and - now in his tenth season at the club - the 32-year-old is proving as important to the cause as ever.
Winter warmer
The Leipzig squad will be packing their suitcases for a trip to Spain on 2 January and the start of a six-day winter training camp in La Manga. They will play a friendly there, but their opponents are yet to be decided.
Familiar face
Joško Gvardiol left Leipzig for City last summer after making 87 competitive appearances for the Bundesliga outfit over the previous two seasons, including 12 in the Champions league. He played all 90 minutes of City's 3-1 win at his former club earlier in the campaign - will the Leipzig old boy be celebrating again?
Their 2-1 win in Belgrade at the start of November was Leipzig's fourth successive away Champions League victory. They have won nine times on the road in Europe since first making the Champions League in 2017, and have lost only seven away group stage matches in that time.
Leipzig fans will be pondering this one in the lead up to the game. City's Norway international forward helped Borussia Dortmund win five of his former team's seven Bundesliga meetings with Leipzig during his time in Germany and he scored no fewer than 11 goals in those seven games, of which Die Roten Bullen won just one.
2:32
Assured Xavi the key?
What a campaign Leipzig's loan summer signing Xavi Simons is having in the Bundesliga. The Dutch international has been in mesmerising form, racking up 11 goal involvements in the Bundesliga and three in the Champions League to date. Could the 20-year-old be the man to break City's resolve?
The state of play
City won 3-1 in Germany on Matchday 2 and are currently three points clear of Marco Rose's men, which means Leipzig face a big challenge as they try to overhaul Pep Guardiola's side.
Welcome!
Manchester City - the reigning European champions - and RB Leipzig are both already through to the knockout stages, but Die Roten Bullen could still pip City to top spot in Group G.