為什么不能連續(xù)?設(shè)計(jì)原理與工程真相)
前幾天整理工作室的舊設(shè)備登進(jìn)路由器后臺(tái)看在線設(shè)備列表IP地址倒是排得整整齊齊——192.168.1.1、192.168.1.2、192.168.1.3一路順下去旁邊對(duì)應(yīng)的MAC地址卻像一鍋粥有的以A4:5D:36開(kāi)頭有的以00:1E:65開(kāi)頭還有一串看不出任何規(guī)律的亂碼。那一刻我突然愣住IP能連續(xù)憑什么物理地址就不能連續(xù)順著這個(gè)問(wèn)題查了幾天資料把思路捋清楚之后決定整理成這篇筆記。不管你是剛接觸網(wǎng)絡(luò)的初學(xué)者還是被家里設(shè)備折騰過(guò)的普通用戶看完應(yīng)該都能明白物理地址的不連續(xù)不是設(shè)計(jì)疏漏而是它本來(lái)就不需要、也沒(méi)辦法連續(xù)。1. 先把物理地址這個(gè)說(shuō)法掰扯清楚1.1 教程里的物理地址其實(shí)是指MAC日常聊天時(shí)經(jīng)常有人把物理地址和IP地址混著說(shuō)其實(shí)在網(wǎng)絡(luò)語(yǔ)境下物理地址就是MAC地址Media Access Control Address全稱叫介質(zhì)訪問(wèn)控制地址。之所以叫物理是因?yàn)樗诰W(wǎng)卡出廠時(shí)被燒錄在硬件芯片里不像IP那樣是靠軟件配置、隨時(shí)能改的。正是這個(gè)燒錄在硬件里的特性給了很多人一個(gè)直觀想象既然網(wǎng)卡是從生產(chǎn)線上一個(gè)個(gè)做出來(lái)的MAC地址為什么不像產(chǎn)品序列號(hào)那樣按1、2、3、4順序往下排而是全世界東一個(gè)西一個(gè)要回答這個(gè)問(wèn)題得先明確一件事在計(jì)算機(jī)領(lǐng)域物理地址這個(gè)詞還有另一個(gè)含義——操作系統(tǒng)內(nèi)存管理里的Physical Address物理地址簡(jiǎn)稱PA那是CPU訪問(wèn)內(nèi)存時(shí)用的地址跟網(wǎng)卡的MAC是兩個(gè)體系。日常討論家庭網(wǎng)絡(luò)、路由器、抓包時(shí)提到物理地址九成九都是在說(shuō)MAC。這篇筆記里說(shuō)的也是MAC。1.2 拆開(kāi)看一個(gè)MAC六組十六進(jìn)制里藏著身份先把MAC地址的格式講清楚。常見(jiàn)的MAC是48位的也就是6個(gè)字節(jié)用十六進(jìn)制表示成6組每組兩位中間用冒號(hào)或短橫線隔開(kāi)。比如4C:EA:C3:17:2F:9A共12個(gè)十六進(jìn)制字符。前6個(gè)字符3個(gè)字節(jié)也就是這里的4C:EA:C3叫OUI全稱Organizationally Unique Identifier翻譯過(guò)來(lái)是組織唯一標(biāo)識(shí)符。它由電氣和電子工程師協(xié)會(huì)IEEE分配給各個(gè)硬件廠商相當(dāng)于一個(gè)廠家的身份證號(hào)段。后面的17:2F:9A是擴(kuò)展標(biāo)識(shí)符由廠商自己在內(nèi)部編號(hào)用來(lái)區(qū)分同一廠商生產(chǎn)的不同網(wǎng)卡。所以一個(gè)MAC地址本質(zhì)上可以拆成兩段看MAC段位長(zhǎng)度含義誰(shuí)分配前3字節(jié)OUI24位廠商身份標(biāo)識(shí)IEEE按廠商分配后3字節(jié)24位廠商內(nèi)部產(chǎn)品編號(hào)廠商自行處理再深挖一層第一個(gè)字節(jié)里還藏著兩個(gè)標(biāo)志位。以4C為例4C轉(zhuǎn)成二進(jìn)制是01001100從右往左數(shù)最低位bit0是單播/組播標(biāo)志0代表單播1代表組播倒數(shù)第二位bit1是全球/本地管理標(biāo)志0代表全球唯一1代表本地管理地址。這個(gè)細(xì)節(jié)后面講為什么MAC能改時(shí)還會(huì)用到先在這里留個(gè)印象。1.3 連續(xù)這個(gè)疑問(wèn)到底在問(wèn)什么弄明白格式再回頭看物理地址為什么不能連續(xù)這個(gè)問(wèn)題。我發(fā)現(xiàn)很多人產(chǎn)生這個(gè)疑問(wèn)都是因?yàn)橄瓤吹搅薎P地址的連續(xù)再對(duì)比MAC的亂序才產(chǎn)生了認(rèn)知落差。比如你家里路由器是192.168.1.1DHCP一開(kāi)設(shè)備接入后拿到的就是192.168.1.2、192.168.1.3、192.168.1.4……從小到大排得清清楚楚。再看這些設(shè)備對(duì)應(yīng)的MAC完全沒(méi)有規(guī)律。這種落差讓我意識(shí)到問(wèn)題的本質(zhì)不是MAC能不能設(shè)計(jì)成連續(xù)的而是誰(shuí)需要連續(xù)連續(xù)能給誰(shuí)帶來(lái)好處。IP地址的連續(xù)是網(wǎng)絡(luò)規(guī)劃的人為結(jié)果方便路由表聚合。MAC地址的連續(xù)沒(méi)有任何實(shí)際收益反而會(huì)帶來(lái)安全隱患。為了把這件事徹底講透我從MAC的出生流程、二層網(wǎng)絡(luò)的轉(zhuǎn)發(fā)原理、系統(tǒng)隱私策略三個(gè)角度一層層拆開(kāi)看。2. MAC地址的出廠設(shè)定連續(xù)性在源頭就被掐斷了2.1 沒(méi)有全球統(tǒng)一的發(fā)號(hào)機(jī)關(guān)怎么連你可能會(huì)想身份證號(hào)不也是某個(gè)發(fā)號(hào)機(jī)關(guān)統(tǒng)一發(fā)的嗎全國(guó)幾億人也能做到不亂、能區(qū)分地域。為什么全世界幾十億網(wǎng)絡(luò)設(shè)備就不能由一個(gè)全球MAC發(fā)號(hào)中心統(tǒng)一發(fā)號(hào)讓它們連續(xù)下去關(guān)鍵在于身份證號(hào)的連續(xù)性建立在發(fā)號(hào)機(jī)關(guān)在每個(gè)人出生時(shí)才登記這個(gè)前提上。MAC地址不行——網(wǎng)卡是在世界各地?zé)o數(shù)工廠流水線上生產(chǎn)的時(shí)間、地點(diǎn)、品牌完全不同。要讓所有MAC連續(xù)需要滿足兩個(gè)條件第一全世界所有網(wǎng)卡生產(chǎn)商必須在同一套號(hào)段體系里協(xié)作。某廠商今天生產(chǎn)的100萬(wàn)片網(wǎng)卡用了號(hào)段A明天另一個(gè)規(guī)模小得多的廠商也在這個(gè)號(hào)段附近生產(chǎn)兩家必須同步協(xié)調(diào)出廠的先后順序。第二這個(gè)發(fā)號(hào)機(jī)關(guān)必須在每一塊網(wǎng)卡出廠那一瞬間就知道它是全球第幾塊并把對(duì)應(yīng)號(hào)碼寫(xiě)進(jìn)硬件。稍有延遲或偏差后面所有號(hào)都會(huì)錯(cuò)位。現(xiàn)實(shí)是IEEE只負(fù)責(zé)給廠商統(tǒng)一分配前24位的OUI后24位完全放權(quán)給廠商自己處理。全球幾百上千家網(wǎng)卡廠商各自手里握著若干OUI號(hào)段各燒各的號(hào)這就像每個(gè)省份各自發(fā)各自的身份證號(hào)段但省與省之間從不約定號(hào)碼先后順序。跨廠商之間根本不存在建立全局連續(xù)序號(hào)的機(jī)制。2.2 廠商拿到號(hào)段后按批次和產(chǎn)品線亂用就算不考慮全局連續(xù)單看一家廠商內(nèi)部的MAC也很難連起來(lái)。廠商從IEEE手里申請(qǐng)到OUI之后后24位并不是簡(jiǎn)單地從0開(kāi)始數(shù)到1600萬(wàn)。廠商要同時(shí)做有線網(wǎng)卡、無(wú)線網(wǎng)卡、藍(lán)牙模塊、物聯(lián)網(wǎng)芯片不同的產(chǎn)品線、不同的代工廠、不同的出貨批次都在各自的流程里燒錄MAC。同一批燒錄的MAC地址可能一部分裝進(jìn)了某品牌筆記本一部分發(fā)往東南亞的模組廠還有一部分直接嵌進(jìn)智能家居芯片。物理位置上完全天南海北。更現(xiàn)實(shí)的還有代工問(wèn)題。A品牌的網(wǎng)卡可能是B代工廠產(chǎn)線上做的B代工廠同時(shí)也在給C、D品牌代工。代工廠從不同廠商的OUI池里拿號(hào)段燒錄時(shí)按物料批次管理拿到哪段燒哪段。這么一圈下來(lái)OUI相同的前24位對(duì)應(yīng)的后24位完全是離散的。2.3 網(wǎng)卡和電腦不是綁定生產(chǎn)的連續(xù)沒(méi)有載體還有一個(gè)更直白的原因網(wǎng)卡和電腦根本不是一一綁定出廠的。臺(tái)式機(jī)的獨(dú)立網(wǎng)卡是單獨(dú)生產(chǎn)的裝機(jī)的時(shí)候抽哪塊插哪塊。筆記本的板載網(wǎng)卡雖然焊在主板上但主板也不是按全世界第幾臺(tái)筆記本來(lái)生產(chǎn)的。網(wǎng)卡廠商只知道這批貨發(fā)走了不知道它最后會(huì)裝進(jìn)誰(shuí)家的電腦更不知道這臺(tái)電腦在用戶手里會(huì)配什么路由器、連什么網(wǎng)。所以連續(xù)這個(gè)概念根本就沒(méi)有載體。我們之所以覺(jué)得應(yīng)該連續(xù)是因?yàn)闈撘庾R(shí)里把MAC當(dāng)成了一串給電腦編號(hào)的流水號(hào)。但實(shí)際上MAC只是硬件自己在制造時(shí)獲得的一個(gè)身份標(biāo)識(shí)它不登記、不備案、不跟著電腦走。一臺(tái)電腦換塊網(wǎng)卡MAC就變了跟這臺(tái)電腦排行第幾毫無(wú)關(guān)系。3. 二層網(wǎng)絡(luò)靠查表干活連續(xù)對(duì)MAC本來(lái)就沒(méi)什么用3.1 交換機(jī)眼里的MAC端口和地址的一一對(duì)應(yīng)表如果說(shuō)以上是從生產(chǎn)端解釋MAC為什么連續(xù)不了那接下來(lái)從使用端解釋就算能連也沒(méi)必要。交換機(jī)工作在二層它的核心任務(wù)是在局域網(wǎng)內(nèi)轉(zhuǎn)發(fā)數(shù)據(jù)幀。交換機(jī)內(nèi)部維護(hù)一張MAC地址表記錄的是某個(gè)MAC地址對(duì)應(yīng)哪個(gè)端口、屬于哪個(gè)VLAN。當(dāng)一臺(tái)設(shè)備接入交換機(jī)交換機(jī)收到它的第一個(gè)數(shù)據(jù)幀時(shí)會(huì)把源MAC記下來(lái)綁定到對(duì)應(yīng)端口。以后所有發(fā)往這個(gè)MAC的數(shù)據(jù)幀交換機(jī)只需要查這張表從對(duì)應(yīng)端口送出去就行。這里的關(guān)鍵是交換機(jī)查詢MAC地址表用的是精確匹配。也就是說(shuō)給出一串48位的MAC能查到就轉(zhuǎn)發(fā)查不到就泛洪廣播到除了入口外的所有端口。這個(gè)查找過(guò)程不看地址范圍、不做連續(xù)段判斷地址是00:00:00:00:00:01還是00:50:56:C0:00:08對(duì)交換機(jī)來(lái)說(shuō)沒(méi)有任何差別——都是一串需要精確索引的鍵值。有人可能會(huì)問(wèn)路由器查路由表不是可以按前綴匹配嗎比如192.168.1.0/24這樣一個(gè)網(wǎng)段代表從192.168.1.1到192.168.1.254的所有地址沒(méi)錯(cuò)但那是三層的路由聚合用的是IP地址的網(wǎng)絡(luò)前綴。二層交換機(jī)面對(duì)的是MAC地址它沒(méi)有任何網(wǎng)段前綴的概念。既然轉(zhuǎn)發(fā)不靠范圍MAC連續(xù)不連續(xù)就毫無(wú)意義。3.2 IP能連續(xù)是因?yàn)槁酚尚枰酆犀F(xiàn)在反過(guò)來(lái)看IP地址為什么會(huì)被設(shè)計(jì)成看起來(lái)連續(xù)。IPv4地址由網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)兩部分組成路由器在轉(zhuǎn)發(fā)時(shí)記住的是網(wǎng)段而不是每一臺(tái)設(shè)備。一個(gè)數(shù)據(jù)包要發(fā)往192.168.1.57路由器看到目的地屬于192.168.1.0/24這個(gè)網(wǎng)段直接查一條下一跳記錄就完事了。如果IP地址不連續(xù)、東一個(gè)西一個(gè)路由器就沒(méi)法做前綴聚合只能給每臺(tái)設(shè)備分別記一條路由。那全球幾百億終端設(shè)備每條路由都單獨(dú)記賬路由器內(nèi)存再大也不夠用。所以IP的連續(xù)本質(zhì)上是可聚合、可路由的代價(jià)和好處。你可以這樣體會(huì)IP地址的連續(xù)是一種邏輯規(guī)劃它建立在網(wǎng)絡(luò)按拓?fù)浞謱拥幕A(chǔ)上。一個(gè)家庭局域網(wǎng)用192.168.1.0/24另一個(gè)辦公室用10.10.0.0/16規(guī)劃者可以自由決定哪段網(wǎng)給哪片區(qū)域再由DHCP或者人工配置實(shí)現(xiàn)地址的有序發(fā)放。這種連續(xù)是可以事后調(diào)整、可以做聚合的。MAC地址則完全相反。它跟網(wǎng)絡(luò)拓?fù)錄](méi)有任何關(guān)系路由器不會(huì)因?yàn)檫@兩臺(tái)設(shè)備MAC挨得近就讓它們走同一條路。既然路由和轉(zhuǎn)發(fā)邏輯都不需要連續(xù)的MAC段那MAC就沒(méi)有任何理由追求連續(xù)。3.3 平面地址和層次地址兩種截然不同的設(shè)計(jì)哲學(xué)往深了說(shuō)這其實(shí)是兩種地址設(shè)計(jì)哲學(xué)的對(duì)立層次地址和平面地址。IP地址是層次地址結(jié)構(gòu)是網(wǎng)絡(luò)號(hào)主機(jī)號(hào)。它描述的是這臺(tái)設(shè)備在網(wǎng)絡(luò)拓?fù)渲械奈恢盟孕枰凑站W(wǎng)絡(luò)結(jié)構(gòu)來(lái)規(guī)劃分配分配得越有層次路由器表項(xiàng)越精簡(jiǎn)。城市里的門牌號(hào)也是這個(gè)邏輯先說(shuō)明哪條街再說(shuō)明幾號(hào)找起來(lái)快。MAC地址是平面地址結(jié)構(gòu)是廠商號(hào)產(chǎn)品號(hào)。它描述的是這塊硬件是誰(shuí)做的不關(guān)心這個(gè)設(shè)備在哪里、屬于哪個(gè)網(wǎng)絡(luò)。就像人的指紋指紋能唯一確認(rèn)一個(gè)人但指紋上沒(méi)有任何信息能告訴你這個(gè)人住在哪個(gè)城市。同理MAC能唯一標(biāo)識(shí)一臺(tái)設(shè)備的網(wǎng)卡但它本身不代表任何網(wǎng)絡(luò)位置信息。平面地址和層次地址沒(méi)有誰(shuí)優(yōu)誰(shuí)劣。MAC的平面特性讓它在二層轉(zhuǎn)發(fā)時(shí)無(wú)需任何網(wǎng)絡(luò)規(guī)劃就能工作——插上電、連上線交換機(jī)自動(dòng)學(xué)習(xí)數(shù)據(jù)就通了。為了連續(xù)而給MAC引入層次結(jié)構(gòu)反而會(huì)讓它失去這種即插即用的靈活性。所以從設(shè)計(jì)角度來(lái)說(shuō)MAC不連續(xù)不僅不是缺陷反而是它最大的優(yōu)點(diǎn)。4. 現(xiàn)實(shí)中MAC又像流水號(hào)又亂序還不止是出廠一個(gè)原因4.1 同品牌扎堆號(hào)段但后24位互相不認(rèn)識(shí)你在局域網(wǎng)里觀察一圈其實(shí)會(huì)發(fā)現(xiàn)MAC地址并不是完全亂它有自己的一套局部規(guī)律同品牌的設(shè)備前24位往往一致不同品牌的設(shè)備前24位截然不同。這個(gè)規(guī)律在路由器管理界面里非常明顯。比如家里有一臺(tái)某品牌手機(jī)、一臺(tái)該公司的手環(huán)兩臺(tái)設(shè)備的前6位十六進(jìn)制字符可能完全相同后面那6位則是八竿子打不著——一個(gè)像A3:F2:11另一個(gè)像08:77:66。這是因?yàn)槭謾C(jī)和手環(huán)雖然都是同一家公司生產(chǎn)但屬于不同的產(chǎn)品線后24位的擴(kuò)展標(biāo)識(shí)符按不同產(chǎn)品序列燒錄互不關(guān)聯(lián)。這種前段有規(guī)律、后段無(wú)規(guī)律的結(jié)構(gòu)給了很多人一種好像有點(diǎn)連續(xù)又怎么也連不上的錯(cuò)覺(jué)。如果你去查一下OUI數(shù)據(jù)庫(kù)IEEE官網(wǎng)和各廠商的OUI查詢工具都能查會(huì)發(fā)現(xiàn)一屋子的網(wǎng)絡(luò)設(shè)備來(lái)自幾十個(gè)不同的OUI號(hào)段有的號(hào)段代表無(wú)線路由器廠商有的號(hào)段代表網(wǎng)卡芯片廠商有的號(hào)段是某些物聯(lián)網(wǎng)方案商獨(dú)占的。整個(gè)局域網(wǎng)里的MAC地址就像幾十個(gè)廠商各自保留的私密檔案在開(kāi)會(huì)誰(shuí)也接不上誰(shuí)的號(hào)。4.2 系統(tǒng)自帶的隨機(jī)MAC親手打碎了連續(xù)感除了出廠的號(hào)段分散近幾年還有一個(gè)重要的推手讓MAC地址看起來(lái)更加不連續(xù)隱私保護(hù)下的MAC隨機(jī)化。過(guò)去智能手機(jī)連接Wi-Fi時(shí)用的是網(wǎng)卡硬件里那個(gè)真實(shí)的MAC也就是全球唯一物理地址。這就帶來(lái)一個(gè)隱私問(wèn)題——你走到商場(chǎng)的任何一個(gè)角落商場(chǎng)Wi-Fi探針都能通過(guò)唯一的MAC識(shí)別出是你這個(gè)特定的人。為了解決這個(gè)問(wèn)題2017年之后主流操作系統(tǒng)陸續(xù)默認(rèn)開(kāi)啟了隨機(jī)MAC功能。操作系統(tǒng)機(jī)制效果Android 10及以上默認(rèn)對(duì)每個(gè)新連接的Wi-Fi隨機(jī)生成一個(gè)MAC同一手機(jī)連不同Wi-Fi顯示不同MACiOS 14及以上私有無(wú)線局域網(wǎng)地址默認(rèn)開(kāi)啟同一手機(jī)在不同AP顯示不同MACWindows 10/11可在Wi-Fi屬性中開(kāi)啟隨機(jī)硬件地址每次連接可隨機(jī)或按網(wǎng)絡(luò)固定隨機(jī)這個(gè)隨機(jī)MAC是怎么生成的不同系統(tǒng)策略不一樣有的保持OUI不變、只隨機(jī)后面24位有的連OUI也一起偽造。但不管哪種策略結(jié)果都是同一個(gè)設(shè)備的MAC今天可能是A4:5D:36:xx:xx:xx明天換一個(gè)網(wǎng)絡(luò)就變成12:34:56:xx:xx:xx了。從連續(xù)的角度看這無(wú)疑是釜底抽薪。本來(lái)廠商出廠時(shí)的MAC就夠亂了現(xiàn)在系統(tǒng)還在網(wǎng)絡(luò)層上面疊加一層隨機(jī)化把本來(lái)就不存在的連續(xù)感進(jìn)一步打碎?,F(xiàn)在你去路由器后臺(tái)看設(shè)備列表那一堆MAC地址的來(lái)源可能包括真實(shí)物理MAC、系統(tǒng)隨機(jī)生成的MAC、廠商出廠前測(cè)試用的遺留號(hào)碼。你看到的亂是多方因素疊加的結(jié)果。4.3 廠商故意不連續(xù)燒錄防的是克隆和預(yù)測(cè)還有一個(gè)很多人不知道的原因廠商是故意不讓MAC有規(guī)律的。早些年有些網(wǎng)卡廠商圖省事后24位直接按生產(chǎn)順序遞增燒錄。結(jié)果發(fā)現(xiàn)這樣燒出來(lái)的MAC太容易被預(yù)測(cè)了。攻擊者只要拿到一塊同品牌網(wǎng)卡的MAC順著號(hào)段往后猜就能推測(cè)出同一批次其他網(wǎng)卡的MAC。在某些需要MAC白名單鑒權(quán)的網(wǎng)絡(luò)里這種可預(yù)測(cè)性等于給攻擊者發(fā)了一張通行證——猜出MAC就能偽造。所以現(xiàn)在稍微講究一點(diǎn)的廠商燒錄MAC時(shí)都有意打亂順序再輔以隨機(jī)化手段讓后24位看不出生成規(guī)律。有些無(wú)線模塊甚至直接用硬件隨機(jī)數(shù)生成器來(lái)產(chǎn)生擴(kuò)展標(biāo)識(shí)符讓每一塊網(wǎng)卡的MAC在出廠那一刻都是天注定而不是順序排的。這里就形成了一個(gè)很有意思的結(jié)論如果要求MAC連續(xù)等于要求它可預(yù)測(cè)要求它可預(yù)測(cè)就等于給偽造MAC開(kāi)了一扇大門。所以不只是沒(méi)必要連續(xù)而是為了安全必須不連續(xù)。5. 既然出廠固定改物理地址又是怎么實(shí)現(xiàn)的5.1 MAC能改的底層原因本地管理地址的覆蓋機(jī)制講到這很多人自然會(huì)聯(lián)想到那個(gè)網(wǎng)絡(luò)熱詞——電腦改物理地址。不是說(shuō)MAC是燒死在硬件里的嗎為什么還能改這個(gè)問(wèn)題的答案藏在前面提到的那個(gè)標(biāo)志位里。MAC地址第一個(gè)字節(jié)的bit1叫本地管理位Locally Administered Address簡(jiǎn)稱LAA。當(dāng)這個(gè)位為0表示這個(gè)MAC是全球統(tǒng)一管理的也就是廠商燒錄的全球唯一UAA當(dāng)這個(gè)位為1表示這是一個(gè)本地管理地址由軟件臨時(shí)指定的不保證全球唯一。操作系統(tǒng)和網(wǎng)卡驅(qū)動(dòng)提供了這樣一個(gè)覆蓋機(jī)制網(wǎng)卡硬件里確實(shí)燒錄了一個(gè)出廠MAC但在初始化時(shí)驅(qū)動(dòng)允許協(xié)議棧指定一個(gè)用戶自定義MAC來(lái)替代硬件里的原始值。只要這個(gè)替代值滿足48位格式、且本地管理位被置1網(wǎng)卡就會(huì)以這個(gè)自定義MAC工作。所以改物理地址并不是真的改寫(xiě)芯片里的原始數(shù)據(jù)而是軟件在驅(qū)動(dòng)層面戴了一張面具。這在技術(shù)上是很常規(guī)的操作廠商自己也在用——很多路由器、軟路由的克隆MAC功能原理就是這個(gè)。5.2 三個(gè)系統(tǒng)里改物理地址的實(shí)操路徑各操作系統(tǒng)都提供了改MAC的入口挑最常見(jiàn)的三個(gè)平臺(tái)說(shuō)一下Windows系統(tǒng)最簡(jiǎn)單。打開(kāi)設(shè)備管理器找到網(wǎng)絡(luò)適配器右鍵網(wǎng)卡選屬性切到高級(jí)選項(xiàng)卡在屬性列表里找到網(wǎng)絡(luò)地址或者Network Address、有的顯示Locally Administered Address。把右側(cè)的值改成不存在或空白之外的任意12位十六進(jìn)制數(shù)比如001122334455確定后禁用再啟用網(wǎng)卡或者重啟一下ipconfig /all里就能看到新地址了。macOS稍微繞一點(diǎn)需要在終端里操作。先執(zhí)行ifconfig en0 | grep ether看一眼現(xiàn)有MAC然后執(zhí)行sudo ifconfig en0 ether aa:bb:cc:dd:ee:ff改完把Wi-Fi關(guān)了重開(kāi)或重啟網(wǎng)卡即可。Linux用ip命令就能搞定。先ip link show找到網(wǎng)卡名再執(zhí)行sudo ip link set dev eth0 address aa:bb:cc:dd:ee:ff注意改完要把網(wǎng)卡重新加載一下通常執(zhí)行sudo ip link set dev eth0 down和up各一遍就生效。這三種路徑有個(gè)共同的要點(diǎn)你填寫(xiě)的地址必須以偶數(shù)開(kāi)頭也就是說(shuō)第一個(gè)字節(jié)的bit0要置0表示單播地址否則網(wǎng)卡可能不認(rèn)。很多教程沒(méi)說(shuō)這一點(diǎn)實(shí)際改的時(shí)候容易踩坑。5.3 改MAC的典型場(chǎng)景與合規(guī)邊界改MAC最典型的場(chǎng)景是這幾個(gè)換了新路由器原來(lái)網(wǎng)關(guān)綁定了舊網(wǎng)卡的MAC做白名單過(guò)濾不想改路由器配置就直接把新網(wǎng)卡的MAC臨時(shí)改成舊的一些軟件的授權(quán)和設(shè)備型號(hào)綁定在一起換網(wǎng)卡后授權(quán)失效臨時(shí)改MAC能解決激活問(wèn)題還有些人做網(wǎng)絡(luò)調(diào)試需要讓測(cè)試設(shè)備看起來(lái)像另一個(gè)設(shè)備通過(guò)改MAC來(lái)模擬端到端行為。改動(dòng)物理地址是一項(xiàng)中性且常見(jiàn)的技術(shù)能力。不過(guò)這里必須提醒一句修改MAC的技術(shù)本身沒(méi)問(wèn)題但使用場(chǎng)景要有邊界。如果是你自己管理的設(shè)備、自己的網(wǎng)絡(luò)改MAC解決兼容性或調(diào)試問(wèn)題完全合理合法。但不要拿它去繞過(guò)別人網(wǎng)絡(luò)的訪問(wèn)控制更不要用于偽造身份、惡意偽裝這類行為違反網(wǎng)絡(luò)安全相關(guān)規(guī)定。我個(gè)人的建議是改MAC只用來(lái)解決自己可控環(huán)境里的問(wèn)題別把思路往鉆空子上引。還有一個(gè)衍生的實(shí)用技巧既然本地管理位是判斷這個(gè)MAC是不是被改過(guò)的關(guān)鍵你只需要看MAC的第一個(gè)字節(jié)。如果這個(gè)字節(jié)化成二進(jìn)制后bit1為1基本可以判定這不是原生全球唯一地址而是軟件覆蓋出來(lái)的。這個(gè)判斷在排查網(wǎng)絡(luò)安全問(wèn)題時(shí)很好用——某臺(tái)設(shè)備顯示了一串很可疑的MAC先看它是否以02、06、0A、0E這類偶數(shù)開(kāi)頭的本地管理地址如果是那它的真實(shí)身份就值得進(jìn)一步確認(rèn)。搞清楚這幾個(gè)層次之后我自己對(duì)物理地址為什么不能連續(xù)這件事總算放下了。它燒錄在芯片里卻沒(méi)有全局發(fā)號(hào)機(jī)關(guān)按順序發(fā)號(hào)它工作在二層網(wǎng)絡(luò)上轉(zhuǎn)發(fā)時(shí)精確定位、不需要地址段聚合它還要面對(duì)隱私隨機(jī)化、防克隆這樣的現(xiàn)實(shí)壓力。綜合來(lái)看MAC地址的意義從來(lái)就不是連續(xù)而是唯一、獨(dú)立、不可預(yù)測(cè)。下次再看到路由器后臺(tái)那堆亂糟糟的MAC你知道該怎么跟別人解釋它們?yōu)槭裁撮L(zhǎng)這樣了。