十月,曹操军马到黎阳,袁尚听到了曹军渡河的消息非常害怕,就解除了对平原的包围,撤回邺城。袁尚的部将吕旷、吕翔投降了曹操。
建安九年(公元204年)二月,袁尚又派出大军到平原攻打袁谭,部将审配、苏由留下来守卫邺城。曹操抓住此时机,迅速出击,直击邺城。守将苏由出城投降了曹操。邺城被曹操团团包围,并且在这里筑土山、挖地道,向邺城发动了进攻,由于邺城城墙坚固,未能攻克。五月,曹操在城的四周挖了一条深二丈、宽二丈、长达四十里的壕沟,引漳水灌入沟中,完全阻断了邺城与外界的联系。城中粮食已尽,许多人因饥饿而死。七月,袁尚得知大事不好,忙率主力一万余人回救邺城,被曹操拦击,袁尚溃败而逃,投奔幽州的袁熙去了。
袁尚被击败之后,邺城的守军斗志全无,只剩下审配顽固抵抗,大喊着给士兵鼓气,但人们已完全不信任他了。
审配的侄子审荣任邺城东门校尉,八月初二,审荣乘着夜色朦胧打开了城门,把曹军放入城中。审配被曹军生擒。这时邺城监狱中关押着辛评的家眷,辛毗赶去解救,但他们早被审配杀死。审配被曹军士兵押到曹操大帐中,辛毗非常愤怒,用马鞭猛抽审配的脑袋,大骂道:“你今天非死不可!”审配依然很蛮横,瞪着眼睛恶狠狠地说:“狗东西,正是由于你们这些人,才让曹操攻下冀州,我恨不得立刻杀死你,你敢把我怎样!”不一会儿,曹操走进大帐,看了看满不在乎的审配,开口说道:“我那天巡视围城的部队,怎么看到你有那么多的弓弩手呢?”审配说:“我还恨太少呢,没把你射死!”曹操想缓和气氛,给审配一条活路,就说:“你为袁氏尽力,也是迫不得已!”哪知审配一点不领情,始终不说一句求饶的话,曹操无可奈何,只好将他杀死。
在曹操围攻邺城时,原来已经归降曹操的袁谭又背叛曹操,攻取了河北大部分地区。曹操给袁谭写信,责怪他违约,同他断绝了婚姻关系。原来,在袁谭向曹操求援时,曹操与袁谭结为亲家,允袁谭之女嫁给儿子曹整。袁潭背叛后,曹操在把袁谭的女儿送回去的同时,出兵讨伐袁谭。
建安十年(公元205年)正月,曹操进攻南皮,袁谭迎战曹操,曹军伤亡惨重。曹操想先暂时不进攻,议郎曹纯劝道:“现在我孤军深入,难以坚持太久,如果不一鼓作气将敌人击败,一后退就会军威丧失。”曹操听从了曹纯的劝告,亲自冲锋在前并且擂动战鼓,指挥将士猛攻敌军,终于将南皮攻陷。袁谭仓惶出逃,被追上来的曹军杀死。
之后,曹操又率领大军北上,攻打幽州的袁熙。袁熙因部下焦触、张南叛变,出战失利,与袁尚一起投奔辽西郡的乌桓。焦触自称幽州刺史,逼迫各郡县长官背叛袁氏,归顺曹操,焦触等被封为列侯。曹操在占领幽州之后,又发动了对并州的进攻。
在邺城被曹操攻下后,并州刺史高干为了免遭攻打,曾表示愿意归顺曹操。袁尚、袁熙逃往乌桓后,乌桓出兵进攻犷平(今北京密云东北),曹操亲自率军援救,犷平安然无恙,乌桓退至塞外。高干听说曹操与乌桓交战,又背叛了曹操,企图乘曹操北上之机,偷袭邺城。曹操派遣部将乐进、李典截击高干。高干据守壶关(今山西长治东南)。建安十一年(公元206年)正月,曹操率领大军亲自征讨高干,包围壶关。三月,攻下壶关,高干逃往平阳(今山西临汾南),求救于南匈奴,遭匈奴单于拒绝。高干无奈,只好又南奔荆州投靠刘表,途中被上洛都尉王琰抓住斩首,并州全部平定。
曹操经过五年的征战,终于全部占领了冀、青、幽、并四州,结束了北方常年战乱、民不聊生的局面,为恢复和发展社会经济创造了重要条件。
曹操并没有因此而满足,他想彻底消灭袁氏残余势力,统一北方,于是,他决定北征乌桓。
乌桓又称“乌丸”,自东汉初以来便定居于今辽宁西部和河北东北部的辽东、辽西、右北平三郡,与汉民相处得很融洽。东汉朝廷曾封其首领为王,并置护乌丸校尉加以统治。
东汉中期,辽西、辽东、右北平的乌桓结合起来,称为“三郡乌桓”。东汉末年,乌桓渐渐强盛起来,乘东汉衰败的机会,多次南下侵扰,杀掠官吏和百姓,并且向南劫掠青、冀、徐、幽四个州。建安初年,袁绍在河北谋求发展,与号令三郡乌桓的乌桓王蹋顿结盟,联合起来攻灭了占有幽州的公孙瓒,并假借汉朝廷的名义,任命蹋顿为乌桓单于,后来又顺从乌桓各部首领的请求,以楼班为单于,封蹋顿为王。
自秦汉以来,匈奴一直在侵扰边境。汉武帝虽然平定了四方少数民族的叛乱,例如东面平定南越、东越、朝鲜,西部征讨大宛、贰师,并且打通邛、及夜郎的通道。但这些地区远离王畿,对中原不会构成重大威胁,而匈奴离王畿最近,骑兵只要向南侵犯,中原便会三面受敌。因此,汉朝多次派遣卫青、霍去病等率领大军北伐,追赶单于,占领其富饶平广的土地。从那以后,匈奴开始退而保卫自己的家园,自称藩国,渐渐衰弱下来。建安年间(公元196~220年),呼厨泉南单于入朝被留下作为内侍,右贤王统率匈奴,这时臣服的匈奴比西汉时更为驯服。但是乌丸、鲜卑逐渐又强大起来。这是因为汉代末年,国内一片混乱,没有时间讨伐外来侵略者,因此,他们竟然侵略并且占领了漠南地区,攻占城市,烧杀百姓,北边各郡同时受到侵扰。至袁绍控制河北,安抚三郡乌丸,名义上很尊重他们,其实是收并了他们的精锐骑兵。后来,袁熙、袁尚又逃奔蹋顿。蹋顿非常崇尚武力,凭着自己距离朝廷很远,所以敢收留袁尚、袁熙,并在少数民族之中称霸争雄。曹操率众北伐平定了辽乱,各个少数民族无不震动。于是曹操又率领乌丸的兵马安抚各地,此后边地居民得以安居乐业。
东汉末年,辽西乌丸首领丘力居统治五千多户,上谷乌丸首领难楼统管九千余户。另外,辽东属国乌丸首领苏仆延统领千余户,自称为峭王。右北平乌丸首领乌延统治八百多户,自称汗鲁王。他们四位首领都智勇双全。中山太守张纯叛逃到丘力居部落中,自封号弥天安定王,为三郡乌丸元帅,侵略青州、徐州、幽州、冀州,烧杀抢掠,无恶不作。汉灵帝末年,派遣刘虞任幽州首领。刘虞悬赏将张纯杀死,北方才得以平定。后来,丘力居死,因为他的儿子楼班幼小,从子蹋顿武艺超群,于是继承王位,统领三个乌丸部落,部下都服从他的指挥。袁绍和公孙瓒交战数次,但久久不能分出胜负。蹋顿便派使者到袁绍处,与袁结交,帮助袁绍攻打公孙瓒,果然大胜。袁绍假借君命,发布诏书,赐给蹋顿、峭王、汗鲁王印绶,封他们为单于。
后来楼班长大成人,峭王以及他的部下都推举楼班为单于,蹋顿为大王。从小在乌丸、鲜卑部落中长大的广陵人阎柔,颇得当地人的尊重和信任。阎柔借助鲜卑的力量,杀死乌丸校尉邢举,取代他的位置。后袁绍安抚阎柔,北部边境得以太平无事。
袁绍死后,曹操攻打袁尚,三郡乌桓继续支持袁氏,并乘战乱之机掠走了十万多户汉朝百姓。建安十年(公元205年),曹操占领邺城后,袁尚、袁熙率残兵躲进乌桓,企图凭借乌桓的势力同曹操抗衡。乌桓蹋顿屡次进入边塞骚扰,想帮助袁氏东山再起。曹操为了消灭袁氏集团的残余势力,决定平定乌桓。
然而,征讨乌桓很困难。建安十二年(公元207年)二月,曹操专门召集文武官员商讨此事,许多人都很担心,大家皆认为:“袁尚只不过是个亡虏,乌桓人贪婪不讲信义,怎么会让袁尚利用?假如我们深入乌桓腹地,荆州的刘备必然劝说刘表偷袭许都,万一发生变故,后悔晚矣。”郭嘉提出异议,他说:“曹公虽然威震天下,乌桓仗着离我们遥远,必然不设防。我们乘它无备来个突然袭击,一定可以打败它。况且袁绍在河北颇有影响,袁尚等人尚在,如果我们放弃乌桓而南征,袁尚就会趁机凭借乌桓的帮助东山再起,蹋顿也会产生觊觎中原的贪婪之心。那时青州、冀州还会有丢掉的危险。而刘表不过是个心无大志的清谈客,他自知才能不比刘备,对刘备存有戒心,怕重用了他不能控制,而刘备也不会真心实意帮他。因此,即使我们远伐乌桓,您也无需担忧。”曹操采纳了郭嘉的意见,决定出兵。
曹操要想征伐乌桓,必须解决军粮运输问题。他发动人力开凿了平虏渠和泉州渠。平虏渠沟通呼沲和水,即今河北青县至天津静海独流之间的南运河;泉州渠也就是今天津海河至天津宝坻境内与渤海相通的潮白河。开凿了这两条河,既便利了军粮运输,又利于农业生产,对河北、天津社会经济的稳定与发展起到了重要的推动作用。
五月,曹操率大军停驻易县(今河北雄县西北)。郭嘉对曹操说:“用兵贵在神速,现在袭击千里之外的乌桓,我军辎重多,难以迅速前进,而且敌人探听到我们出兵的消息,必然有所防备,不如卸下辎重,派轻兵昼夜兼程,出其不意,以奇制胜。”曹操同意郭嘉的建议,很快到达无终(今天津蓟县)。在无终,曹操又得到了名士田畴的大力帮助。
田畴,字子泰,文武双全。董卓之乱时,他因不满朝政,弃官不做,带领家人进入徐无山(今河北玉田北)避乱。数年之中,归附他的百姓有五千余家,成为一方名士,很有威望。袁氏父子曾多次请他出山,授予他将军称号,都遭拒绝。田畴痛恨乌桓对内地的侵扰,想讨伐乌桓,但力量不足。曹操未到无终,就开始派人请田畴。好友邢对田畴说:“自黄巾起事以来,四海皆乱,战事不断,百姓颠沛流离。听说曹公法令严明,百姓早已疲于战乱,盼望安定。”田畴很赞赏邢,因此接到曹操的邀请后就欣然前往。他的门客说:“以前袁绍曾五次礼聘,你都拒绝了,现在曹操的使者一到,您急忙前往,这是为何?”田畴笑着说:“你是不会明白的。”田畴随使者来到曹营,被任命为县令,随军一同驻扎在无终。
曹操打算沿海边进军乌桓。但这年夏天无终地区连连下雨,靠近海边处地势低洼,道路泥泞,行军艰难,乌桓又把守险要小路,曹军欲进不能。这很令曹操头痛,便问田畴如何是好。田畴说:“这条路每到秋夏之际经常有洪水,浅处走不了马车,深处又无法行舟船,很久以前就是这样。旧北平郡的治所在平冈县,以前可以从这里经过卢龙塞(今河北喜峰口)到达柳城(今辽宁朝阳南),但自建武年间这条路已经坍塌,断绝近二百年,不过还有小路可以通行。乌桓以为我们现在会从无终进军,无法前进就会后退,因此放松警惕。我们应该趁此机会马上改变方向,出卢龙塞过白檀(今河北滦平北)险要地段,进入他们没有防卫之地,路近而行动方便。乘敌人不备发起袭击,可以不战而活捉蹋顿。”曹操一听大喜,连声说:“果然是条妙计!”于是返回无终,并在路旁立上木牌,上写:“当今暑夏,道路不通,且待秋冬,再行进军。”用以迷惑敌人。乌桓的探子见到后,回去报告,蹋顿认为曹军已率兵撤退,放松了警惕。
曹操命令田畴率领他的部众做向导,翻越了徐无山,穿过了卢龙塞,开山填谷,修筑道路五百余里,经过白檀、平冈(今河北平泉),直插乌桓的大本营柳城。八月,当曹军到达白狼堆,距柳城只有二百里时,乌桓才惊晓此事。
蹋顿连忙召集袁尚、袁熙,及辽西单于楼班、右北平单于能臣抵抗,又各自亲率精兵数百骑迎战曹军。八月,曹操在白狼山与乌桓的骑兵相遇,乌桓军队军力强盛,来势凶猛。当时,曹军车马辎重都在其后,身披铠甲的将士很少,众人都很恐惧。曹操却不惊慌,他发现敌军虽多,却阵容不整,遂让大将张辽率军迎敌。经过一场激战,乌桓军队一溃千里。曹军紧追不舍,蹋顿及各部首领都被歼灭,胡、汉两族投降的兵民有二十多万人。
袁尚、袁熙及辽东单于速仆丸率领残兵剩部投奔了辽东太守公孙康。有人建议曹操出兵,将他们全部铲除。曹操却胸有成竹地说:“让公孙康杀袁尚、袁熙,就不用麻烦咱们的士兵了。”九月,曹操率大军向南撤退,正如曹操所言,公孙康并不想收留袁氏兄弟,而是想杀掉他们为朝廷立功。于是他在马厩中埋伏士兵,然后把袁尚、袁熙请进来,还未等他们坐稳,公孙康一使眼色,伏兵立即上前将袁尚、袁熙抓住,当场将两人杀死,速仆丸也一同被杀,他们的人头被公孙康送交给曹操。有的将领问曹操:“您既已退军,为什么公孙康还将袁尚、袁熙斩首?”曹操说:“公孙康一向畏惧袁氏,如果我急于攻打袁尚、袁熙,形势所逼之下,他们就会联合起来抵抗,反之,他们必然会自相残杀。”
曹操从柳城回师时,正值天寒大旱,方圆百里内没有水源,军队又缺乏粮食,只好杀马充饥,凿地近三十余丈才找到了水源,行军很是艰苦。军队返回后,曹操命人查找当初都有谁劝阻他出兵征讨乌桓,人们都很害怕,不知道其中的缘故。等找到那些人后,曹操却重赏了他们,说:“我这次征讨乌桓,实在危险,侥幸取胜,这得感谢上苍的保佑,以后不能经常这样冒险。你们当初提出的才是万全之策,因此要奖赏你们,还要请你们以后多提好的意见。”
平定三郡乌桓之后,曹操把曾经被乌桓掠去和逃亡到辽东地区的十多万百姓接回中原,并且挑选乌桓的骑兵编入自己的军队,增强了战斗力。
后来,鲜卑头领轲比能又将各少数民族部落控制住,占领匈奴的地盘,他们屡次侵犯边地,幽州和并州百姓深受其苦。魏文帝初年,田豫为护乌丸校尉,在马城被鲜卑轲比能部包围。魏明帝时,并州刺史毕轨出军攻打轲比能时也遭到失败。青龙年间,王雄上奏皇帝的意见被采纳,派遣剑客刺杀轲比能。之后鲜卑部落成为一盘散沙,相互攻击。势力强些的便逃离得远远的,势力弱的只有向朝廷降服。至此,边境稍微安稳下来。虽然还时常发生抢劫的事,但已不能够发展成叛乱的事情。
曹操先占领了河北之后,又将乌桓打败,完成了统一北方的大业,结束了中原地区连年征战的混乱局面,对中国当时的社会经济的恢复和发展起到了积极作用。