袁紹見劉備去了不回,大怒,便想發兵討伐。謀士郭圖道:“劉備不足為慮,曹操才是勁敵,不可不除。江東孫策威鎮三江,主公可以派人聯絡他共同進攻曹操。”袁紹依言修書。
不料袁紹的使者見過孫策後不久,孫策便得病身亡。張昭、周瑜等人輔佐他的弟弟孫權繼承了江東的基業。曹操得到訊息,當即奏封孫權為將軍,兼領會稽太守。袁紹見曹操又結納了孫權,大怒,便率領冀州、青州、幽州、並州等處人馬七十餘萬,旌旗遍野,刀劍如林,去攻許都。袁紹謀士沮授進諫道:“我軍雖然人數眾多,但勇猛不如曹軍;曹軍雖然精良,但糧草不如我軍。曹軍缺少糧草,利於急戰;我軍糧草充足,利於緩守。若能延長時日,則曹軍會不戰自敗。”袁紹非但不聽,反而大怒,將沮授鎖禁在軍中。
消息傳到許都,上下震動。曹操雖坐鎮許都,挾天子以令諸侯,但以實力而論,此時天下沒有能勝出袁紹者。郭嘉論及曹操與袁紹實力對比,曾提出“十勝”、“十敗”之說,以為曹操有十處能勝出袁紹,如:袁紹外寬內忌,任人唯親,曹操則外簡內明,任人唯賢;袁紹多謀少斷,曹操則當機立斷;袁紹好聽讒言,曹操則遇事分明;袁紹是非混淆,曹操法紀嚴明;袁紹好虛張聲勢,實則不懂兵法,曹操則能以少勝多,用兵如神……謀士荀攸也以為袁紹雖然兵多但不足以畏懼,因曹軍都是精銳之士,人人以一當十,但曹軍糧草不足,利在速戰速決。曹操彙集眾議,整頓兵馬,起兵七萬前去迎敵。雙方在官渡相遇。
兩軍對壘,袁紹金盔金甲,錦袍玉帶,帳下張郃、高覽、韓猛等戰將陣容嚴整。曹操帶許褚、張遼、徐晃等出馬,質問袁紹何故反叛。袁紹大怒道:“你名為漢相,實為漢賊!罪惡甚於王莽、董卓!”曹操道:“我今奉聖旨前來討伐你!”袁紹也道:“我奉皇上衣帶詔來討賊!”曹操派張遼、許褚出馬,袁紹手下張郃、高覽迎戰,一陣交鋒,袁紹終究人多勢眾,陣上萬箭齊發,曹軍大敗,退至官渡堅守不出。袁軍築土山、挖地道攻營,都被曹軍破去。守了一個多月,曹軍糧草告急,急忙派人到許昌讓荀彧籌集糧草。使者走不到三十裡,被袁軍捉住,押來見許攸。許攸忙報告袁紹曹操糧草告急,可以趁機攻之。袁紹知道許攸是曹操的故交,疑心許攸私通曹操來行誘敵之計,反將許攸罵出。許攸見袁紹不信任自己,便偷偷地去投奔曹操。
曹操聽說許攸來了,連鞋子也來不及穿,光著腳就出帳迎接。許攸問曹操營中有多少軍糧,曹操說可支付一年,許攸笑道:“恐怕未必。”曹操又道有半年,許攸拂袖而起道:“我以誠相投,公如此欺騙,真讓我大失所望!”曹操挽留,道軍中糧草隻夠三個月了。許攸笑道:“世人都道曹孟德奸雄,果然如此!”曹操也笑道:“豈不聞兵不厭詐!”於是在許攸耳邊悄悄說:“軍中隻有本月之糧了。”許攸大聲道:“休要瞞我,糧草已經儘了!”曹操大驚,問許攸如何知道,有何對策。
許攸道:“袁紹的糧草輜重,都堆積在烏巢,由淳於瓊把守。此人好酒,防備鬆懈。你可以派人假扮袁兵前去護糧,乘機放火。這樣,袁軍不出三天,不戰自亂。”曹操大喜。
第二天,曹操便讓荀攸、曹洪等人守大寨,夏侯惇,曹仁則各帶一支人馬埋伏左右,以防不測。曹操親自領張遼、許褚、徐晃、於禁等,率兵五千,打著袁軍旗號,軍士都背著薪柴等引火之物,黃昏時分,向烏巢進發。袁紹謀士沮授此時正被押在營中,推測曹軍會去燒糧草,連夜求見袁紹,讓袁紹派重兵提防。袁紹不聽,怒責沮授。
曹操一路進兵,並無阻礙。到了烏巢,就四下放火。淳於瓊這天夜裡正喝得大醉,來不及抵抗就做了俘虜。一時間,火焰四起,煙霧衝天,袁紹糧草一燒而空。袁紹在大營裡見北方火光衝天,知道烏巢有失,忙命張郃、高覽領兵五千去攻曹軍大營,蔣奇領兵一萬,去救烏巢。蔣奇中了埋伏,被張遼斬了。張郃、高覽一進曹營,兩邊伏兵齊出,袁軍大敗。袁紹以為兩個不肯用力,要抓他們治罪。張郃、高覽無奈,隻得降了曹操。
袁軍失了糧草,人心惶惶。當夜,曹操便分兵三路前往劫寨,袁軍損失大半。曹操又散布謠言,騙袁紹調動兵馬,乘亂衝殺一陣。袁軍全無鬥誌,四散逃跑。袁紹隻帶著八百騎兵,渡河逃命。袁紹回到冀州,重新整頓兵馬。大兒子袁譚、二兒子袁熙、外甥高乾,分彆從青州、幽州、並州帶領人馬前來相助。袁紹便又聚集了二三十萬大軍,來戰曹操。兩軍在隊。左軍:一隊夏侯惇,二隊張遼,三隊李典,四隊樂進,五隊夏侯淵。右軍:一隊曹洪,二隊張郃,三隊徐晃,四隊於禁,五隊高覽。中軍許褚為先鋒。十隊人馬先去埋伏停當。到半夜,許褚假裝劫寨,袁紹全軍出擊。許褚一直退到黃河邊上。此時,曹軍已無退路。曹操大叫一聲:“前麵已無去路,大家拚死一戰吧!”許褚掉轉馬頭,飛馬當先,連斬數將。士兵們也奮勇爭先,袁軍大亂,急忙後退。這時,左右曹軍伏兵齊出,袁紹心驚膽戰狼狽不堪,袁軍屍橫遍野死傷無數。袁紹與三子一甥拚死殺出重圍,兵馬死傷殆儘。袁紹抱住三子大哭一場,不覺昏倒在地。眾人急救,袁紹口吐鮮血不止,歎息道:“我經曆大戰數十次,想不到今日如此狼狽!此天喪我也……”
袁紹率殘部逃回冀州。不久,袁紹吐血而死,三個兒子為了爭權自相殘殺,被曹操乘機一一剿滅。