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