BERLIN - Borussia Dortmund beat Hertha Berlin 3-0 on Wednesday to set up a German Cup final showdown with Bayern Munich on May 21.

Gonzalo Castro opened the scoring in the 20th minute, firing from distance into the top right corner after Marco Reus' initial effort was blocked by a defender.

With Dortmund wasting a host of chances, Reus finally settled the issue with 15 minutes remaining, set up by Shinji Kagawa on a counterattack as Hertha was threatening a response.

Reus then set up Henrikh Mkhitaryan to round off the scoring in the 83rd.

"I'm very satisfied and very happy with how we played," said Dortmund coach Thomas Tuchel, who had to do without top-scorer Pierre-Emerick Aubameyang due to a foot injury suffered in training. "A huge, huge compliment to the team. We deserved to win."

Dortmund advanced to its third successive final - its eighth altogether - while Hertha had been bidding to reach its first since 1979.

Bayern defeated Werder Bremen 2-0 at home on Tuesday to reach its 21st final.

It was Hertha's first game at home in the German Cup since 2012 - the nine games since were all away - and the Olympiastadion was a sell-out. Hertha general manager Michael Preetz said the club could easily have sold double the available 76,233 tickets.

Hertha's tackling was tenacious but it couldn't prevent Dortmund from dominating possession and chances. Dortmund had 19 efforts on goal compared to the home side's five.

"Dortmund is too quick for us. It's a top team. It was also a lesson for my team. Something was missing," Hertha coach Pal Dardai said.

Hertha defender John Anthony Brooks had to make an important clearance and goalkeeper Rune Jarstein needed to punch the ball away from the lurking Reus before Castro broke the deadlock.

The pattern of the game was set with Dortmund pressing forward and Hertha hoping to catch the catch the visitors on the break.

Reus should have made it 2-0 in the 26th, when he fired wide from Marcel Schmelzer's cross with the goal at his mercy.

Both sets of fans were getting restless - Dortmund's for not making the most of its chances, Hertha's for not doing enough.

Jens Hegeler might have equalized before the break but shot straight at Roman Buerki. It was the first save the Dortmund 'keeper had to make.

The second half began in the same fashion as the first, with Dortmund probing and wasting chances, and Hertha living on scraps while defending doggedly. Niklas Stark made a vital block to deny Schmelzer.

Reus would have put Kagawa through on goal, only to spurn the chance with a wayward pass on the hour, minutes before Jarstein denied Ramos with a fine save and then Mkhitaryan with an even better one.

Hertha rallied toward the end of the game with Salomon Kalou twice going close before Reus finally sealed it.

"It was a great performance, a near perfect game from our team," Dortmund sporting director Michael Zorc said. "No team deserved it more to reach the final than us."

Dortmund's meeting with Bayern will be a repeat of the 2014 final, which Bayern won in extra time, and the 2012 final, which Dortmund won 5-2 to seal its first league and cup double.

"It won't be easy, but we have the resources to beat them," Dortmund captain Mats Hummels said.