當時曹操把持的東漢政權無暇顧及漢中,遂拜張魯為鎮民中郎將(一作鎮夷中郎將),領漢寧太守。張魯統治巴、漢近三十年。後來有人在地下挖到了玉印,眾人都想要尊張魯為漢寧王。張魯的功曹閻圃勸諫道:「漢川的百姓,戶口超過十萬,財富很多而且土地肥沃,四面地勢險固;上可以匡扶天子,那就成為齊桓公、晉文公之流,最差也是竇融之類的人,可以不失富貴。現在承製設置官署,勢力足以決斷事務,不用稱王。希望您暫且不稱王,不要先招來禍患。」張魯聽從了閻圃的意見。[12] 公元215年(建安二十年),曹操親率十萬大軍西征漢中,抵達陽平關,張魯想要投降曹操。但張魯弟張衛不聽,率數萬人馬堅守陽平關,為曹操所破。張魯聞訊,想磕頭稱降。閻圃又獻計說:「如今您誰被迫謁見,肯定得不到曹公的重用,不如先到樸胡去抵抗,然後再向他獻禮稱臣,這樣才會得到曹公的重用。」
張魯於是率軍前往巴中。臨行前,左右的人想將倉庫裡的寶物全部焚燬,張魯說:「我已有歸順朝廷的意願,但這一意願沒能讓曹公知曉。今天我們離開,不過是避開鋒芒,並沒有別的意圖。寶貨倉庫,應歸國家所有。」於是將寶物都妥善藏好才離去。曹操到達南鄭後,對張魯的行為深加讚許,又因張魯早有歸順之意,所以派人前去慰問。張魯帶著全家謁見曹操,太祖任命他為鎮南將軍,以客禮相待,封張魯為閬中侯(一作「襄平侯」),食邑一萬戶。曹操將他和家屬帶回鄴城。封張魯的五個兒子及閻圃等人為列侯。替自己的兒子曹宇娶張魯女兒為妻。後世道教徒稱張魯為「張鎮南」。