Penrith Panthers ended a 17-year wait to return to the NRL Grand Final, beating South Sydney Rabbitohs 20-16 in a thriller at ANZ Stadium.

Ivan Cleary's side set up a clash next weekend with the Melbourne Storm, thanks to tries from Brian To'o, Tyrone May and Dylan Edwards.

Penrith's lone appearance in the Grand Final saw them beat the Sydney Roosters in 2003, and now they can target a second premiership.

It will be a battle between the two sides that were the strongest across the campaign, with Penrith having lost just one of 20 regular-season games.

In Saturday's preliminary final, Alex Johnston gave the Rabbitohs a dream start with a fourth-minute opening try, dotting down after captain Adam Reynolds put a perfect kick into the left corner.

Moments later, however, Johnston was at fault when he dropped a high kick and allowed To'o to barge through.

The Panthers were 12-6 ahead by the half-hour mark after May clutched a clever kick over the defence from Nathan Cleary, and a Cleary penalty just before the interval stretched their lead to eight points.

Dane Gagai snatched a try back for the Rabbitohs 10 minutes into the second half, making it a tight game again at 14-12.

Yet Isaah Yeo made a burst through the Rabbitohs defensive ranks and fed a short pass to his left, allowing Edwards to dart in under the posts in the 66th minute and stretch their advantage decisively.

Corey Allan pulled back four points for South Sydney, but Reynolds missed the extras and they failed to trouble the scoreboard again.