Dortmund had it all to do after losing the first leg 3-0 in Spain but last season’s runners-up looked on course to stage a remarkable comeback when, after seeing Madrid winger Angel Di Maria miss an early penalty, they scored twice through Marco Reus during a first-half onslaught.
The German side continued to throw everything at Madrid in the second half, hitting the woodwork and going close on a number of other occasions, but they could not find the third goal they needed as Carlo Ancelotti’s men held on for a 3-2 aggregate win.
“We suffered more than we should have,” said Spanish international captain Casillas. “The first two goals were our mistakes. At 2-0 down, with a penalty missed too, a lot goes through your head. We can’t make those errors in the semi-finals.”
Dortmund beat Madrid 4-1 at home in last season’s semi-finals but they needed an even better result this time following the first-leg loss.
However, they welcomed back the four-goal hero of last year’s match as Robert Lewandowski returned after suspension, while in a further boost for the hosts Madrid star Cristiano Ronaldo was only named on the bench after missing the weekend league match with a knee problem.
That gave Dortmund a lift before kick-off, but any optimism in the home camp should have been extinguished in the 16th minute when Madrid won a penalty after Fabio Coentrao’s cross struck the arm of Lukasz Piszczek.
In the absence of regular taker Ronaldo, Di Maria stepped up for the penalty but he slipped just as he shot and saw his effort well saved by Roman Weidenfeller diving to his left.
The miss galvanised the home side and they laid siege to the Madrid goal for the remainder of the half.
The unmarked Henrikh Mkhitaryan should have scored in the 19th minute when he side-footed wide following good work by Lewandowski, but within five minutes they were ahead thanks to a combination of Reus and a terrible error from Pepe.
The Portugal centre-back’s attempted back header was pounced on by Reus and he nipped it past Iker Casillas before sliding it into the net.
Dortmund made it 2-0 in the 37th minute. Another mistake from the visitors saw Asier Illarramendi carelessly give the ball away to Reus, who sent in Lewandowski. Casillas tipped the Poland international’s shot onto the post but Reus followed up to slam the loose ball into the roof of the net.
Real started the second half well and Gareth Bale and Karim Benzema both threatened.
However, in the 64th minute they survived a huge let off when Mkhitaryan rounded Casillas but, with the goal at his mercy, he shot against the near post. Dortmund continued to pound Casillas goal but Real held out to edge into the semi-finals.
BORUSSIA DORTMUND: Weidenfeller, Piszczek (Aubameyang 81), Durm, Kirch, Friedrich, Hummels, Reus, Mkhitaryan, Lewandowski, Jojic, Großkreutz.
REAL MADRID: Casillas, Carvajal, Fábio Coentrão, Alonso, Pepe, Ramos, Illarramendi (Isco 45), Modric, Benzema (Varane 92), Di María (Casemiro 73), Bale.
Ref: Damir Skomina.