Andrew Mangiapane had a goal and two assists, and Nazem Kadri and Walker Duehr also scored for the Flames. Dan Vladar stopped 22 shots to improve to 10-4-4 this season.
Patrik Laine had a goal and two assists, and Boone Jenner and Kirill Marchenko also scored for Columbus. Johnny Gaudreau had two assists in his return to Calgary for the first time since leaving as a free agent last summer. Joonas Korpisalo finished with 45 saves.
In the extra period, Dube got a cross-ice pass from Mangiapane on a 2-on-1 and fired a one timer past Korpisalo for his 12th of the season to give Calgary the win after they gave up leads of 2-0 and 3-2.
“A character win tonight,” Kadri said. “We find a way to hang in there and fight off some adversity. (We) had a lot of opportunities, and for the most part played a pretty solid game. That's always good to see.”
Gaudreau, who is fifth all-time in Flames history with 609 points, was greeted by boos and derisive chants of “John-ny” the moment he stepped on the ice.'
“We knew it was going to be that kind of environment. Johnny had an excellent game,” Blue Jackets coach Brad Larsen said. “The guys battled. We had some puck management issues, no question.”
Gaudreau was awarded a penalty shot five minutes into the opening period when Calgary defenseman MacKenzie Weegar hooked him on a breakaway. A wave of boos followed Gaudreau’s approach to the Flames' net, and intensified when he shot the puck high attempting to pick the net’s top corner.
A video tribute minutes later brought many in the crowd to their feet to acknowledge his eight seasons of Flames’ service, but that goodwill was short-lived.
“I think that just shows how good of a player he was and how important he was for this organization, because you don’t get a reaction like that if you’re not that important,” Dube said.
Jenner tied the score 3-3 at 4:34 of the third as he got a pass from Laine, skated into the left circle on a 2-on-1 with Gaudreau and a fired a shot that beat Vladar for his 13th.
Duehr got the Flames on the scoreboard with 3:42 left in the first as his one-timer from just above the faceoff dot deflected off the inside of Korpisalo’s pad and in so fast that it was unclear where the puck was until officials fished it from inside the net. It was Duehr's second goal in six games since he was called up from the AHL on Jan. 7.
Kadri made it 2-0 at 1:32 of the second. After a turnover by the Blue Jackets, Kadri spun in the slot and wired the puck over Korpisalo’s right arm for his team-leading 19th.
Marchenko got Columbus on the board, ripping Gaudreau’s cross-ice pass over Vladar’s glove at 9:04 while Dube served a tripping penalty. It was Marchenko's 10th.
With Kadri serving a delay-of-game penalty, Gaudreau feathered the puck across to Laine, who dropped to his knee to squeeze a shot by Vladar at 9:53 for his 14th to tie it 2-2.
Mangiapane put the Flames back ahead with 3:43 left in the second. The Blue Jackets turned the puck over behind their own net and Mikael Backlund fed Mangiapane in the slot and he spun and beat Korpisalo glove side for his 10th.
The Flames have earned at least a point in Vladar’s last 12 starts, with a 9-0-3 record since Nov. 29. That’s the longest active point streak this season among NHL goalies.
Calgary D Chris Tanev left the game midway through the first period after a collision in the neutral zone.
Blue Jackets: At Edmonton on Wednesday night in the second of a four-game trip.
Flames: Host Chicago on Thursday night to wrap up a four-game homestand.