Needing a huge turnaround from the first leg last week, Real seemed to have run out of steam after Gonzalo Higuain, Cristiano Ronaldo and Mesut Ozil had passed up early opportunities.
However, after Robert Lewandowski had smashed the underside of the bar and Diego Lopez prevented Ilkay Gundogan with an incredible save from close range, Madrid were given a lifeline in the 83rd minute when substitute Karim Benzema swept home Ozil's low cross.
And six minutes later they had real hope of an incredible comeback as captain Sergio Ramos rifled a shot into the roof of the net. But Dortmund withstood the onslaught in an agonising five minutes of stoppage time to seal their place at the final at Wembley next month. "It is a shame," Ramos told TVE afterwards. "You can lose but it is better to do it like this.
Football is like this. "If we had done half of what we have done today in Dortmund, it would have been different. "The fans have roared us on and it was a shame that we didn't take the chances we had in the first-half." For Real and coach Jose Mourinho it meant going out at the same stage for the third successive year.
The intense atmosphere created by the home fans before kick-off was matched by their team's energetic start and Higuain missed a great chance after just four minutes as he was slipped in by Ozil but Roman Weidenfeller stood up well to block his effort. Angel Di Maria and Ronaldo then saw efforts fly over and Dortmund suffered a big blow on 12 minutes when Mario Goetze pulled up with an injury after hitting a routine ball forward.
However, whilst still playing with 10 men, they had their best chance of the opening period as Lewandowski controlled a long free-kick from Gundogan but placed his shot too close to Lopez. Seconds later Ronaldo had an even better chance as he too chested down a long ball before volleying straight into Weidenfeller's body before Kevin Grosskreutz could even come on to take Dortmund back up to their full compliment.
Ozil then had the best opportunity of the first half as a lovely reverse ball from Di Maria put him clean through on goal but he pulled his shot wide of the near post. After a chastening first 15 minutes Dortmund settled admirably as their patience in possession made an increasingly desperate Madrid chase shadows at times.
The Germans could even have gone into half-time ahead on the night when Jakub Blaszczykowski fluffed his attempt from Lukasz Piszczek's intelligent cutback. Dortmund's ascendancy continued after the break and Lewandowski was desperately unlucky to see a fierce drive from a narrow angle come back out after striking the underside of the bar.
Mourinho threw on Benzema and Kaka as a last throw of the dice 10 minutes into the second half but it seemed to be a fruitless move as Madrid lost their shape against a Dortmund side flowing with confidence. Another lovely move from the visitors saw Marco Reus tee up what seemed like a certain goal for Gundogan only for Lopez to somehow repel the ball with his trailing arm.
The hosts were then given a glimmer of hope eight minutes from time when Kaka released Ozil and his cross was turned home by Benzema. And they were soon rampant when Benzema set up Ramos to crash home a second five minutes later. However, a Ramos header that sailed wide in stoppage time was the closest they came to sealing a remarkable comeback as Dortmund booked their place to face either Barcelona, or more likely, Bayern Munich at Wembley.