Cam Atkinson had a goal and an assist for the Blue Jackets (10-6-2), who are on a five-game point streak (3-0-2). Sergei Bobrovsky made 26 saves to win his third straight start, allowing one goal in each game.
"I think for both teams it was a real hard game," Columbus coach John Tortorella said. "It's close to what the game should be played like. … It was a fun game to be involved in. It's the hardest we've played. And I give them credit, too, because they were hard to play against."
WATCH: [Blue Jackets vs. Stars highlights]
The Stars (9-7-2) have lost two straight and four of their past five games (1-2-2).
Alexander Radulov scored for Dallas in his first game back after missing the previous four and 10 of 11 with a lower-body injury. Anton Khudobin made 26 saves.
The Stars went 0-for-4 on the power play, including three opportunities in the first period, and had one shot on goal in 7:50 with the man-advantage.
"Those points are huge," Radulov said. "The power play cost us the points."
Dallas played its second game since losing defenseman John Klingberg for at least four weeks with a broken wrist. Klingberg, injured Nov. 8 against the San Jose Sharks, plays the point on the first power-play unit and has six power-play points (two goals, four assists) in 16 games.
Dubois, playing his 100th NHL game, gave Columbus a 2-1 lead with 9:39 remaining. Atkinson made a cross-crease pass to Dubois for the tap-in.