蔡锷挥师北上,其主攻方向是四川泸州。早在蔡锷率领大部队离开昆明之前,护国军左翼军第一梯团在团长刘云峰的带领下,已经进入滇川交界的新场地方,准备攻占叙州。
第一梯团到达新场时,新场及其附近的燕子坡、黄坡耳和捧印村等地已经被北洋军伍祥帧占领,到处都有重兵把守。1月17日晨,护国军和敌军在新场和燕子坡展开激战。护国军士气旺盛,人人奋勇,个个争先,势如破竹,先后占领了燕子坡、黄坡耳等地,并继续挥师北进,所向披靡,打得敌人溃不成军,4天后攻克了川南重镇叙州。护国军首战告捷,袁世凯气急败坏,下令伍祥祯戴罪立功,反攻叙州。四川将军陈宦悬赏50万元,调兵四路围困叙州。叙州人民踊跃参加战斗,自动组织义勇军配合护国军的正面进攻,他们潜至敌后,为护国军作引导,袭击敌人的炮兵阵地。护国军奋勇冲杀,敌人腹背受敌,一片混乱,敌军纷纷逃窜。接着护国军又先后粉碎了敌军从东、南、西各个方向的进攻,陈宦想四路攻克叙州的计划未能得逞。后来因为蔡锷所率的第二和第三梯团准备攻打纳溪、泸州,但兵力单薄,调刘云峰的部队增援。留守叙州的护国军总共只有四、五百人,在敌军的夹攻下,寡不敌众,退出叙州,北洋军冯玉祥的部队趁机进驻叙州。冯玉祥在镇压护国军的过程中,眼见全国人民的反袁浪潮越来越高,而冯玉祥对袁世凯的复辟帝制也有所不满,于是采取骑墙观望的态度,对袁世凯催促他进攻的命令推三阻四,暗中与蔡锷取得联系,所以,在叙州附近,北洋军和护国军实际上处于休战状态。
1月26日,蔡锷率领的赵又新第二梯团和顾品珍第三梯团抵达贵州毕节。蔡愕命董鸿勋与川军第二师师长刘存厚联系,秘密商定刘军策应护国军的办法。刘存厚是日本士官学校的毕业生、云南讲武学堂的教官,辛亥革命时参加云南重九起义。与蔡锷联系密切。董鸿勋将蔡锷准备攻打泸州的消息向他通报,以求配合、支援。董鸿勋支队于1月31日到达四川永宁,2月2日,刘存厚在与泸州一江之隔的纳溪宣布独立,2月4日董鸿勋的队伍与刘存厚在纳溪会师,从而拉开了决定护国战争命运的、打得极为艰苦和激烈的泸(州)纳(溪)之战的序幕。
在泸州方面,北洋军曹锟已经聚集了张敬尧一师、吴佩孚一旅和川军熊祥生旅,死守泸州,总兵力约1.5万人,装备齐全,士兵的战斗力较强。而蔡锷的中路主军人数只有3130人,刘存厚师约1500人,再加上川边义勇军张煦支队约900人,总共仅5000余人。为了完成从泸州突破的计划,蔡锷不得不抽调西面刘云峰的兵力前来增援助战。
2月5日,董鸿勋和刘存厚的部队合力进攻泸州对面的蓝田坝和月亮岩。月亮岩雄峙长江,如果占据它,可以在上面布置炮兵,居高临下地俯击泸州。2月7日,护国军攻下了月亮岩并把它和蓝田坝一起交刘存厚部的陈礼门团驻守,阻止敌人渡江。董鸿勋不等主力部队到达,自己率两个营的兵力从下游的泰安场渡江,攻击泸州的侧背,占领了泸州郊外的军事要地五峰顶等,眼见泸州指日便可攻破。但是,由于驻守月亮岩的陈礼门麻痹大意,放任士兵赌博,9日,驻泸敌军熊祥生旅一面死守泸州城,一面利用夜幕偷渡长江,突袭月亮岩,使守军猝不及防,惊惧溃逃,陈礼门羞愤自杀。董鸿勋得知月亮岩失守,恐自己孤军深入而遭不测,只好退回纳溪。12日,泸州的敌军倾巢而出,渡过长江,把董鸿勋和刘存厚包围在纳溪富安街一隅,形势十分危急。13日晚,何海清支队赶到纳溪并立即投入了战斗,蔡锷又紧急电令其他各部支援,总参谋长罗佩金率禄国藩和朱德支队也赶赴纳溪前线,攻克泸州的战斗演变成了保卫纳溪的战役。
战斗开始,双方的炮火都异常猛烈,昼夜不息,双方的伤亡都很大。朱德这时接替了董鸿勋的第六支队长的职务,担负起对敌作战的最艰巨的任务。他忠于职守,机智勇敢,指挥有方,与敌军在棉花坡展开了激烈的战斗。棉花坡是纳溪通向泸州的咽喉要地,双方争夺十分激烈,敌军在那里构筑了坚固的防御工事,凭借险要地势,死守,战斗陷入胶着状态。棉花坡一战是护国军泸纳之战的最重要的阶段,双方在此相峙了近1个月,战斗引起了全国人民的关注,对全国各地的影响时间最长;护国军的英勇顽强,在阵地战中处于不败的地位,极大地鼓舞了军队的士气,对全国的号召作用也最大;敌人在此役中兵力损伤很大,元气大伤。当时,北洋军依仗枪械多弹药足,昼夜不停地向护国军阵地倾泄炮弹,连阵地前后的松林都被击倒了大半,毁落在地上的松针达几寸厚。但护国军将士们在枪林弹雨面前没有退缩,表现出为正义而战的大无畏精神。
蔡锷看到曹锟的军队源源不断地进入四川,双方相峙在棉花坡,而敌军的工事坚固,负隅顽抗,护国军处于向上仰攻的形势,胜败难分。为了击破北洋军的进攻,蔡锷指挥全军分三路向敌军反击。2月23日,蔡锷不顾自己身体虚弱,带病从设在永宁的总司令部奔赴纳溪,亲临前线指挥战斗。将士们得知蔡锷来到前线,士气大振,勇猛杀敌。蔡锷到纳溪后,与总参谋长罗佩金日夜筹划,准备大反攻。反攻前夕,蔡锷身着士兵服到前线巡视,午后经过朝阳观敌军阵前时,行进间被敌军发现,敌机枪猛烈扫射,弹密如雨,蔡锷进退两难,不得不和军士一起从田埂滚入水田隐蔽,在水深及胸的水田中躲到天黑,才爬上田埂回到指挥部。即使在这样的艰难险境,蔡锷仍然保持着革命的豪情,他在诗中写道:“绝壁荒山二月寒,风尖如刃月如丸。军中夜半披衣起,热血填胸睡不安。”
经过几天的修整和部署,蔡锷在2月28日命令发起总反攻,反攻的主攻部队是何海清支队,朱德、王秉钧支队和刘存厚部作为助攻部队。反攻开始以后,护国军冒着绵绵的细雨,在绵亘20余里的战线上,与敌军连续激战了几天几夜,多次与敌军短兵相接,展开肉搏。朱德在回忆这场战役时说:“川南全部化为战场,一连激战了45个日日夜夜,毫无间歇。”蔡锷也曾说:“此三星期之剧战,实吾国有枪炮后之第一战也。”在这次战役中,叙府得而复失,纳溪三易其手。由于战事旷日持久,部队官兵过于疲劳,而敌人的增援部队还源源不断地到来,护国军却无援兵可供补充,军需、弹药也快要用尽。蔡锷在前线多次呼吁请求增援,却没有得到应有响应,只好采纳罗佩金、刘存厚等人的意见,于3月7日凌晨分左、中、右三路撤出纳溪。此次撤退,并不是溃败而退,而是有计划的周密的行动。当队伍开始撤退时,敌军用猛烈的炮火进行轰击,炮弹落在蔡锷的总司令部所在地周围,弹片纷飞,炮声震耳,蔡锷却泰然自若,坚持指挥部队有条不紊地撤退,直到护国军全部撤出纳溪,他和司令部的成员才缓缓离开。蔡锷的司令部行营撤至永宁大洲驿,司令部就设在永宁河边的一条船上。
这次战斗历时较长,蔡锷虽然身患重病,但却始终坚持战斗,和士兵们一起日夜寝食于风雨之中,出生入死。尽管敌我双方力量对比悬殊,护国军人数有限,以劳攻逸,地势不利,但是军中士气坚定,上下一心。尽管伤亡惨重,并没有削弱将士的斗志,士兵勇猛顽强,以一当十,所以虽然屡涉险境,都能够绝处逢生。蔡锷退驻大洲驿后,疾病日趋加重,两个星期喉病重得不能发音,每到夜间,喉间痒痛,随后剧烈地咳嗽。这时,敌我双方暂时处于休战状态,蔡锷才得以利用这么一点空隙休养一下。
1916年2、3月间,正当蔡锷指挥护国军与北洋军在川南激战时,梁启超积极策动广西起义,以减轻北洋军对四川的压力,支援蔡锷的护国战争。3月15日,广西将军陆荣廷在柳州行营正式通电全国,宣布广西独立,以广西都督的名义兼两广护国军总司令,任命梁启超为总参谋。接着,出兵广东和湖南,将护国战争向东扩大了。广西的独立对正在四川艰苦作战的蔡锷和护国军是一个很大的鼓舞。
经过一段时间整顿队伍,休养兵力,蔡锷抓住广西独立的大好时机,于3月17日下达了总反攻令。护国军从几路发动进攻,连战告捷,一举拿下了江安、南溪等地,兵临纳溪城下,直逼北洋军张敬尧的大本营泸州。护国军在这次出击中乘胜追击,敌人的精锐部队遭到重创,元气大伤,不得不和护国军停战议和。
蔡锷等人掀起的护国运动,在全国范围内引起了很大的反响,敲响了袁世凯复辟帝制的丧钟。袁世凯原定的在1916年元旦的登基大典也没能如期进行,一再拖延。眼见全国的反袁风潮越演越烈,他手下的两员大将段祺瑞和冯国璋也与他貌合神离,同床异梦了,他们暗中和蔡锷、唐继尧等人互通情报;帝国主义各国也在袁世凯的江山摇摇欲坠的时候改变了态度,多次对袁世凯政府提出警告。国内外形势的发展,迫使袁世凯于3月22日下令撤消帝制,废除“洪宪”年号,这样,他做了102天的皇帝梦成了泡影。