India added 37 runs to their overnight total of 208-8 after rain delayed the start of play by 25 minutes.
Rahul advanced from his score of 70, reaching his eighth Test century – and second in successive Tests in Centurion – off 133 balls when he hit Gerald Coetzee for six over midwicket.
He hit four sixes and 14 fours before he was last man out, bowled by Nandre Burger.
© Agence France-Presse
Photo: Lee Warren/Gallo Images