iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
自我挑戰組

[機派X] 無人機與樹莓派的相遇 Linux不只是過客系列 第 6

[機派X] Day 6 - Linux 沒網路,我要怎麼發鐵人賽的文章

引言

今天是機派X系列文章的第六天。
昨天介紹了 Linux 的權限管理機制以及一些相關指令,今天要繼續介紹網路相關的指令。

本篇大綱:

  • 引言
  • netplan 簡介
  • Network Manager 簡介
  • Network Manager 安裝與設定
  • ping 工具簡介
  • dig 工具簡介
  • tracepath 工具簡介
  • 關於本文章系列

網路(Internet)的概念無關乎作業系統,不管使用何種作業系統,現代網路的運作都遵循一致的標準,因此本篇不會著墨在網路的基礎概念,而會專注於 Linux 所提供的網路相關工具,其中包含如何讓 Linux 連上網路、常用的網路偵錯工具等。

不同的 Linux 發行版(Distribution)通常配有不同的網路管理工具,本篇將以我們之前在樹莓派上安裝的 Ubuntu Server 20.04 為範例來做介紹。

netplan 簡介

Ubuntu 傳統的網路管理工具有三種:

  1. /etc/network/interfaces
  2. network-manager
  3. systemd-networkd

不過自從 Ubuntu 17.10 後,以上三種工具都將退居幕後,改以 netplan 當作網路的前端設定工具,使用者只需要撰寫少量設定就可以讓 netplan 自動生成後端的網路設定文件,而目前預設的後端網路管理工具是 network-manager。

netplan 的設定採用 yaml 格式撰寫,可以從 Ubuntu 官方網站找到 範本,對於熟悉網路架構的人來說感覺像是「填空題」,只需要把對應的 IP、預設閘道(Gateway)以及 DNS 設定填到對應的欄位即可。

例如,以下是動態 IP 的設定檔內容:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp3s0:
      dhcp4: true

設定編輯完成後,使用以下指令即可讓 netplan 自動產生 Network Manager 的相關設定:

sudo netplan apply

其他詳細資訊請參閱 Ubuntu 官方提供的說明。

Network Manager 簡介

netplan 雖然是 Ubuntu 內建的前端網路管理工具,但我自己還是喜歡直接使用 Network Manager。
Network Manager 主要有兩個指令可以使用 nmtui 與 nmcli。

nmtui 可以提供類 GUI 的設定界面,如下圖所示:
nmtui 執行截圖

nmtui 執行截圖

我想上面兩張截圖已經能夠證明 nmtui 的易用程度,基本上無須記憶任何格式或關鍵字,可以很直覺的操作。

與 nmtui 對比,nmcli 則是提供指令界面,通常可以用在程式撰寫中,例如:使用 nmcli 指令定時檢查某個 Wi-Fi SSID 是否在可連接的範圍中,並適時切換要連接到的網路連線。

下圖是 nmcli 執行的截圖片段。
nmtui 執行截圖

nmtui 與 nmcli 也可以搭配使用,例如先用 nmtui 建立一個複雜的連線設定,之後就可以使用 nmcli 快速控制連線狀態。
關於 nmcli 的操作範例,請容許我在後面的腳本範例再舉例說明。

Network Manager 安裝與設定

由於 Ubuntu Desktop 才是使用 Network Manager 當作後端,而我們使用的 Ubuntu Server 則需要手動安裝 Network Manager。

請執行以下指令來安裝 Network Manager,其中的 apt 是個套件管理軟體,會在之後的文章中詳細介紹。
Network Manager 安裝的過程中會需要網路,因此你可以先用 netplan 設定好網路連線。

sudo apt update
sudo apt install network-manager -y

完成安裝後,就可以嘗試使用 nmcli 與 nmtui 指令了。
例如:

nmcli

樹莓派上內建一個乙太網路接口與無線網路模組。
當執行 nmcli 會顯示僅有部份網路界面(Interface , if)可以使用:
nmtui 執行截圖

從圖中可以觀察到:
wlan0 是指無線網路,目前尚未連接,可以使用 nmcli 或 nmtui 設定要連接到的無線網路。
然而,有線網路 eth0 卻出現未被納管(unmanaged)的狀態,原因是 netplan 還在運作中,所以 Network Manager 才會對其置之不理。

我們可以透過以下步驟讓 Network Manager 取回乙太網路的管理權:

Step1. 禁止 netplan 使用乙太網路

使用以下指令編輯 netplan 的設定文件:

sudo vim /etc/netplan/50-cloud-init.yaml

將圖中關於 eth0 的設定全部刪除。
netplan 設定檔案內容截圖

使用以下指令讓 netplan 的設定檔變更生效。

sudo netplan apply

Step2. 要求 Network Manager 管理乙太網路

請執行以下指令,該指令會在 Network Manager 設定目錄中新增設定檔案。

sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf

接下來讓 Network Manager 重新載入設定。

sudo systemctl reload NetworkManager

Step3. 檢查設定是否生效

請再次執行 nmcli 或 nmtui 並檢查 eth0 界面是否已經納入 Network Manager 的管理。
例如:

nmcli

圖中可以看到 eth0 現在已成功連線,如果你的 eth0 是處於連線中斷(disconnected)狀態,可以使用 nmcli 或 nmtui 設定後即可成功連線。
nmtui 執行截圖

ping 工具簡介

Network Manager 顯示成功連線後,你可能會需要一些工具來測試連線是否正常。或是在網路異常時,使用這些工具來完成除錯(Debug)。

第一個工具是 ping,能夠從本機(local)發送 ICMP 封包到其他主機上,測試兩台電腦間是否能夠通訊。
當然,有些主機為了安全因素,不接受 ICMP 封包連線測試,此時 ping 也就無能為力了。

以下是 ping 指令的基本語法,COUNT 可以決定要傳送幾個 ICMP 封包,DESTINATION 則是封包傳送的目的地,也就是要測試的目標主機。若是省略 COUNT 就會一直發送 ICMP 封包,若要停止,請按 Ctrl + C 強制中止指令。

ping [-c COUNT] DESTINATION

例如:使用 ping 測試與臺南大學主機 140.133.2.17 的連線。

ping 140.133.2.17

ping 執行截圖

dig 工具簡介

接下來則是 DNS 查詢工具:dig。

dig 指令簡易用法如下,QUERY 就是要查詢的網域名稱(domain name)。

dig [QUERY]

例如:以下查詢臺南大學網站 www.nutn.edu.tw 所對應到的 IP。

dig www.nutn.edu.tw

dig 執行截圖

例如:以下反查 140.133.2.17 的紀錄。

dig -x 140.133.2.17

dig 執行截圖

tracepath 工具簡介

透過 tracepath 可以測試兩主機間封包傳輸時的跳躍(Jump)次數與節點資訊。

以下是 tracepath 的簡易用法,DESTINATION 是要測試的目標主機,-m 則可以指定封包傳送時最多可接受幾次跳躍。

tracepath [-m MAX_HOPS] DESTINATION

例如:以下查詢本機與臺南大學主機 140.133.2.17 間的封包傳輸路徑。

tracepath -m 10 140.133.2.17

tracepath 執行截圖

關於本文章系列

如果對於文章內容有建議、糾錯或圖源標示不正確的問題,歡迎參考 [機派X] Day 1 嘗試與文章作者聯絡。
想看更多本系列的文章,請連結至 [機派X] Day 1 查看大綱。


上一篇
[機派X] Day 5 - Linux 隱藏壞壞的媒體檔案
下一篇
[機派X] Day 7 - 啊我就怕 Nvidia 顯卡驅動裝不起來啊
系列文
[機派X] 無人機與樹莓派的相遇 Linux不只是過客15

尚未有邦友留言

立即登入留言