Preston looked to apply some early pressure, with Kevin Davies making a run out wide before crossing in for Neil Kilkenny, who was running towards goal. However, Dorus de Vries came off his line to claim the ball.
The home side continued to look stronger than their opponents in the opening 10 minutes, but Forest soon started to attack.
Davies forced De Vries into a good save with a backheel as the home side looked for an equaliser before the break.
Holmes had a chance to power the ball in following Keith Keane's flick, but De Vries got out to parry it away.
Davies unleashed a powerful strike from 20 yards out which went wide, and Mackie almost got in for his second, but he was crowded out in the box.
Simon Cox then thought that he had added a second for Forest, but a late flag from the official ruled out his half-volley from the middle of the box.
Preston striker Davies tried a low strike in the box, but it was deflected away by a block from Greg Halford. However, the home players appealed for a penalty, believing that the midfielder handled the ball, but the referee said no.
The Lilywhites pushed forwards as the match reached stoppage time, and Joe Garner beat three Forest defenders before hitting the crossbar with a powerful shot.
Forest wrapped up the win and their place in the fifth round thanks to Darius Henderson's volley from 25 yards.