漢宣帝在對待匈奴的問題上,功勳卓著,甚至比漢武帝窮天下之兵伐匈奴所取得的功績還大。自武帝末年,匈奴內部因爭奪繼承權不斷發生矛盾,雖仍頻犯邊塞,但無力深入,對漢朝的威脅減少。宣帝即位之初,與漢朝和親的烏孫遭匈奴攻擊,請宣帝出兵救援。宣帝下令出動十五萬騎,兵分五路,各出塞兩千餘裏。匈奴聞訊遠遁,漢軍雖未能重創匈奴,但匈奴倉促遠徙,人員傷亡較大,牲畜的損失十分慘重。
同年冬,匈奴單於率上萬騎兵向烏孫報複,遇大風雪,人畜大量凍死,生還者不到十分之一。原受匈奴控製的丁零、烏桓乘機與烏孫同時夾攻匈奴,匈奴戰死者數萬,百姓凍餓死者竟達其總人口數的十分之三,牲畜損失了一半。原受匈奴羈屬的各國,紛紛擺脫其控製而自立。匈奴無力再侵擾漢朝邊塞。
其後,匈奴內亂不已,以致五單於同時並立。實力稍強的呼韓邪單於也僅有人眾數萬而已。後來,呼韓邪被郅支單於擊敗。公元前51年,呼韓邪率其眾南移至邊塞,遣其子入侍為質,向漢朝稱臣,請漢朝救援。呼韓邪單於又親自到五原塞,提出要到長安朝見宣帝。
公元前51年正月,宣帝派車騎都尉韓昌前往迎接呼韓邪單於,同時下令單於途經的七郡派出騎兵護衛。呼韓邪到長安後,宣帝以特殊的禮遇待他,朝見時位列諸侯王之上,並賜給他大量財物。宣帝派使者導引呼韓邪單於到長平下榻,宣帝又親自到長平拜晤,下令單於見麵時免去跪拜之禮。呼韓邪單於隨行的匈奴貴族和其他各族首領上萬人列隊歡迎,觀看兩位君主的會晤,盛況空前。
呼韓邪受到禮遇後很感動,他居留了一個多月後歸去,臨行要求宣帝同意他將部落移近邊塞居住,以便受到攻擊時利用漢朝所築的受降城防禦。宣帝派長樂校尉董忠等率16000名騎兵,又在邊塞郡縣征調了一批兵馬,護送呼韓邪單於歸國。為了扶助呼韓邪休養生息、壯大實力,宣帝又令將邊塞貯存的穀、米等糧食調運了三萬四千斛給呼韓邪,幫助他渡過難關。兩年後,呼韓邪再次朝見宣帝。此後,雙方使者往來不斷。
郅支單於見呼韓邪降漢,估計他兵力虛弱難返大漠,曾準備出兵占領其地。後來郅支見宣帝出兵援助,便不敢貿然興兵,且率部西移。元帝時,郅支單於被漢軍擊敗,郅支身亡,呼韓邪單於重新統一了匈奴。匈奴與漢代的和睦親善的關係,一直保持到西漢末年。自西漢開國以來150多年懸而未決的匈奴為患問題,終於在宣帝時徹底解決了。
漢代經營西域雖自武帝始,但確立漢朝對西域諸國的控製,則在宣帝時。張騫通西域和李廣利征大宛後,漢王朝在河西走廊以西,“自敦煌以西至鹽澤”修建驛亭,武帝還在輪台、渠犁兩處各派駐數百人屯田,設使者校尉管理屯田。當時屯田的目的,主要在於供給經絲綢之路出使的漢朝使團。
宣帝親政後正值匈奴日漸虛弱,便積極準備經營西域。公元前68年,宣帝派侍郎鄭吉率領一批免刑的罪徒到渠犁屯田,囤積糧草,準備進攻西域大國車師。同年,鄭吉邀集西域各國兵眾萬餘人,與屯田戍卒會合,擊敗車師,同時來攻車師的匈奴兵馬不戰而退。鄭吉率眾回渠犁後,已降漢的車師王怕匈奴再來,便逃往烏孫,匈奴乘機改立車師王之弟為王,將車師的百姓向東遷徙。鄭吉於是派300人在車師故地屯田。
絲綢之路在西域中分為南、北道。公元前65年,西域莎車國內亂,呼屠征殺莎車王及漢使,自立為王,呼屠征想借匈奴勢力壯膽,揚言“北道諸國已屬匈奴”,並以武力威逼南道各國歃盟叛漢,阻斷交通。遠在北道諸國的鄭吉鞭長莫及,無法及時平定莎車之亂。恰逢宣帝派往護送大宛使節歸國的馮奉世等途經西域,馮奉世迅速諭告各國,並率南北道各國兵眾平定了莎車之亂。公元前64年,宣帝升任鄭吉為衛司馬,令他護衛鄯善以西的南道。公元前60年,匈奴日逐王率所部向鄭吉投降。宣帝令鄭吉率屯田兵及渠犁、龜茲等國大軍5萬,護送日逐王到河套地區。日逐王麾下原置僮仆都尉,專營從西域諸國收取賦稅,日逐王降後匈奴對西域的威脅已基本消除。鄭吉“攻車師,降日逐”,威震西域。同時,宣帝令鄭吉並護南北道,號稱都護。西域都護的設置,表明今巴爾喀什湖以東、以南的廣大地區,已成為西漢王朝疆域的一個組成部分。
西域都護的衙門設在烏壘(今新疆輪台東),其下轄屯田校尉等。烏壘城一帶土地肥沃,物產豐盛,便於屯戍,且地處西域中部,便於監視南北道諸國的動靜,如有變亂,可安撫則安撫,不然則出兵討平。西漢在西域屯田的規模也不斷擴大,至元帝時,又增設戊己校尉管理屯田。
通過宣帝在前代基礎上的努力,漢朝有效地控製了西域,同時保障了絲綢之路南北兩道的暢通,促進了西域的開發,促進了中國與中亞、西亞的經濟、文化交流。