2020年9月3日 星期四

(幾乎不談指令) 概念性的 netplan 簡介

netplan 指定到底要用 NetworkManager 還是要用 networkd 來實作網路連線 Ubuntu 18.04 (還是更早?) 棄 /etc/network/interfaces 改用 netplan 以來, 我一直不敢面對, 一直還是堅持用 懷舊網路設定。 最近 移民 mint 20 ulyana, 總算搞懂 netplan: 它只是一個最高階層、 負責出一張嘴的空殼, 在它的設定檔 /etc/netplan/*.yaml 裡面有一句最重要的 renderer, 由這句話指定到底要用 NetworkManager 還是要用 networkd 來實作網路連線 -- 它們才是真正做苦工的程式。 有點像是董事長 (呃,我剛剛說了什麼~) 決定要請哪一位來當總經理/執行長: 沒有太多選擇, 大概就只有這兩位, 而且最好不要請兩位同時上任。 爬文時, 有人也人把這兩個選擇稱為不同的 backends。 很棒的 stackexchange 問答

[總經理 A] 一般預設採用 NetworkManager 當作 renderer/backend -- 尤其推薦給筆電用戶, 因為用它來管理來來去去的無線網路比較方便。 不論是哪一個桌面環境, 通常在視窗 (右下角?) 的狀態列當中都會有一個網路連線圖示, 點下去就可以叫出圖形介面、 操作後台 (開機時會自動啟動) 的 NetworkManager、 決定要連到哪一個無線 (或有線) 網路。 本著 不怕死 不怕網路斷線的精神, 請 ps ax | grep NetworkManager, 找出它的 pid 並把它 kill 掉。 接下來再按狀態列的網路連線圖示, 就會看到 "NetworkManager is not running" 之類的圖示。 再用 sudo NetworkManager 重新啟動, 圖形介面又可以使用。 選用 NetworkManager 作為 renderer/backend 的意思基本就是: 「我只想操作圖形介面, 不想改設定檔」。 此時如果一定要改設定檔, 請參考 這篇。 萬一需要除錯, 根據 官網 Troubleshooting 文件, netplan 會依據 /etc/netplan/*.yaml 幫 NetworkManager 在 /run/NetworkManager/ 底下產生一堆設定檔, 可以從這裡著手。

[總經理 B] 如果需要較多奇怪的手動設定, 例如在多張對外網卡的伺服器上, 或是想要在桌機上跑 kvm 並且把虛擬機拉出來跟 host 放在同一個區網 (所以需要建立 bridge) ... 而且如果你比較習慣修改文字設定檔, 那麼爬到的文章多半會建議選用 networkd 當作 renderer/backend。 事實上可能也不太需要爬文。 官網的範例集錦頁面 提供很多常見狀況的範例設定檔。 例如我想把虛擬機拉出來跟 host 放在同一個區網, 就在該頁找到 bridge 範例, 小改一下就成功了。 如果需要除錯, 一樣讀官網 Troubleshooting 文件, 並檢查那些從 /etc/netplan/*.yaml 所產生出來的 /run/systemd/network/× 設定檔是否正確。

到這裡就很容易理解: 我的 ulyana live CD 採用 networkd, 所以狀態列的網路連線圖示顯示沒有網路連線, 但其實網路還是通的。 就算把 NetworkManager 那個 process 砍掉也沒差。 但如果拿我的 live CD 到筆電上使用而且想要用 wifi 連線, 那麼最簡單的連線上網方式是: 到 /etc/netplan 底下, 把原本的 *.yaml 改名為 *.txt 之類的 (總之副檔名不要是 .yaml 就對了) 讓它失效, 再用 grep NetworkManager * 找出 「採用 NetworkManager 作為 renderer」 的那一個範例設定檔 (當初我沒搞懂, 所以檔名取得怪怪的 orz) 並且把這個檔案改名為 *.yaml 讓它生效, 最後下 netplan apply 叫它重讀設定檔, 之後即可使用圖形介面連線。

寫到一半時才發現 官網首頁 的簡介根本就超級清楚, 比許多教學文更簡單明瞭, 趕快順便把他們的圖偷來用。

現在再去讀一般的下指令教學文, 是不是清楚多了呢? 中文: 1234、 ... 原來還有 netplan try 「不成功就限時還原」 這招, 對於修改遠端伺服器網路設定超好用!

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。