公元204年正月,曹军再次渡河北上,拦引淇水流入白沟,以便再次攻打邺城时能够运输军粮。
2月,袁尚见曹军没有采取大的举动,于是率军再次攻打袁谭,留下部分将领审配、苏由守卫邺城。
曹操趁机出兵围攻邺城,苏由派人与曹操联系,打算做内应,但计划败露。
苏由只好匆匆逃出邺城,归降了曹操。
曹军通过堆土山、挖地道,猛烈攻击邺城,都没有奏效。
曹操击败了袁尚将领尹楷,切断了从上党到邺城的粮道,还占领了邯郸、易、涉等城池,邺城仍然没能攻破。
5月,曹操命令围攻邺城的军队毁弃土山和地道,沿着城墙四周挖沟围城。
白天挖得很浅,邺城守将审配看在眼里,并不在意。
到了晚上,曹操下令突击挖沟,挖得又宽又深,达到两丈,将漳水引入城中灌城。
城内与外界的交通被切断,粮食短缺。
从5月到8月,城内饿死的人数超过一半,但审配仍然坚守不降。
袁尚得知邺城危急,率领一万人军队回援。
曹操的许多部将认为:“这批援军肯定有决死之志,建议暂且避开。”
曹操却不同意,坚持等待袁尚军队到达,再伺机而动。
袁尚的人马在距离邺城17里的阳平亭驻扎下来。
当天晚上,双方举起火炬作为信号,邺城内也举火回应。
审配率军北出,准备和袁尚进行夹击,曹操分兵迎击,审配败退回城,袁尚军队也被击溃,退到曲漳。
曹军紧追不舍,袁尚派人投降,但曹操不接受,围攻更加紧急。
袁尚又逃到祁山,部分将领马延、张鼓等人在战斗中投降,袁军溃散,只有袁尚带着少数人逃到中山。
曹操停止追击,将缴获的印绶、节钺和盔甲等物品陈列在邺城下,致使邺城内人心大乱。
审配的侄子审荣担任东门校尉,夜间打开城门,引曹军进城,审配率军进行巷战,最后被曹军俘虏,邺城最终被曹操占领。
10月,并州刺史高干也投降了曹操,曹操继续任命他担任并州刺史。
就在曹军全力围攻邺城之时,袁谭率众背叛曹操,攻占了甘陵、安平、勃海、河间等地,还向袁尚发起了进攻。
袁尚退往故安,投奔了幽州刺史袁熙。
接着,袁谭收编了袁尚残部,驻军龙凑。
曹操写信给袁谭,指责他背信弃义,退还自己的女儿,断绝婚姻,准备发兵讨伐。
12月,曹操驻军在袁谭的门前,袁谭撤退到南皮,驻军在临清河,曹军趁势平定了平原郡的各县。
205年正月,曹军大举进攻南皮,袁谭迎战,双方伤亡惨重,没能分出胜负。
曹操本有意缓慢进攻,曹纯建议说:“现在大军深入敌境,很难持久,如果进攻不能克敌,退兵必然会损失军威。”
于是,曹操亲自擂鼓指挥进攻,最终击败了袁谭,攻破了南皮。
袁谭、郭图等人逃亡,被曹军追杀,袁谭所管辖的各城全部投降。
此时,幽州仍在袁熙的手里,袁熙的部将焦触、张南密谋投降曹操,并率军袭击袁熙。
袁熙毫无准备,只好与袁尚仓皇逃亡,投奔了辽西乌桓。
焦触自称幽州刺史,召集各郡县的太守、令长,组织了数万兵力,杀白马为盟,一起归降曹操。
曹操封他们为列侯。
同年10月,并州刺史高干又起兵叛曹,派兵扼守壶关。
河内郡的张晟、弘农郡的张琰等人也起兵响应。
河东郡的掾卫固、中郎将范先,暗中与高干勾结,给曹军造成了麻烦。
曹操得到消息,派大将乐进、李曲讨伐高干;任命杜畿为河东太守,平定了叛乱的卫固、范先;马腾等人则进攻张晟、张琰。
马腾的军队击败了张晟、卫固、张琰等人,最终这几人先后被杀。
206年正月,曹操亲自率军讨伐高干,围攻壶关。
3月,壶关的守城将士投降。
高干逃到匈奴求救,匈奴单于不敢接受,高干又南奔荆州,在途中被上洛都尉王琰斩杀,至此曹操彻底平定了并州。
袁绍在世的时候,与北部少数民族乌桓的关系非常友好。
袁绍拥立乌桓的酋长为单于,并且将自己家族的女子嫁给他们。
在乌桓的各个部落中,辽西蹋顿部落最为强大。
蹋顿成为乌桓王后,一直受到袁绍的器重和支持,所以袁熙和袁尚兄弟俩投奔了蹋顿。
蹋顿数次入侵,企图帮助袁尚夺回失地。
因此,曹操决定远征蹋顿,以消除后顾之忧。
他先命令士兵开凿平虏渠和泉州渠,以方便远征。
207年春,曹操集结大军征讨蹋顿。
所有将领都认为这样做不妥,他们说:“如果刘表从南边袭击许昌,后果将不堪设想。”
只有郭嘉坚持远征蹋顿,理由是:“不击败蹋顿,青、冀等州将无法安定。”
曹操认同郭嘉的意见,命令大军轻装快进,并且请出隐士田畴担任莜县县令,带领他的人马做大军的向导。
这时正值雨季,道路泥泞难行,曹操采纳了田畴的建议。
一边在大道旁立起一块大木牌,上面写着“方今夏暑,道路不通,等待秋冬,再来进军”,目的是迷惑和麻痹乌桓诸部。
另一边曹军绕道上徐无山,穿山越谷五百多里,再经过白檀、平冈、鲜卑庭,然后直奔柳城(今辽宁朝阳南)。
曹军在距离柳城200里的时候,乌桓的人马才发觉。
蹋顿、袁尚、袁熙急忙与辽西单于楼班、右北平单于能臣等人汇合,集结了三郡乌桓骑兵,准备迎战。
8月,曹军在白狼山与乌桓骑兵相遇。
曹操登高远望,看到乌桓骑兵虽然数量众多,但是队伍杂乱无序,便命令大将张辽率先锋军发起攻击。
乌桓骑兵顿时崩溃,蹋顿和许多乌桓王被当场斩杀,胡汉降者达到20余万人。
乌桓辽东单于速仆丸与袁尚、袁熙率众数千人,前去投奔辽东太守公孙康,却被公孙康设计捕杀,并将袁尚、袁熙和速仆丸的首级献给曹操,表示归附之意。
曹操打败了乌桓诸部,彻底消灭了袁氏残余势力。
除了关西地区仍被马腾、韩遂等人占据外,基本上统一了北方。
曹操统一北方,结束了北方地区长期的割据和混战的局面,使北部边境得到了安宁,为北方社会的进一步发展创造了基本条件。