Froome dropped his main rivals in the finale of the 17th stage, a 184-km mountain trek won by Russian Ilnur Zakarin overnight, Australian time.
Froome (Team Sky) attacked inside the last two km in the last ascent, a punishing 10.4-km climb at an average gradient of 8.4 per cent and Dutchman Bauke Mollema, second overall, as well as last year’s runner-up Nairo Quintana, could not follow.
The Briton finished on the wheel of former team mate Porte (BMC), the only rival Froome didn’t manage to shake.
The decisive move was made by Porte, who jumped away from the favourites’ group about 2km from the line, with Froome the only rider able to follow him thanks to a short but brutal acceleration.
Porte climbed from seventh to sixth overall, 4:27 off the pace, but his recent form suggests he will continue to move up the GC (general classification), taking sole leadership at BMC after team mate Tejay van Garderen cracked in the penultimate climb of a gruelling day in the Swiss Alps.
Froome extended his lead over Mollema (Trek-Segafredo) to 2:27 and compatriot Adam Yates (Orica) to 2:53.
Colombian Quintana (Movistar), who has been lacking his usual stamina in the long climbs, is fourth, 3:27 off the pace after losing 28 seconds to Froome when he was expected to attack.
Frenchman Romain Bardet (AG2r-La Mondiale) continued his fine Tour, moving up one spot to fifth at 4:15 ahead of Thursday’s 18th stage, a brutal 17-km uphill time trial from Sallanches to Megeve.
A 14-man breakaway, featuring world champion Peter Sagan and his Tinkoff team mate Rafal Majka, the polka dot jersey wearer, took shape after a crazy first hour of racing during which the peloton covered 51.8km.
They reached the foot of the penultimate ascent, a 13-km climb to the Col de la Forclaz at an average gradient of 7.9 per cent, with a 13-minute advantage.
Majka was the first at the top, strengthening his lead in the mountain classification.
The main bunch was quickly skimmed down to about 20 riders and American Van Garderen, who was targeting a podium finish in Paris, was dropped midway through the ascent.
Quintana’s team mate, Spaniard Alejandro Valverde, also fell behind in the last climb, losing all reasonable hope of repeating his third-place finish of 2015.
Majka (Tinkoff) and Colombian Jarlinson Pantano (IAM Cycling), winner of the 15th stage, attacked the leading group in the descent.
They were joined in the final climb by Zakarin (Katusha), who jumped away 6.5km from the finish, followed by Pantano.
The Russian went again with 5.8km left and never looked back, his medallion tapping on his bare chest until he managed to zip up his jersey before crossing the line, his face a mask of pain, for a first Tour stage win.
“I’m really happy, I want to thank my team mates. I gave everything. It’s really, really big for me,” said Zakarin, who is back at the top after a horror crash in this year’s Giro d’Italia.
Make your contribution to independent news
A donation of any size to InDaily goes directly to helping our journalists uncover the facts. South Australia needs more than one voice to guide it forward, and we’d truly appreciate your contribution. Please click below to donate to InDaily.