South African fast bowler Dale Steyn, who had in the Wanderers Test recorded the worst figures of the career, roared back to form with a brilliant six-wicket haul that saw India get bowled out for 334 in the first innings at Kingsmead, Durban.
South Africa then fought back, reaching 82 for no wicket by the close, with Graeme Smith (35 not out) and Alviro Petersen (46 not out) batting confidently and scoring at better than four runs an over to reduce the deficit to 252.
This was Steyn's 22nd five-wicket haul, during the second day’s play of the second and final Test match against India. The right-arm pacer finished with the figures of 30-9-100-6.
Steyn, wjho was booed of the ground at Johannesburg, had ended with match figures of 1 for 165 off 56 overs. These represent his worst bowling average (165 runs per wicket) and strike rate (336 balls per wicket) in a Test match.
Fast bowler Steyn had endured the longest period without a wicket in his Test career before he had Cheteshwar Pujara caught behind for 70 in the sixth over of a day's play which started more than three hours late because of rain.
He had bowled 417 balls since his previous wicket when he dismissed Shikhar Dhawan early in the first Test in Johannesburg.
Pujara and Murali Vijay put on 157 for the second wicket.
Vijay followed for 97 in Steyn's next over when he gloved a catch down the leg side to wicketkeeper AB de Villiers.
Rohit Sharma padded up to the next ball and watched in dismay as the ball snaked back and hit his middle stump. Steyn had captured three wickets in ten balls without conceding a run.
Vijay batted for 309 minutes and faced 226 balls before falling three short of what would have been his fourth Test century and his first outside India. He hit 18 boundaries.
With 11 overs remaining to the second new ball, Steyn was rested after one more over.
Kohli and Rahane batted solidly and then saw off the new ball, with Steyn and Vernon Philander unable to make any further breakthroughs.
Rahane was twice struck by bouncers from Steyn, on the helmet and on the upper arm.
It took a spectacular catch by De Villiers to dismiss Kohli, who made a confident 46 before glancing Morne Morkel to leg, with the wicketkeeper flinging himself to his left to take the chance.
Rahane and Dhoni scored quickly after tea until Steyn was brought back and had Dhoni caught at first slip.
Zaheer Khan slashed wildly at a lifting delivery from Steyn and was caught by a leaping De Villiers.
Ravindra Jadeja edged off-spinner JP Duminy to slip where Jacques Kallis dived to become the second man after India's Rahul Dravid to take 200 Test catches.
The innings folded quickly as Ishant Sharma was caught behind off Steyn and Mohammed Shami edged Morkel to first slip. Morkel finished with three for 50.
Rahane, playing in his third Test, was left unbeaten on 51, his maiden half-century. He batted for 190 minutes and faced 121 balls, hitting eight fours.
South Africa got off to a quick start as Smith and Petersen hit two boundaries apiece as 18 runs were scored off the first two overs.
The total was 36 after six overs before Ishant Sharma came on and bowled a testing maiden over, bowling around the wicket to the left-handed Smith with six fielders on the leg side, including three in catching positions.
Jacques Kallis became the second fielder to take 200 catches in Test cricket when he held a sharp chance to dismiss Ravindra Jadeja on the second day of the second and final Test between South Africa and India at Kingsmead on Friday.
Kallis, playing in his 166th and final Test match, joined India's Rahul Dravid, who held 210 catches in 164 matches.
Jadeja edged a ball from off-spinner JP Duminy and Kallis dived low and to his left at slip to hold the chance.
India, first innings
S. Dhawan c Petersen b Morkel 29
M. Vijay c De Villiers b Steyn 97
C. Pujara c De Villiers b Steyn 70
V. Kohli c De Villiers b Morkel 46
R. Sharma b Steyn 0
A. Rahane not out 51
M. Dhoni c Smith b Steyn 24
R. Jadeja c Kallis b Duminy 0
Zaheer Khan c De Villiers b Steyn 0
I. Sharma c De Villiers b Steyn 4
Mohammed Shami c Smith b Morkel 1
Extras (lb7, nb1, w4) 12
Total (111.3 overs) 334
Fall of wickets: 1-41 (Dhawan), 2-198 (Pujara), 3-199 (Vijay), 4-199 (R. Sharma), 5-265 (Kohli), 6-320 (Dhoni), 7-321 (Jadeja), 8-322 (Khan), 9-330 (I. Sharma)
Bowling: Steyn 30-9-100-6 (2w), Philander 21-6-56-0 (1nb, 1w), Morkel 23.3-6-50-3 (1w), Kallis 11-1-36-0, Peterson 22-2-75-0, Duminy 4-0-10-1
South Africa, first innings
G. Smith not out 35
A. Petersen not out 46
Extras (lb1) 1
Total (0 wkts, 20 overs) 82
To bat: H. Amla, J. Kallis, A. de Villiers, J. Duminy, F. du Plessis, R. Peterson, V. Philander, D. Steyn, M. Morkel
Bowling: Zaheer Khan 4-0-20-0, Mohammed Shami 5-0-23-0, I. Sharma 6-2-18-0, Jadeja 5-1-20-0
Match situation: South Africa trail by 252 runs with ten wickets remaining in the first innings
Umpires: Steve Davis, Rod Tucker (both AUS)
TV umpire: Adrian Holdstock (RSA)
Match referee: Andy Pycroft (ZIM)