顺治十二年(1655年)三月,清朝的福建巡抚得到了郑芝龙与郑成功的往来信件,于是马上把这封信寄给了清朝的皇帝。十二月,郑芝龙的仆人尹大器也去告发郑芝龙同郑成功通信。清廷把郑芝龙关在牢狱里,对他施行了各种刑罚,他写信向郑成功求助,郑成功仍旧没理。
清廷开始着急了,把郑芝龙手脚都用铁链锁了起来,以防他逃走,同时叫了很多官兵把守。
那一年,永历帝叫周金汤封郑成功为延平郡王。郑成功想带兵打到南京去,恢复大明。顺治十五年(1658年)七月,郑成功决定出兵,封黄延做前提督,洪旭做兵官,郑泰做户官留守。把兵事布置好之后,郑成功就率领水师打到浙江。起初还算顺利,他夺回了乐清一带的小县,还攻下了羊山。可是就在大军进入长江之前,他们遭遇了飓风,损失非常惨重,只得暂且退回厦门。
又过了一年,郑成功再次率领大军北伐,顺利进入长江。同年六月,他率兵打到崇明,许多将官商议要把崇明拿下做大本营。郑成功却说:“瓜洲比崇明还要紧,这里是金陵的门户,一定要先打下来。”
于是他带兵向前进行,浩浩****,势如破竹。他率领的大军,一共有十七万人:五万水军、五万骑兵、五万步兵、一万往来策应兵、一万铁军。
从六月一日至三日,全军由江上行进,八日到达丹徒,十三日到了巫山,停泊下来。十五日,他们着长服,祭拜太祖高皇帝,着素服,祭先帝。兵士们失声痛哭。
顺治十六年(1659年),郑成功带兵直逼镇江。清朝的将官蒋国柱拼命防守,他打算趁此先下手为强。不料郑成功早有防备,先派藤甲兵抵住清军骑兵部队的进攻,随后又诱敌深入以火炮炸死千余清兵。
清军初次受挫后便撤回银山安营扎寨,二十二日夜,郑成功派精锐部队夜袭银山,击溃清军。
次日清晨,郑成功乘胜向清军残余部队发起全面进攻,火炮、弓矢、火箭齐发,清军大溃,撤回南京,郑成功取得了镇江大捷。
当时的南京总督正是洪承畴,他得知此事连忙叫部下的一千个铁骑兵赶去应援。那些铁骑兵多是蒙上铁甲,骑了大马,威风凛凛,杀气腾腾。常州、无锡、江阴各地也开始集兵,共计一万五千人。
他们根本没把郑成功的军队放在眼里:“不过是些海贼,哪里值得一打呢!”
他们哪里知道,郑成功的水兵非常厉害。他们的船往来漂泊不定,你打到东边,他走到西边;你走到西边,他又跑到东边。就这样跑来跑去,让你摸不着头脑。
这样一来,清兵在江面一连守了三日三夜,疲惫不堪。
就在这时,郑成功的水兵从江上杀了过来,四面包围,仿佛是飞将军从天而降。清朝铁甲骑兵奋勇向前,郑成功的兵也没有一个退后的。清兵人强马壮,锐不可当。没多久,郑成功的兵忽然举起白旗。清兵十分高兴,以为郑成功要退兵了。可等到清兵追来,郑成功突发大炮,一时炮火冲天,清兵自相践踏,死伤不计其数。
清兵大败以后,提督管效忠从滇南带了几万兵,分道来应战,最终败走银山。郑兵乘胜追去,万军呐喊,天地震动。郑成功得了镇江之后,在岘山之上大宴将官兵士。郑成功的部下,崇明伯甘辉劝郑成功说:
“瓜(洲)、镇(江)为南北咽喉,但坐镇此,断瓜洲,则山东之师不下;据北固,则两浙之路不通,南都可不劳而定矣。”
但郑成功不肯听他的话,率军去打南京。清廷南京总督郎廷佐足智多谋,他听说郑成功率军而来,一面施展缓兵之计,向郑成功假意请降,一面又提出按大清旧律,以守城30天易手,方不加罪守城将士及其家小为由,请求宽限30天。郑成功信以为真,于是屯兵城下,旷日持久,一拖就是两个月,没有全力组织攻城。
甘辉又劝郑成功说:“用兵贵在神速。现在,他们的兵多,我们的兵少。我们利在速战。速战,则敌人不及预备,容易攻下来。要是慢慢地等着,等到敌人已经布置好了,救兵也来了,我们就没有办法了。”
可郑成功又不肯听他的话。
后来,清兵的城内防守已布置好了,各路的救兵也都到了。于是出城来同郑兵交战,四路夹攻,使郑成功的部下来不及应对,落败而逃。甘辉被清军抓获,因不愿意投降被杀。郑成功乘船逃走,回到海岛之后,想到自己不肯听甘辉的话后悔不已。于是他自贬王爵,并且修了一座忠臣庙,把死难的忠臣都列在里面。甘辉神位,被放在了第一位。
清兵得胜以后,决定率兵进攻郑成功的地盘。顺治十七年(1660年)五月,清廷率海陆重兵讨伐郑成功,郑成功在厦门防守。
等到清兵来的那一天,狂风大作,北方的兵士不懂水性,坐在那狂风大浪的船里头昏脑涨。就在这时郑成功举旗进攻,不习水战的清兵弃船逃岸。郑成功继续上岸应战,清兵死伤无数。
受了这次打击以后,清廷也知道了郑成功的厉害,不再敢轻易动兵。
然而厦门是座孤岛,当时粮草匮乏,难以给郑成功的军队提供充足的给养,这时候,前荷兰通事何斌建议郑成功去台湾。