在西拉木伦河以北是兀良哈部族,明朝在那里设了三个羁縻卫,称为兀良哈三卫。建文元年(公元1399年),燕王朱棣举兵推翻建文帝夺取皇位时,曾联络兀良哈三卫支援,到朱棣登位后,就将北平行都司改名大宁都司,移治保定府(今河北保定市),原来的辖地都作为报酬让给了兀良哈。东胜左右卫也分别迁到了今河北的卢龙和遵化。这样一来,开平卫和兴和所成了孤悬的据点,永乐二十年(公元1422年),兴和所被蒙古阿鲁台袭陷,迁治宣府(今河北宣化县)。宣德五年(公元1430年),开平卫也移治独石堡(今河北赤城县北独石口)。至此,在今北京、河北、山西境内的明朝北界已经退到了以后的长城一线。河套地区本来是明朝的辖地,但在东胜卫后撤后失去了支援,而蒙古却不断入侵,到天顺(公元1457—1464年)后就完全成了蒙古的势力范围。嘉靖时曾一度准备收复河套,但没有成功。所以在今陕西、宁夏和甘肃境内的明朝疆域也是以长城一线为北界了。当然,以长城为界并不是绝对的,与辽东边墙一样,山海关以西的长城(明代也称为边墙)也不一定完全按照当时的疆域范围建筑。而且由于鞑靼、瓦剌以游牧为主,实力也有盛有衰,有时逼近长城,有时又退却很远,明朝的实际控制区常常越出长城,在长城以北还存在一些双方势力交错或者都不加控制的地区。
洪武初年,明朝曾取得了元朝在西北的全部疆域,即亦集乃路(治所在今内蒙古额济纳旗东南)、沙州路(治所在今甘肃敦煌市)、肃州路(治所在今甘肃酒泉市)和甘州路(治所在今甘肃张掖市),占有今甘肃和内蒙古的西部。但不久就放弃了西部,撤到了嘉峪关。当时在关外还设有七个羁縻卫所,自成化(公元1465—1487年)以后,其西的土鲁番势力日益强大,吞并了这些羁縻卫所,明朝的疆域就限于嘉峪关以东、长城以内了。
在北方,为了打击和消灭元朝的残余势力,明军不止一次发动进攻,如永乐十二年(公元1414年)明成祖朱棣亲自率步骑50万击瓦剌马哈木,追至土剌河(今蒙古国土拉河);永乐二十二年成祖又亲征,至和林(今蒙古国哈尔和林)东北的达兰纳穆尔河而还。但由于明军长途进军,离后方很远,对手又是游牧民族,流动性很大,所以既难以久驻,也不可能毕其功于一役。虽然明朝无法占领每次军事行动到达的地方,但因实力强大,洪武时的北界还是推进了很多,先后设置了大宁卫(驻今内蒙古宁城县西)、开平卫(驻今内蒙古正蓝旗东闪电河北岸)、东胜卫(驻今内蒙古托克托县)和兴和所(驻今河北张北县)等军事驻屯机构。洪武二十年(公元1387年)设大宁都司,次年改称北平行都司,治所在大宁卫,辖境北至今西辽河、西拉木伦河、内蒙古克什克腾旗、查干诺尔一线。其西的明朝北界则在阴山山脉和贺兰山一线。