For a change, Pakistan is not the pivot of a Bollywood script that has a terror attack at its centre. Based on real events, Tehran draws from the alleged concerted Iranian attack on Israeli embassies in India, Georgia, and Thailand in 2012.
Waiting in the wings for a while, Tehran assumes importance at a time when West Asia is on the boil again because of strained relations between Iran and Israel. The film shows how the two countries attack each other’s interests, but in this case, India, which has friendly ties with both Iran and Israel, gets caught in the crossfire between the two countries fighting a war of civilisations.

In the fictional realm, when a little roadside flower seller gets killed by a low-intensity blast targeting the family of an Israeli diplomat, Delhi Police puts Special Cell officer Rajiv Kumar (John Abraham) on the trail of the culprit. The bigwigs want quick results, and Pakistan is the obvious suspect. As Rajiv investigates, he develops a personal connection with the dead, but is alive to evidence that points to an Iranian connection.
Tehran (Hindi)
Director: Arun Gopalan
Cast: John Abraham, Haji Khanjanpour, Manushi Chhillar, Neeru Bajwa, Alyy Khan, Qaushik Mukherjee
Runtime: 115 minutes
Storyline: Tasked to investigate the case of a blast involving an Israeli diplomat, Special Cell officer Rajeev Kumar finds himself in a soup when he finds an Iranian connection.
Best remembered by fans of spy sagas for Madras Cafe, John has recently been exploring subjects that focus on geopolitics. While Diplomat was a little rough around the edges, here, he gets the game right, as director Arun Gopalan turns to recent history to comment on India’s strategic ties in West Asia in the garb of a measured thriller.
As Rajeev digs deeper, he discovers that nationalism is a relative term, interpreted according to the geopolitical interests of its adherents. With Pakistan, we go for the kill, but can we do it with an old friend, Iran? Abandoned by his superiors, Rajeev becomes a one-man army, but not like the one we see in Bollywood potboilers. He stands by his worldview, where countries can’t use Indian soil to fight their battles, but he looks vulnerable, and his invincibility can’t be taken for granted.
Suited to play characters that can implode, John’s impassive face and strong physique lend him naturally to the role of an intelligence officer. That nap with the mouth open, the nightmares of a colleague lost in action, the bull-headed drive to catch the Iranian terrorist, John is spot on as the officer scarred by the death of the child.
Cinematographer Ievgen Gubrebko’s gaze lends it a distinct look. The colour scheme, shot taking, and editing make the narrative credible and keep us immersed in the investigation. Like most elements in the film, the action choreography is also understated but impactful. The emotional triggers that dot the narrative are not novel, but the treatment makes them believable.

A still from ‘Tehran’.
| Photo Credit:
Zee Studios/YouTube
When the characters don’t demand empathy, you start feeling for their situation. Amidst the dry terrain of intelligence, writers Ritesh Shah and Ashish Verma create space for wry humour. When higher-ups push Rajiv to drop the Iran angle in his investigation, he remarks, aur justice gaya tel lene, a comment on India’s reliance on Tehran’s oil reserves.
The support cast is strong. Iranian actor Haji Khanjanpour is striking as the lone wolf who crosses his brief. It is good to have the suave Alyy Khan back in action. Together with Quashik Mukherjee, he generates the mystique that surrounds the spies and spooks. For a change, Neeru Bajwa gets out of the bubbly Punjabi mould and shows her worth as a performer. Dinker Sharma is impressive as John’s understudy. His Haryanvi/Western Uttar Pradesh-inflected diction and body language lend the unique Delhi Police flavour to the investigation.
After the setup, we know where it is headed, but Arun places his commas and colons with precision and knows where to put the full stop.
Tehran is currently streaming on Zee5
Published – August 15, 2025 12:30 pm IST