北匈奴由于发生了饥荒,而出现内乱,每年约有几千人向南匈奴投降。章和二年(公元88年)七月,南匈奴的单于向汉朝上书,请求趁北匈奴内乱出兵讨伐,帮助南匈奴统一北匈奴,从而也解除汉朝的北患之忧。
当时窦太后临朝听政,窦宪以侍中身份入宫参与机要,对外宣读诏旨;窦宪的几个弟弟也都凭借外戚身份处于显要的地位。
齐殇王刘石的儿子都乡侯刘畅到京城凭吊国丧,窦太后屡次接见他,与他商议事情。窦宪怕刘畅分去自己在宫廷内外的权力,就派遣刺客,在皇宫的禁卫军营将刘畅刺死。
案情后来被彻底查清。窦太后知道真相后大怒,把窦宪囚禁在内宫。窦宪害怕自己被杀,就请求让自己去攻打匈奴,以此赎自己的死罪。
十月,朝廷任命窦宪为车骑将军,讨伐北匈奴;任命执金吾耿秉为副统帅。
永元元年(公元89年)春,窦宪准备出发。三公九卿都到朝堂上书劝谏,认为匈奴并没有侵犯边境,不应该无缘无故劳师远征,耗费国家财力。窦太后一律不听,坚持要讨伐匈奴。
六月,窦宪、耿秉大军从朔方鸡鹿塞出发,南单于从满夷谷出发,度辽将军邓鸿从稠阳塞出发,一起在涿邪山会合。
窦宪分别派遣副校尉阎盘、司马耿夔、耿谭率领南匈奴的精锐骑兵一万多人,与北匈奴的单于在稽洛山大战,大败北匈奴军,北单于逃走。窦宪率部继续追击,斩杀部落首领以下一万三千人,很多人被生擒活捉,俘获各种牲畜一百多万头。各副王、小王率领部族前来投降的,前后共有八十一部,二十多万人。
窦宪、耿秉出塞后长驱直入三千多里,登上燕然山,命令中护军班固立石刻碑,记述汉朝的国威和恩德,然后班师回朝。
窦宪派军司马吴汜、梁讽带上金帛财物送给北单于。当时北匈奴内部大乱,吴汜、梁讽一直到西海边才赶上单于,向他宣示汉朝的声威和诚信,并以皇帝的名义进行赏赐。单于叩拜接受。
于是梁讽劝说北单于,让他效法呼韩邪单于做汉朝的藩属。单于听了很高兴,立即率领部众同梁讽一起南归。
抵达私渠海时,听说汉军已经入塞,单于就派他弟弟右温禺较王带着贡品,去汉朝做人质,跟着梁讽一起入京朝见。窦宪因为北单于没有亲自前来,便上奏把单于派来做人质的弟弟送回去了。
九月初七,朝廷任命窦宪为大将军,封武阳侯,享有二万户食邑。以前,大将军的地位在太尉、司徒、司空三公之下;到这时,太后下诏,规定窦宪的地位在太傅之下,三公之上。
次年九月,北单于因为汉朝将他送去做人质的弟弟遣回,再次派遣使者到边塞请求臣服,并表示想入京朝见。十月,窦宪派班固、梁讽前去迎接。
正在这时,南单于再度上书请求消灭北匈奴政权,听说北单于请求臣服的消息,就派遣左谷蠡王师子等人率领左右两部共八千骑兵出兵鸡鹿塞,袭击北单于。
夜间,大军到达,包围了北单于。北单于突围受伤,仅仅得以逃脱性命。南单于俘获北单于的妻子及其子女五人,斩杀了八千人,生擒的也有几千人。
窦宪见北匈奴势衰力弱,想趁机消灭它。永元三年(公元91年)二月,他派遣左校尉耿夔、司马任尚率军出居延塞,在金微山包围了北单于。结果汉军大败北匈奴军队,俘虏了北单于的母亲阏氏,斩杀部落首领以下五千余人。北单于逃走,不知去向。
汉军继续挺入,出塞五千余里才班师回朝,此次远征距离之远,取得汉朝出击匈奴以来前所未有的业绩。