Denis Cheryshev and Andrej Kramaric struck for either side during 90 minutes. Domagoj Vida looked like he had won it for Croatia in extra-time, only for naturalised hero Mario Fernandes to find an even later equaliser to force a penalty shootout.
From jubilation to sorrow, Fernandes then turned villain after missing the target from the spot, with Fyodor Smolov also kept out in the shootout that was won 4-3 by Croatia.
As the more technically able side, it was Croatia who unsurprisingly dominated possession in the opening half hour of the contest. Yet Russia, backed by a hopeful and optimistic home crowd in Sochi, actually looked the more threatening without creating any clear chances.
Certainly, every time the ball got into the final third, the whole stadium was willing it to nestle in Danijel Subasic's goal. And nestle is exactly what it did when Cheryshev broke the deadlock, curling a wonderful left footed shot into the top corner after playing an inch perfect one-two with Artem Dzyuba. Subasic could only stand and watch as the shot flew past him.
That goal gave an already vocal crowd an even greater voice. Despite that, the lead lasted only eight minutes after Kramaric carefully directed a Mario Mandzukic cross beyond the stretch of Russian goalkeeper Igor Akinfeev in the closing stages of the first half.
Looking to soak up pressure and counter attack, the hosts defended very deep after the break. But all of Russia held its collective breath when a shot from Ivan Perisic on the hour mark struck the inside of the post and the ball somehow rolled across the face of the goal to safety - the Croatian winger couldn't believe he hadn't scored.
Russian substitute Aleksandr Erokhin put a header over the bar and Croatia huffed and puffed without asking further questions of Akinfeev. Neither side could go ahead inside 90 minutes.
The reaction to Vida's goal was almost one of shock as it crept through the legs of teammate Vedran Corluka and into the bottom corner, with the home crowd left temporarily silent and in disbelief as the goalscorer reeled away and ripped off his shirt in celebration.
Subasic stopped Daler Kuzyayev from equalising in the second half of extra-time, but it was only moments later when Russia finally did have their dramatic equaliser as Fernandes met a fine Alan Dzagoev free-kick with a glancing header and expertly guided the ball into the far corner.
By the time it came to the shootout, both sets of players were exhausted, as Ivan Rakitic struck the winner for Croatia after Russian misses from Fernandes and Fyodor Smolov.
Fyodor Smolov (Russia - saved)
Marcelo Brozovic (Croatia - scored)
Alan Dzagoev (Russia - scored)
Mateo Kovacic (Croatia - saved)
Mario Fernandes (Russia - missed)
Luka Modric (Croatia - scored)
Sergei Ignashevich (Russia - scored)
Domagoj Vida (Croatia - scored)
Daler Kuzyayev (Russia - scored)
Ivan Rakitic (Croatia - scored)
Russia: Akinfeev, Fernandes, Kutepov, Ignashevich, Kudriashov, Cheryshev (Smolov - 67'), Kuzyayev, Zobnin, Golovin (Dzagoev - 102'), Samedov (Erokhin - 54'), Dzyuba (Gazinsky - 79')
Croatia: Subasic, Vrsaljko (Corluka - 97'), Lovren, Vida, Strinic (Pivaric - 74'), Modric, Rakitic, Perisic (Brozovic - 63'), Kramaric (Kovacic - 88'), Rebic, Mandzukic