您好,登錄后才能下訂單哦!
怎么在linux中修改網卡MAC地址?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
查看網卡MAC地址
使用ip命令就能查看MAC地址了:
ip link show ${interface}
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether f0:de:f1:ad:1d:f0 brd ff:ff:ff:ff:ff:ff
其中 link/ether 后面那一串用 : 分割的6字節十六進制數就是網卡的MAC地址了,也就是 f0:de:f1:ad:1d:f0
手工修改MAC地址
使用ip命令也能修改MAC地址,但是需要root權限:
1、禁用網卡
sudo ip link set dev ${interface} down
2、修改MAC地址
有的網絡運營商可能會拒絕為不正確的 MAC 分配 IP 地址,因此推薦前三個字節用真實的MAC地址前綴,后三個字節可以隨機更改。
sudo ip link set dev ${interface} address ${new_mac}
我們再查看一下網卡的MAC地址
ip link show ${interface}
2: enp0s25: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether f0:de:f1:ff:ff:ff brd ff:ff:ff:ff:ff:ff
你會發現網卡已經被改成新的MAC地址了.
3、最后重啟網卡
sudo ip link set dev ${interface} up
自動更改
systemd-networkd服務能通過 link 文件(底層物理網絡設備配置)來設置MAC地址
我們通過 [Match] 小節來匹配某個網卡,然后通過 [Link] 小節來對網卡進行配置
Match小節
如果 “[Match]” 小節中的每一項都與某個網卡匹配, 那么視為該Link文件與該網卡匹配。若 “[Match]” 小節為空則表示匹配任意網卡。
所有可用于匹配的選項如下:
MACAddress
匹配網卡的物理地址(MAC地址)
OriginalName
匹配網卡的”INTERFACE”屬性值(網卡的內核名稱)。 接收一個空格分隔的匹配模式列表(使用shell風格的通配符)。 不可用于匹配已經被用戶空間改了名字的網卡。 應該小心使用此選項, 因為網卡的內核名稱有可能是不穩定的。
Path
匹配網卡的 “ID_PATH” 屬性值(網卡的總線路徑)。 接收一個空格分隔的匹配模式列表(使用shell風格的通配符)。
Driver
匹配網卡的 “DRIVER” 屬性值(網卡的驅動名稱)。 接收一個空格分隔的匹配模式列表(使用shell風格的通配符)。 注意,如果網卡的 “DRIVER” 屬性不存在, 那么將使用 “ethtool -i” 命令中輸出的驅動名稱。
Type
匹配網卡的 “DEVTYPE” 屬性值(網卡的設備類型)。 接收一個空格分隔的匹配模式列表(使用shell風格的通配符)。
Host
匹配主機的 hostname 或”machine ID”,參見 systemd.unit(5) 中的 “ConditionHost=” 選項。
Virtualization
檢查是否運行于特定的虛擬環境中, 參見 systemd.unit(5) 中的 “ConditionVirtualization=” 選項。
KernelCommandLine
檢查是否設置了(或者以”!”開頭表示未設置)特定的內核引導選項, 參見 systemd.unit(5) 中的 “ConditionKernelCommandLine=” 選項。
Architecture
檢查是否運行于特定的硬件平臺, 參見 systemd.unit(5) 中的 “ConditionArchitecture=” 選項。
Link小節
Link小節可以對網卡進行多種配置,其中與修改MAC有關的選項有:
MACAddressPolicy
應該如何設置網卡的MAC地址:
“persistent”
如果內核使用了網卡硬件固有的MAC地址(絕大多數網卡都有), 那么啥也不做,直接使用內核的MAC地址。 否則,將會隨機新生成一個 確保在多次啟動之間保持固定不變的MAC地址(針對給定的主板與網卡)。 自動生成MAC地址的特性 要求網卡必須存在 ID_NET_NAME_* 屬性, 否則無法自動生成MAC地址。
“random”
如果內核使用了隨機生成的MAC地址(而不是網卡硬件固有的MAC地址), 那么啥也不做,直接使用內核的MAC地址。 否則,將在網卡每次出現的時候(一般在啟動過程中)隨機新生成一個MAC地址。 無論使用上述哪種方式生成的MAC地址, 都將設置 “unicast” 與 “locally administered” 位。
“none”
無條件的直接使用內核的MAC地址。
MACAddress
在未設置 “MACAddressPolicy=” 時所使用MAC地址。
另外,Link小節中,我們必須為某個網卡進行命名,因此肯定會有 NamePolicy 或者 Name 選項
NamePolicy
應該如何設置網卡的名稱, 僅在未使用 “net.ifnames=0″ 內核引導選項時有意義。 接受一個空格分隔的策略列表, 順序嘗試每個策略,并以第一個成功的策略為準。 所得的名字將被用于設置網卡的 “ID_NET_NAME” 屬性。 注意,默認的udev規則會用 “ID_NET_NAME” 的值設置 “NAME” 屬性(也就是網卡的名稱)。 如果網卡已經被空戶空間命名,那么將不會進行任何重命名操作。 可用的策略如下:
“kernel”
如果內核已經為此網卡設置了固定的可預測名稱, 那么不進行任何重命名操作。
“database”
基于網卡的 “ID_NET_NAME_FROM_DATABASE” 屬性值(來自于udev硬件數據庫)設置網卡的名稱。
“onboard”
基于網卡的 “ID_NET_NAME_ONBOARD” 屬性值(來自于板載網卡固件)設置網卡的名稱。
“slot”
基于網卡的 “ID_NET_NAME_SLOT” 屬性值(來自于可插拔網卡固件)設置網卡的名稱。
“path”
基于網卡的 “ID_NET_NAME_PATH” 屬性值(來自于網卡的總線位置)設置網卡的名稱。
“mac”
基于網卡的 “ID_NET_NAME_MAC” 屬性值(來自于網卡的固定MAC地址)設置網卡的名稱。
Name
在 NamePolicy= 無效時應該使用的網卡名稱。 無效的情況包括: (1)未設置 NamePolicy= ; (2)NamePolicy= 中的策略全失敗; (3)使用了”net.ifnames=0″內核引導選項
注意, 千萬不要設置可能被內核用于其他網口的名稱(例如 “eth0″), 這可能會導致 udev 在分配名稱時與內核產生競爭, 從而導致不可預期的后果。 最好的做法是使用一些永遠不會導致沖突名稱或前綴,例如: “internal0″”external0″ 或 “lan0″”lan1″/”lan3″
Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。
看完上述內容,你們掌握怎么在linux中修改網卡MAC地址的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。