從這一年起,曹操把自己的據點北遷到了冀州鄴城,政令軍隊此後皆從此出,而漢獻帝的都城許縣則只留些許官吏。
建安十年205年)正月,曹操又以負約為名,攻滅袁譚,冀、青二州平定。於是,曹操上表讓還兗州牧,改任冀州牧。
袁尚兵敗後,逃奔幽州刺史袁熙,不久,袁尚、袁熙又逃奔三郡烏桓。同年,黑山軍首領張燕率領其部眾十餘萬人投降曹操。
建安十一年206年),曹操攻滅高幹,平定幷州。
建安十二年207年),曹操為了肅清袁氏殘餘勢力,也為了徹底解決三郡烏桓入塞為害問題,決定遠征烏桓。
漢末,遼西、遼東、右北平三郡烏桓結合,是為三郡烏桓,其首領為遼西部的蹋頓。三郡烏桓與袁氏關係一直很好,並屢次侵擾邊境,擄掠人口財物。
五月,曹操親率大軍到達無終今薊縣)。時正雨季,道路積水,“淺不通車馬,深不載舟船”。曹操從無終人田疇之議,改從一條久已斷絕,但“尚有微徑可尋”的路線進軍。
在田疇的引導下,曹操大軍登徐無山今河北玉田北),出盧龍塞今河北喜峰口附近),“塹山堙谷五百餘里”,直指烏桓老巢柳城今遼寧朝陽南)。
八月,曹軍進至離柳城不足二百里時,烏桓才發現,於是蹋頓與袁尚、袁熙等人率數萬騎兵迎擊。二軍相遇,時曹軍輜重在後,“被甲者少,”而烏桓軍軍勢甚盛。
曹操登高了望,見烏桓軍雖多,但陣勢不整,遂命大將張遼為前鋒,乘烏桓軍陣稍動之機,向烏桓軍發動猛攻。
烏桓軍大亂,曹軍陣斬蹋頓,大獲全勝,胡、漢降者二十餘萬,袁尚等人逃奔割據平州的公孫康。
這時,有人勸曹操乘勢進擊公孫康,曹操說:“吾方使康斬送尚、熙首,不煩兵也。”遂率軍還師。
不久,公孫康果然斬殺袁尚、袁熙,並將其首級獻與曹操。諸將不明所以,曹操說:
“彼素畏尚等,吾急之則併力,緩之則自相圖,其勢然也。”
於是,曹操攻破三郡烏桓,也徹底肅清了袁氏勢力。
十一月至易水,代郡烏丸行單于普富盧、上郡烏丸行單于那樓將其名王來賀。同年郭嘉因水土不服、氣候惡劣、日夜急行操勞過度,在曹操北歸前病逝。
歸程途中,據《曹瞞傳》記載:“時寒且旱,二百里無覆水,軍又乏食,殺馬數千匹以為糧,鑿地入三十餘丈乃得水。既還,科問前諫者,眾莫知其故,人人皆懼。公皆厚賞之,曰:‘孤前行,乘危以徼倖,雖得之,天所佐也,故不可以為常。諸君之諫,萬安之計,是以相賞,後勿難言之。’”
建安十三年208年),開闢玄武池訓練水軍。六月,曹操廢三公,恢復丞相制度,並自任漢朝丞相。基本平定北方後,兵鋒轉而南向。
七月,進軍南征荊州劉表。
八月,劉表病死,其子劉琮接任荊州牧。
九月,曹操大軍進至新野,劉琮以為無法抵擋,舉荊州之眾投降曹操。