Cristiano Ronaldo’s opener for Madrid was cancelled out by Pierre-Emerick Aubameyang, before Varane tapped home a rebound from the post in the 68th minute, only for Schurrle to equalise again late on.
Gareth Bale raced on to a ball into the box in the 18th minute and back-heeled it to Ronaldo immediately behind him, and the Portuguese took a first-time shot for his 98th career goal in European competition.
But Dortmund quickly regained their footing to control most of the first half. And they were back level two minutes before the break after a comical error from Real keeper Keylor Navas.
Raphael Guerreiro sent a long free kick right at the Costa Rican, who decided to punch it away, but it came back toward him off Varane’s head and Aubameyang was on hand to push it over the line.
Ronaldo then thought he’d restored Real’s lead, but his header just before the half-time whistle was ruled out for offside.
The visitors did retake the lead midway through the second half when Ronaldo’s cross to the back post fell to Karim Benzema to volley off the near post, and Varane tapped it in.
Dortmund put on Christian Pulisic in pursuit of an equaliser, and the 18-year-old played a part in the final goal when he crossed for Aubameyang, who missed his overhead kick, but it fell to Schurrle to blast into the roof of the net.
Watch the video below: