Debian 9 更改網路介面預設命名方式

https://szlin.me/2017/07/19/debian-9-release/

2017 年 07 月 19 szlin

Debian 9 開始, 網路介面命名方式開始有所差異.

以往有線網路介面使用 eth0, eth1 等等的命名, 但這樣的機制容易因為 driver 初始化順序不同而導致介面順序不固定, 進而造成使用上的問題. (例: 防火牆設定, 或者其他與介面名稱緊密相關的應用等等) 這問題尤其在嵌入式相關領域非常容易碰到.

systemd v197 開始, 引入Predictable Network Interface Names [2] 的設計. 其範圍包含有線, 無線等等的網路介面 (local Ethernet, WLAN and WWAN) 並在 systemd v220 成預設選項

而 Debian 9 使用 systemd v232, 所以想當然爾, 預設使用 Predictable Network Interface Names (Debian 8 使用 systemd v215)


Predictable Network Interface Names  命名規則如下 [5]:

2017-07-19_145620.png

由上圖可知, 可分成下面五種命名方式

  1. 以 Firmware/ BIOS 提供的 index 編號來對 on-board devices 命名
    • eno1
  2. 以 Firmware/ BIOS 提供的PCIe 熱插拔 index 編號來命名
    • ens1
  3. 以硬體連接器實體位置來命名
    • enp2s0
  4. 以介面的 MAC 位址來命名
    • enx78e7d1ea46da
  5. 以傳統方法來命名
    • eth0
如何調整介面預設命名方式

如果想要調整 kernel/bios/path/MAC 預設命名方式, 可透過編輯 /etc/systemd/network/*.link  使用 NamePolicy 選項來進行命名調整 (預設則是會執行 /lib/systemd/network/99-default.link) 其他詳細用法可 man systemd.link

2017-07-19_225004.png


使用 Predictable Network Interface Names 的優缺點 [2]
優點
缺點
  1. 介面名稱統一, 不因下列因素而有所異動
    • 重開機
    • 新增移除硬體元件
    • 修改/ 更新kernels/ 驅動程式
    • 更換新的乙太網路卡片
  2. 介面名稱不需要使用者設定即可使用
  3. 事先可預知介面名稱
  4. 可相容於唯讀系統
  5. 可跨平台
  6. 可跨 Linux 發行版套件 (前提是要使用 udev + systemd v197之後的版本)
  1. 需要對以往網路介面相關程式進行修改移植的動作
  2. 操作上會帶來些許不便, 尤其是在只有一個網路介面的機器上. 以往只要操作 eth0 即可

向前相容 – 如何將新的網路介面架構導入到既有平台上
  1. 檢查 /etc/udev/rules.d/70-persistent-net.rules 中列出的網路介面
  2. 透過下列指令, 查找上個動作所列出的網路介面所相關的設定檔 (以 eth0 為例)
    • grep -r eth0 /etc
  3. 接著將設定檔內容替換成新的網路介面名稱
  4. 移除或重新命名 /etc/udev/rules.d/70-persistent-net.rules 檔案成 /etc/udev/rules.d/70-persistent-net.rules.old 
  5. 重啟系統,  查看並測試更新後的相關功能是否能正常運行

如何關閉 Predictable Network Interface Names

如果真的對新的命名方式很不習慣, 可透過下列兩種方法關閉 Predictable Network Interface Names  功能

  1. 使用以前的命名方式 (ex: eth0)
    • 在 kernel command line 中加入 net.ifnames=0 的參數
  2. 使用自訂的命名方式 (ex: eth-dmz)
    • 可透過編輯 udev rules 來自定介面名稱, 以下圖為例2017-07-18_172649.png
      詳情可 man udev(7). 這邊要注意的是, udev rules 檔案編號需要大於 75 (75-net-description.rules), 小於 80 (80-net-setup-link.rules).

       

      note: 此方法需要考量下列議題

      1. 根目錄必須為可寫狀態

      2. 若做成 image 進行大量佈署時會造成問題

      3. user space 和 kernel space 同時配置同一介面名稱

    • 也可透過編輯 /etc/systemd/network/*.link file,  以下圖為例2017-07-19_223424.png
      代表將路徑 pci-0000:00:1a.0-* 的介面命名為 internet0 並存檔成 /etc/systemd/network/10-internet.link 即可生效. 其他詳細用法可 man systemd.link

心得

根據韌體, 拓樸以及位置資訊來命名介面, 除了能讓介面命名自動化, 名字可預測, 也可讓系統不因硬體更換或者其他因素而影響介面名稱. 但對舊程式的相容性以及開發人員的習慣是另一個需要考量的地方.


其他方法

另外Dell 則提出 biosdevname 的解決方案 [3] biosdevname 使用來自系统 BIOS 的資訊, 詳細對應如下表

2017-07-18_195011.png

img src: [4]


ref:

[1] https://packages.debian.org/jessie/systemd
[2] https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

[3] https://linux.dell.com/files/whitepapers/consistent_network_device_naming_in_linux.pdf

[4] https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Consistent_Network_Device_Naming_Using_biosdevname.html

[5] https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20

Read more

How to document Home Lab and Network

運維機房和跨域的網路,會遇到各式需求與問題,用對工具才能分析問題,個人覺得最重要的是使用能處理問題的工具。 推薦目前想學和正在使用的平台與軟體,協助將公司/家用機房文件化 佈告欄任務管理 Focalboard 白板可管理任務指派 網路架構文件編寫 netbox 精細管理網路設備與連接線路 IP 資源管理 phpipam 專注網路IP分配 邏輯塊文件編寫 draw.io 視覺化概念圖 機房設備管理 ITDB 管理設備生命週期與使用者

By Phillips Hsieh

如何在Raspberry Pi4上安裝Proxmox for ARM64

第一步 準備好Raspberry Pi 4 / CM4 4GB RAM,這裡要留意CM4如果是買有內建eMMC storage會限制不能使用SD卡開機而限制本地空間容量,如果沒有NAS外接空間或使用USB開機的話,建議買CM4 Lite插上大容量SD卡 第二步 去Armbian官網下載最小化Debian bookworm image https://www.armbian.com/rpi4b/ Armbian 25.2.2 Bookworm Minimal / IOT 然後寫入SD/USB開機碟,寫入方法參考官方文件 https://github.com/raspberrypi/usbboot/blob/master/Readme.md Note: 官方提供的預先設定系統方法,可以在Armbian初次啟動自動化完成系統設定。連結在此 https://docs.armbian.com/User-Guide_Autoconfig/

By Phillips Hsieh

世界越快心越慢

在晚飯後的休息時間,我特別享受在客廳瀏灠youtube上各樣各式創作者的影音作品。很大不同於傳統媒體,節目多是針對大多數族群喜好挑選的,在youtube上我會依心情看無腦的動畫、一些旅拍記錄、新聞時事談論。 尤其在看了大量的Youtube的分享後,我真的感受到會限制我的是我的無知,特別是那些我想都沒想過的實際應用,在學習後大大幫助到我的生活和工作層面。 休息在家時,我喜歡想一些沒做過的菜,動手去設計生活和工作上的解決方案,自己是真的很難閒著沒事做。 如創作文章,陪養新的習慣都能感覺到成長的喜悅,是不同於吃喝玩樂的快樂的。 創作不去限制固定的形式,文字是創作、影像聲音也是創作,記錄生活也是創作,我想留下的就是創造—》實現—》回憶,這樣子的循環過程,在留下的足跡面看到自己一路上的成長、失敗、絕望、重新再來。 雖然大部份的時候去做這些創作也不明白有什麼特別的意義,但不去做也不會留下什麼,所以呀不如反事都去試試看,也許能有不一樣的水花也許有意想不到的結果,投資自己永遠不會是失敗的決定,不是嗎?先問問自己再開始計畫下一步,未來沒人說得準。 像最近看youtube仍大一群人在為DOS開

By Phillips Hsieh

知識管理的三個步驟:一小時學會把知識運用到生活上

摘錄瓦基「閱讀前哨站」文章作為自己學習知識管理的內容 Part1「篩選資訊」 如何從海量資訊中篩選出啟發性、實用性和相關性的精華,讓你在學習過程中不再迷失方向。 1. 實用性 2. 啟發性 Part2「提高理解」 如何通過譬喻法和應用法,將抽象的知識與日常生活和工作緊密結合,建立更深刻的理解。 1. 應用法 2. 譬喻法 Part3「運用知識」 如何連結既有知識,跟自己感興趣的領域和專案產生關聯,讓你在運用知識的路途上游刃有餘。 1. 跟日常工作專案、人際活動產生連結 # 為什麼要寫日記? * 寫日記是為了忘記,忘卻瑣碎事情,保持專注力 * 寫日記就像在翻譯這個世界,訓練自己的解讀能力 * 不只是透過日記來記錄生活,而是透過日記來發展生活 #如何寫日記? * 不要寫流水帳式的日記,而是寫覆盤式的日記 當我們試著記錄活動和感受之間的關聯,有助於辦認出真正快樂的事 日記的記錄方式要以過程為主,而非結果 * 感恩日記的科學建議,每日感恩的案例

By Phillips Hsieh