不久,呂布為李傕、郭汜等擊敗,張遼跟從呂布往東奔至兗州,為曹操所敗後前往徐州。
建安三年(公元一百九十八年),呂布遣張遼與高順等攻破劉備,但其後曹操破呂布於下邳,張遼率領呂布軍餘眾歸降曹氏,被拜為中郎將,賜爵關內侯。
建安五年(公元二百年),袁紹派顏良襲擊白馬,曹操命張遼與關羽同為解白馬之圍的前鋒,擊破袁軍。數有戰功,累遷裨將軍。等到曹操擊敗袁紹的主力部隊後,另派張遼平定魯國諸縣。
建安六年,張遼與夏侯淵同圍昌豨於東海,曆經數月,糧秣將盡,眾人商議先引軍而還,但張遼卻向夏侯淵說:“這些天以來,每次我們巡視圍城軍情時,昌豨就兩眼盯著我看。而且他的士兵所發射的箭日益稀少,此必是昌豨心懷猶豫,所以才沒有力戰。我希望能試一下他,並與之洽談,倘若可以成功誘使昌豨下山,不是很好嗎?”於是命人向昌豨說:“曹公有命令,讓張遼來對你傳達。”昌豨果然下山與張遼對話。張遼便說:“曹公神智武勇,正在用他的仁德感化四方各派的勢力,先歸附的可以受大賞。”於是昌豨便答應投降。張遼知其肯降,於是隻身上三公山,入昌豨家中,並拜候其家人。昌豨見張遼如此坦誠相對,心中歡喜,便隨之往見曹操。
曹操先遣昌豨還東海,隨後訓責張遼說:“隻身赴敵巢穴,這不是大將所為。”張遼卻拜答道:“憑著明公達於四海的威信,我拿著聖旨,昌豨必然不敢害我,所以我才敢去。”
建安七年,張遼跟隨曹氏大軍討袁譚、袁尚於黎陽時,累有功勞。建安八年,曹操攻袁尚於鄴城,袁尚堅壁守壘,曹軍久攻不下。因此曹操采納郭嘉之計,讓二袁自行內鬥而先還許都,同時令張遼與樂進攻拔陰安,把當地百姓遷移到黃河以南。
建安九年,張遼再次隨曹操攻打鄴城,這次終於攻破鄴城,張遼奉命別巡趙國、常山,招降了緣山一帶的賊眾及黑山孫輕等,此後再度隨曹操攻擊袁譚。
建安十年,袁譚敗亡後,張遼受命安撫海濱一帶,大敗公孫度所置的營州刺史柳毅、與長廣太守何夔合兵討平矣平賊從錢等。曹操上表漢獻帝,稱張遼、於禁、樂進說:“武力強大,計謀周全,品性忠正,操守高潔,每次征戰,身先士卒,勇猛頑強,無堅不摧;親自擂動戰鼓,忘了疲倦。他們單獨領兵征討,統率全軍,撫慰將士,紀律嚴明,秋毫無犯;臨敵決策,沒有失誤。論功記職,應該給予顯要榮寵。”收複東萊諸縣後的張遼引軍還鄴城,曹操親自出城迎接,邀請他同乘一輛車,任命他為蕩寇將軍。
建安十一年,張遼率軍攻打荊州,平定江夏諸縣,在臨穎屯兵,再度受封為都亭侯。
建安十二年,曹操要征討在柳城的袁尚,張遼進諫道:“許都,是天子所在的地方。現今天子就在許都,曹公北征甚遠,若劉表派遣劉備攻擊許都,占據它號令四方,您的形勢將會大去。”曹操則判定劉表必不能任用劉備,遂繼續出征。行軍中途與敵軍相遇,張遼壯氣奮發,力勸曹操接戰,曹操十分欣賞張遼的鬥心,又看見烏桓的軍隊尚未排成陣形,於是將自己的麾旗授予張遼暫用,任命張遼為前鋒出戰,於是張遼引軍突擊,大破烏桓,斬單於蹋頓於陣前。
建安十三年,荊州尚未安定,曹操命張遼屯軍於長社。軍隊臨出發之際,軍中忽有謀反者起事騷動,半夜驚亂起火,全軍盡受其擾。此時張遼對左右說:“不可亂動。這一定不會是全營盡反,必然是引起叛變之人,想藉此惑亂他人而已。於是傳令軍中,隻要不是反亂者安坐勿動。而張遼則帶領親兵數十人,守立於陣中。不久情況穩定下來,軍中隨即擒獲首謀者,並將其殺除,動亂亦告平定。赤壁之戰時,曹操徙趙儼為都督護軍,護於禁、張遼、張郃、朱靈、李典、路招、馮楷七軍,都是曹軍赤壁之戰主力,可惜一把火,全軍盡墨。
建安十四年,廬江人陳蘭、梅成占據氐等六縣作叛,曹操於是遣於禁、臧霸等討伐梅成,又命張遼督領張郃、牛蓋等討伐陳蘭。當時梅成詐降於禁,於禁引軍便還。不料梅成趁機會帶其軍眾往投陳蘭,二人轉入灊山自守。灊山中有天柱山,高峻約有二十餘裏,道路險狹,陳蘭等眾避於其上,山下進軍難通。張遼意欲登山進兵,諸將皆說:“此山道路險惡,我軍兵少,很難可以深入用兵。”張遼卻說:“這正是所謂‘一與一,勇者得前耳’”於是進至山下安營,起兵上山攻擊,終於斬下陳蘭、梅成首級,盡虜其眾。曹操論諸將功勞,說:“登上天山,踏過險峻,成功討取陳蘭、梅成,都是蕩寇將軍的功勞。”於是增其邑,假節。