Skipper Virat Kohli hit an unbeaten century before India declared their second innings on 352-8, giving Sri Lanka a target of 231 to win the opening Test on Monday's final day.
Kohli, registering his 50th international hundred, made 104 at Kolkata's Eden Gardens. Fast bowlers Suranga Lakmal and Dasun Shanaka took three wickets each.
The visitors, who have never won a Test in India, have about 30 overs to get their target with over one session left. The two sides will play three Tests in the series.