袁绍又收罗了汝南地区的黄巾刘辟部,让刘备与之配合,率军抄掠许都西侧的颍川和南部的汝南,在曹军背后开辟战场。刘备刚至,即被严阵以待的议郎督骑、曹操的堂弟曹仁击溃。刘备回袁绍大营,看看形势不妙,提出请求:让他南下劝说刘表袭击曹军。袁绍答应了,并让他经过汝南,与黄巾统帅龚都联络。刘备到达汝南,与龚都合兵数千,袭杀曹军将领蔡杨,展开了游击战。不久,袁绍又派出部将韩荀抄断许都西侧道路,又被曹仁打得大败。袁绍侵扰曹军后方的战略企图未能得逞。
七月,袁绍大军南进阳武,与官渡隔汴水相望。八月,袁军又向前逼近,依沙丘屯下大营,东西长达几十里,气势雄壮。
曹操也将大营扎在沙丘地带,与袁绍相拒。
九月一日庚午,两军阵前天昏地暗,发生了日全食。双方士兵的心理都异常紧张。
当日光射出刺眼的光芒,曹操麾动大军杀向袁绍的大营。损失一批士兵之后,曹操只得退守营寨,坚壁不出。于是轮到袁绍来打他了。袁绍在曹军的营外堆了土山,构筑了木楼,在上面把箭矢像下雨一样地射向曹营,打得曹军顶着盾牌趴在地上。曹操下令用抛石机击折袁军的木楼。袁绍天上不行,又来地下,夜里挖地道攻击曹营。曹操命工兵在营前开了一条又宽又深的横沟,袁绍的地道断了头。打了半个月,曹操的军粮紧张了起来,士卒疲惫不堪,甚至有些百姓也叛归袁绍。曹操一见到运粮的军士,就抚着他们的背说:“劳驾诸位,再辛苦十五天,看我为你们破了袁绍,就不再劳累诸位了。”过了些时,曹操也吃不消了,写信给他的总参谋长荀彧,提出退守许都。荀彧回信说成败在此一举,主公你可不能让我们难堪。曹操只得硬起头皮,去堵那像蚂蚁一般多的袁军。
十月的一天,曹操的机会终于来了。
晚上,军士来报,说袁绍的谋士许攸来降,曹操一跃而起,不穿外衣,光着脚出来,拍着巴掌大笑着说:“子卿远来,我的大事成了!”许攸字子远,曹操一时不知用什么爱称叫他,干脆叫起子卿来了。
许攸来降,是因为与袁绍为了曹操的事闹翻了。他建议袁绍趁曹操全力拒敌、无法分兵之际,派出精锐,奇袭许都。袁绍说:“我只要曹操,不要天子。”这时,邺城家中又传来了坏消息,说族中有人犯法,被审配收系。许攸一气之下,夜奔曹营。
许攸和曹操、袁绍都是少年时的朋友,他个性又傲慢,所以也不和曹操客气,开门见山地问曹操:“你的军中还有多少粮食?”
曹操说:“尚可支撑一年。”
“不对,重说!”
“半年。”
“足下小名阿瞒,果然狡诈如初,如不想破袁氏,就不必再说了。”
曹操这才打消疑虑,有些尴尬地说:“刚才说的是笑话,其实只够一个月了。子卿有何妙计?”
许攸慢吞吞地说:“袁氏的万辆粮车,已将军粮运至乌巢,距其营北四十里,大将淳于琼守之,防备不严。如以轻兵袭击,烧其粮草,不出三日,袁氏必败!”
曹操大喜,留曹洪、荀攸守营,亲率步骑五千,打起袁军旗帜,人衔枚,马缚口,携带柴草,在一个夜里从小路进袭乌巢。路上还遇到袁军的巡逻队,问他们干什么,曹军答道:“袁公怕曹军抄掠后方,特派我们增援防守。”
不一会儿,乌巢的火光照彻天空,淳于琼的大营乱成一团,无法作战。天亮之后,淳于琼看曹操就带了五千人,而自己手下有一万多,便将兵士列于营外进攻曹操,被曹操打得退入营寨,曹操麾军攻之。
这边的袁绍不但不急,反而也以为机会来了,他对袁谭说:“曹操打淳于琼,我就拔了他的大营,让他无路可归!”他下令张郃、高览速攻曹营。张郃说:“不可,曹操率精兵袭击,必能攻破淳于琼。淳于琼一败,我等大势已去。不如先救乌巢。”这时,郭图却坚持打曹营。张郃恨恨地说:“曹操如此做,一定会先让大本营防守坚固,如果攻之不拔,淳于琼再败走,我等全部要做俘虏!”
正在攻打淳于琼的曹操,听士兵报告袁绍的骑兵已经接近,气得他大声呵叱:“贼兵到我背后再报告!”他不顾一切地猛攻淳于琼。
当袁绍的骑兵到了面前时,鸟巢的粮草已经烧光,曹操让兵士将淳于琼的人头和袁军士兵的鼻子、牛马的唇舌扔向敌军。袁军大惧而归。郭图眼见交待不了,对袁绍汇报说:“张郃那边太慢,以致兵败。”
正在攻打曹操大营的张郃得知之后,一怒之下,与高览烧了战车向曹洪投降。曹洪不敢相信这一切,迟疑不决,怕是有诈。荀攸果断地让人开了营门。