Dortmund raced into a 2-0 lead after only five minutes as Henrikh Mkhitaryan, then Marco Reus scored to leave the Russians reeling.
The hosts pulled two goals back after the break as central midfielder Oleg Shatov scored, then Brazil's Hulk converted a penalty.
On both occasions Dortmund gave the perfect response as Lewandowski scored just seconds later as the Germans take a commanding lead home for the second leg on 19 March.
Zenit got off to a nightmare start as both of Reus' first two touches led to goals.
With barely four minutes gone, the Germany winger muscled through the Zenit defence and on to a Lewandowski pass.
When he went to ground, central midfielder Mkhitaryan fired home to put last season's Champions League finalists ahead.
Only 70 seconds later, Mkhitaryan crossed from the right for left winger Kevin Grosskreutz to lay off to Reus, who fired a right-footed shot past Zenit goalkeeper Yuri Lodygin.
Zenit leaked nine goals in the group stages and their back four were woeful for both goals.
The hosts' coach Luciano Spalletti responded by replacing former Russian captain Andrei Arshavin, who looked to have injured a hamstring, with ex-Bayern Munich midfielder Anatoliy Tymoshchuk.
Dortmund struggled to maintain the lightning tempo after the initial goals, while Zenit were left subdued.
It finished 2-0 at the break, but the hosts pulled one back on 57 minutes after a goalmouth scramble.
New signing Jose Rondon's shot was cleared by Dortmund's Marcel Schmelzer, but the Venezuelan hit the post with the rebound before Shatov rifled his shot home.
The goal sparked Dortmund's attack as Lewandowski scored twice to maintain their two-goal advantage.
Lewandowski exchanged passes with Poland team-mate Lukasz Piszczek then slotted the ball past Zenit goalkeeper Yuri Lodygin on 61 minutes.
Piszczek then conceded a penalty when he blocked Viktor Fayzulin's run into the area and Brazilian right winger Hulk stepped up and smashed home the 69th-minute penalty.
It took Dortmund just 90 seconds to reply when Lewandowski snapped up Reus' pass and fired his 71st-minute shot past Lodygin for his second of the game.
Spalletti's Zenit looked rusty, having played their last competitive game in December, and face an uphill task in Germany in three weeks.
In contrast, Dortmund can start planning for the last eight in Europe having given the perfect response to Saturday's shock 3-0 at relegation-threatened Hamburg in the German Bundesliga.