National Yunlin University of Science and Technology
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

雲林科技大學 AQI 62 26°C PM2.5 12
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 20

網路設定

網路卡命名、檢查網路設定、用 netplan 變更設定
Interaction 20 minute(s)

Learning Objectives

  • 看懂 eno1、ens33、enp0s3、wlp3s0 這類網路卡名稱的命名原則
  • 用 ip a、ip -br a、ip route、ip link、resolvectl status、ping、ss 檢查網路狀態
  • 在 Ubuntu Server 用 netplan 設定固定 IP、預設閘道與 DNS,用 netplan try/apply 套用
  • 在 Ubuntu 桌面版用 NetworkManager 的 nmcli 新增、修改與切換連線設定

網路卡的名字從哪裡來

早期的 Linux 把第一張有線網路卡叫 eth0、第二張叫 eth1。問題是這個順序由開機時偵測的先後決定, 多張網路卡的伺服器重新開機後,eth0 和 eth1 可能對調,設定就套錯了網路卡。

現在的 systemd(udev)改用可預測的網路介面名稱(Predictable Network Interface Names):依韌體、匯流排位置等硬體資訊命名, 只要硬體不變,名稱就不變。代價是名稱比 eth0 難讀。

名稱的前兩個字母是類型:

前綴 類型
en 乙太網路(Ethernet,有線網路)
wl 無線區域網路(WLAN,Wi-Fi)
ww 無線廣域網路(WWAN,行動網路)

後面接位置資訊,systemd 依下列順序取第一個可用的:

規則 寫法 例子 意思
1. 主機板內建(韌體提供的編號) o<編號> eno1 主機板上的第 1 張網路卡
2. PCI Express 熱插拔插槽編號 s<插槽> ens33 插槽 33(VMware 虛擬機常見)
3. 實體位置(PCI 匯流排與插槽) p<匯流排>s<插槽> enp0s3、wlp3s0 匯流排 0、插槽 3 的有線網卡(VirtualBox 常見);匯流排 3、插槽 0 的無線網卡
4. MAC 位址 x<MAC> enx78e7d1ea46da 預設不使用,要另外設定
5. 都不適用時 傳統名稱 eth0 核心原本給的名稱

lo 是本機迴路(loopback),代表機器自己,位址是 127.0.0.1。

投影片提到的 em1、p3p4 是 Dell 的 biosdevname 命名方式,在 Ubuntu 上很少見到。

檢查網路狀態的指令

指令 用途
ip a(ip addr) 每張網路卡的狀態、MAC 位址、IP 位址
ip -br a 簡短版:一張網路卡一行,看名稱、狀態與 IP 最快
ip route(ip r) 路由表;default via 10.0.2.2 就是預設閘道
ip link 只看網路卡本身(是否啟用、MAC),不看 IP
resolvectl status 目前使用的 DNS 伺服器(Ubuntu 由 systemd-resolved 管理 DNS,/etc/resolv.conf 裡的 127.0.0.53 是它在本機的代理)
ping -c 3 8.8.8.8 測試能否連到某台主機;-c 3 送 3 次就停,不加會一直送,按 Ctrl+C 停止
ss -tln 本機正在等待連線的 TCP 連接埠:-t TCP、-l 只看等待中的(LISTEN)、-n 用數字顯示
nslookup example.com 查網域名稱對應的 IP

連不上網時,可以由近到遠逐步檢查:

  1. ip -br a:網路卡是不是 UP、有沒有拿到 IP
  2. ip route 找出閘道,ping -c 3 閘道:區域網路通不通
  3. ping -c 3 8.8.8.8:能不能連到外面(用 IP,不經過 DNS)
  4. ping -c 3 example.com:DNS 能不能把名稱轉成 IP;第 3 步通、這一步不通,就是 DNS 的問題

投影片的 ifconfig、route、netstat 屬於較舊的 net-tools 套件,Ubuntu 預設沒有安裝,執行時會提示 sudo apt install net-tools。 新的寫法是 ip a、ip route、ss,功能都涵蓋得到。

CentOS/RHEL 與 Ubuntu 的設定方式對照

投影片的變更網路設定是 CentOS 的做法。Ubuntu 的對應如下:

項目 CentOS/RHEL(投影片) Ubuntu 24.04
設定檔 /etc/sysconfig/network-scripts/ifcfg-網卡名稱 /etc/netplan/*.yaml(netplan)
套用設定 systemctl restart network 或重啟 NetworkManager sudo netplan try 或 sudo netplan apply
實際管理網路的程式 NetworkManager Server 版:systemd-networkd;桌面版:NetworkManager
命令列工具 nmcli Server 版用 netplan 設定檔;桌面版也可以用 nmcli
DNS 設定 /etc/resolv.conf 的 nameserver 寫在 netplan 的 nameservers;用 resolvectl status 查看

netplan 是 Ubuntu 的網路設定層:你用 YAML 寫下「想要的網路設定」,netplan 再轉成 systemd-networkd 或 NetworkManager 看得懂的設定。

在 Ubuntu Server 用 netplan 設定固定 IP

伺服器要讓別人連進來,通常需要固定 IP。安裝時預設用 DHCP 自動取得,設定檔大致長這樣:

# /etc/netplan/50-cloud-init.yaml(預設:DHCP)
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: true

改成固定 IP 192.168.100.100/24、閘道 192.168.100.254、DNS 8.8.8.8:

network:
  version: 2
  ethernets:
    enp0s3:                       # 網路卡名稱,要和 ip a 看到的一樣
      dhcp4: false                # 不用 DHCP
      addresses:
        - 192.168.100.100/24      # IP 位址/遮罩長度(/24 就是 255.255.255.0)
      routes:
        - to: default             # 預設路由
          via: 192.168.100.254    # 經過這個閘道
      nameservers:
        addresses: [8.8.8.8]      # DNS 伺服器

寫 YAML 的注意事項:

  • 縮排只能用空格,不能用 Tab;同一層要對齊(習慣每層 2 個空格),縮排錯了設定就會讀錯或報錯
  • addresses 要寫成 IP/遮罩長度,只寫 IP 會出現 invalid prefix length 的錯誤
  • 舊教學的 gateway4: 192.168.100.254 已經被淘汰,套用時會出現 `gateway4` has been deprecated, use default routes instead 的警告;請改用 routes 的 to: default 搭配 via
  • 設定檔的權限要是 600(只有 root 能讀寫),權限太寬鬆時 netplan 會警告 Permissions for ... are too open;用 sudo chmod 600 檔名 修正
  • 用 cloud-init 安裝的系統,50-cloud-init.yaml 開頭的註解會提醒:這個檔案由 cloud-init 產生,重新開機可能被改回去。要長期使用自己的設定,依註解說明建立 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg,寫入 network: {config: disabled}

編輯完成後套用:

sudo netplan try      # 先試用:120 秒內按 Enter 確認,沒按就自動還原
sudo netplan apply    # 直接套用

透過 SSH 遠端改網路設定時,建議用 netplan try:設定錯了導致連線中斷,時間到會自動還原,不會把自己鎖在門外。

編輯設定檔可以用上一課的 sudo nano /etc/netplan/50-cloud-init.yaml;下面的練習用 sudo tee 檔案 << EOF 一次寫入整份內容,tee 會把內容寫進檔案、同時印在螢幕上。 改之前先備份一份。備份檔名不要以 .yaml 結尾,否則 netplan 也會把備份當成設定讀進去。

互動練習:檢查網路並用 netplan 設定固定 IP

這是一台 Ubuntu Server 虛擬機,網路卡 enp0s3 目前用 DHCP 取得 10.0.2.15。先用指令看懂目前的網路狀態,再把它改成固定 IP 192.168.100.100/24、閘道 192.168.100.254、DNS 8.8.8.8。每一顆按鈕都是真的指令;寫入設定檔的那一顆是多行的 here-doc,滑鼠移到按鈕上可以看到完整內容。有一顆故意沒加 sudo,看看讀取設定檔時的錯誤。

在 Ubuntu 桌面版用 nmcli

Ubuntu 桌面版由 NetworkManager 管理網路,可以在「設定 → 網路」用圖形介面改,也可以用命令列工具 nmcli。 NetworkManager 區分兩個概念:

  • device(裝置):實體的網路卡,例如 enp0s3
  • connection(連線設定檔):一組設定(DHCP 或固定 IP、閘道、DNS…)。同一張網路卡可以有好幾個設定檔,一次只啟用一個
指令 作用
nmcli dev status 每個裝置的狀態與正在使用的連線(dev 是 device 的縮寫)
nmcli con show 列出所有連線設定檔(con 是 connection 的縮寫);加 --active 只看啟用中的
nmcli con show 名稱 某個設定檔的詳細內容
sudo nmcli con add con-name demo type ethernet ifname enp0s3 ipv4.method manual ipv4.addresses 192.168.100.100/24 ipv4.gateway 192.168.100.254 ipv4.dns 8.8.8.8 autoconnect yes 新增名為 demo 的固定 IP 設定檔,開機自動連線
sudo nmcli con modify demo ipv4.dns 8.8.8.8,1.1.1.1 修改設定檔;改完要重新 up 才生效
sudo nmcli con up demo 啟用 demo;同一張網路卡原本的設定檔會被停用
sudo nmcli con down demo 停用 demo

投影片把設定存到 /etc/sysconfig/network-scripts/ifcfg-* 是 CentOS 的位置,Ubuntu 沒有這個目錄。 Ubuntu Server 預設沒有安裝 NetworkManager,執行 nmcli 會出現 Command 'nmcli' not found;Server 版請用前面的 netplan。

互動練習:用 nmcli 切換連線設定檔

對應投影片 Lab02 與 Lab03,這次是一台 Ubuntu 桌面版。先看裝置與連線設定檔,再新增一個叫 demo 的固定 IP 設定檔(IP 192.168.100.100/24、閘道 192.168.100.254、DNS 8.8.8.8),啟用後確認 IP,修改 DNS,最後切換回原本的 DHCP 設定檔。

想一想:網路卡名稱與檢查指令

1.

網路卡名稱 wlp3s0 代表什麼?

2.

ping -c 3 8.8.8.8 成功,但 ping -c 3 example.com 出現 Name or service not known,最可能是哪裡有問題?

3.

想知道這台機器的預設閘道,應該看哪個指令的輸出?

第 1 次作答

想一想:netplan 與 nmcli

1.

下列 netplan 設定,哪一個寫法會讓套用時出現淘汰警告?

2.

透過 SSH 遠端修改伺服器的網路設定,為什麼建議用 sudo netplan try 而不是直接 apply?

3.

在 Ubuntu 桌面版用 sudo nmcli con modify demo ipv4.dns 1.1.1.1 改了 DNS,卻沒有生效,還要做什麼?

第 1 次作答

重點精華回顧

  • 網路卡名稱:en 有線、wl 無線、ww 行動網路;o 主機板內建、s 熱插拔插槽、p…s… PCI 位置、x MAC;都不適用才用 eth0。
  • 檢查網路:ip -br a、ip a、ip route、ip link、resolvectl status、ping -c、ss -tln;由近到遠:網卡 → 閘道 → 外部 IP → 網域名稱。
  • ifconfig、netstat、route 屬於沒有預裝的 net-tools,新寫法是 ip 與 ss。
  • Ubuntu Server 用 netplan:/etc/netplan/*.yaml、權限 600、縮排只用空格;固定 IP 寫 dhcp4: false、addresses、routes 的 to: default 加 via、nameservers;gateway4 已淘汰。
  • 套用:sudo netplan try(遠端修改時用,會自動還原)或 sudo netplan apply。
  • Ubuntu 桌面版用 NetworkManager:nmcli dev status、nmcli con show、con add、con modify、con up;改完要重新 up。
這一課完成了!
看我的學習進度
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。