康熙二十二年(1683年)九月,清朝下令俄罗斯侵略军撤离清朝领土。然而,侵略军无视命令,反而突袭了爱珲地区。清朝将领萨布素成功击败了侵略军,并将他们在黑龙江下游建立的据点全部摧毁,使雅克萨成为一个孤立的城市。然而,侵略军仍然顽抗。
康熙二十四年(1685年)正月二十三日,为了彻底消除俄罗斯的侵略,康熙皇帝命令彭春率领部队前往爱珲,负责收复雅克萨。四月,清军约3000人跟随彭春出发,带着战舰、火炮、刀矛、盾牌等武器,分为水陆两路向雅克萨行进。五月二十二日,他们抵达了雅克萨城下,并立即向侵略军的首领托尔布津发出通牒。然而,托尔布津依靠坚固的巢穴,部队有450人,三门大炮和300支鸟枪,拒绝投降。
五月二十三日,清军分水陆两路建立阵营进行攻击。陆军在城南布阵,战舰聚集在城东南,炮台布置在城北。在黎明时分,清军开始炮击,侵略军伤亡惨重,无法支撑战斗。托尔布津请求投降,并要求在保留武装的条件下离开雅克萨。经过彭春的同意,俄军撤离雅克萨到了尼布楚(今涅尔琴斯克)。清军赶走了侵略军之后,摧毁了雅克萨城,并开始撤离回师。他们留下一部分军队驻守在爱珲,另外还在爱珲和墨尔根(今黑龙江嫩江)地区驻扎农田,加强了黑龙江一带的防御。
沙俄侵略军被迫撤离雅克萨后,贼心不死,继续拼凑兵力,图谋再犯。康熙二十四年(1685年)秋,莫斯科派兵600增援尼布楚。当获知清军撤走时,侵略军头目托尔布津率大批沙俄侵略军再次窜到雅克萨。俄军这一背信弃义的行为引起清政府的极大愤慨。次年初,康熙接到奏报,即下令反击。
七月二十四日,清军2000多人进抵雅克萨城下,将城围困起来,勒令沙俄侵略军投降。托尔布津不理。八月,清军开始攻城,托尔布津中弹身亡,改由杯敦代行指挥,继续顽抗。八月二十五日,清军考虑到沙俄侵略者死守雅克萨,必待援兵,且考虑隆冬冰合后,舰船行动、马匹粮秣等不便,于是在雅克萨城的南、北、东三面掘壕围困,在城西河上派战舰巡逻,切断守敌外援。侵略军被围困近年,战死病死很多,826名侵略军,最后只剩66人。雅克萨城旦夕可下,沙皇急忙向清请求撤围,遣使议定边界。清答应所请,准许侵略军残部撤往尼布楚。雅克萨反击战结束后,双方于康熙二十八年(1689年)七月二十四日缔结了《中俄尼布楚条约》,规定以外兴安岭至海,格尔必齐河和额尔古纳河为中俄两国东段边界。黑龙江以北,外兴安岭以南和乌苏里江以东地区均为清朝领土。此仗直接遏制了沙俄的东扩,彼得一世大为震惊(此时他刚刚掌权),不得不将进攻方向由“东扩”改为“西进”,为夺取波罗的海和黑海出海口而努力。