In the 72nd minute, opportunity knocked again for Russia. Fedor Smolov played the ball out wide to Fernandes on the right and the full-back crossed only for substitute Aleksandr Erokhin to head over from an inviting position.
Right at the end of normal time, Subasic (the Croatia keeper) lunged to stop a deflected shot and looked as though he might have pulled his hamstring.
Extra time came and so did more drama. A Luka Modric corner found Domagoj Vida, who bundled in what looked like an ugly winner on 100 minutes.
But the Russians would not be beaten. Their coach Stanislav Cherchesov urged the crowd in Sochi to make even more noise. When they did, Russia responded with a goal.
A fantastic free-kick by Dzagoev was met by Mario Fernandes who powered the ball into the inside of the left post on 115 minutes.
There was precious little time for many more clear cut chances and the game headed, almost inevitably, to penalties.
Smolov dinked it straight to Subasic and gave Croatia the advantage from the get go, but Real Madrid's Kovacic also spurned his chance.
Fernandes, who had headed the goal to get Russia to penalties missed horribly and Modric snuck his penalty in off the post. Rakitic finished off the job, and it is Croatia who will play England on Wednesday evening.