Dortmund ran out 3-1 winners against AC Milan at San Siro to secure their progress from Group F - dubbed the group of death - with a game to spare, although Paris Saint-Germain missed the chance to join them in the last 16 as they needed a hugely controversial 98th-minute Kylian Mbappe penalty to rescue a 1-1 draw with Newcastle United at the Parc des Princes.
Atletico Madrid also won 3-1 away from home, against Feyenoord, to not only secure their spot in the knockout rounds, but also see Lazio through from Group E after they beat Celtic 2-0 earlier in the day.
Barcelona, meanwhile, came from behind to beat Porto at the Estadi Olimpic Lluis Companys to confirm a top-two finish in Group H.
Dortmund's match in Milan got off to an eventful start with two penalties being awarded in the opening 10 minutes, to contrasting degrees of success as Olivier Giroud saw his saved before Marco Reus dispatched one for Dortmund shortly afterwards.
Samuel Chukwueze levelled things up for the hosts towards the end of the first half, but two second-half strikes from 19-year-old Jamie Bynoe-Gittens and Karim Adeyemi sent the Bundesliga outfit into the last 16.
Ciro Immobile scored in the 82nd and 85th minutes to earn Lazio a 2-0 win over Celtic in one of the early kickoffs, officially ending Celtic's hopes of progressing into the knockout rounds.
That result also meant that an Atletico win would seal theirs and Lazio's place in the last 16, and the La Liga giants held up their end of the bargain with a 3-1 triumph in Rotterdam.
Atletico were given a helping hand with two own goals to bookend the scoring - one from Lutsharel Geertruida and another from Santiago Gimenez - either side of goals from Mario Hermoso and Feyenoord's Mats Wieffer as Diego Simeone marked his 100th Champions League game as Atletico boss with a victory.
The capital outfit will be joined in the last 16 by another Spanish club in Barcelona, with goals from Joao Cancelo and Joao Felix overturning Pepe's opener for Porto.
Elsewhere, Manchester City came from 2-0 down at half time to beat RB Leipzig 3-2 and secure top spot in Group G, while Young Boys sealed third place and a spot in the Europa League from that group courtesy of their 2-0 triumph over Red Star Belgrade.
In an earlier kickoff, Antwerp's defeat to Shakhtar Donetsk means that they can no longer finish third and will therefore not be involved in Europe in the New Year.