[Linux] Ubuntu 如何利用 Netplan 設定 固定IP


本文以初學者的角度,以step by step的方式,教大家如何在Ubuntu中利用 Netplan 設定 固定IP:不管是在Windows還是Linux平台,設定 固定IP (或說靜態IP) 是一件常遇到的事,尤其是在Linux平台中,如果沒有UI介面的話,那麼設定的門檻會比較高一點,而且麻煩的是你用的可能是Ubuntu,也可能是使用CentOS,這二種大宗的OS其設定方式也會有不同,因此,有些初學者就會害怕或懶的解決而直接放棄,我個人的建議則是:其實沒那麼難,試試吧!多學一點對未來也許是有幫助的。
話說回來,設定固定IP有什麼好處呢?我自己最常遇到的問題是我把Linux的OS安裝在VM中,剛安裝好OS時,預設取得IP的模式都是DHCP,也就是所謂的動態IP,這種模式雖然會方便的自動取得可用IP,但是一旦你需要固定IP進行連線操作的時候,那可能就有點麻煩了,因為DHCP模式有可能會在網路斷線或者重開機時重新取得IP,而且取到的IP可能和之前所設定的會不一致,所以在此狀況下,你之前設定過的IP相關資訊,可能就需要重新設定一遍,這會造成不少的困擾。

本文示範的Ubuntu版本為:18.04桌面版 (Server版適用)

準備工作

要設定固定IP之前,要先了解一下目前OS中使用的網卡名稱為何 (Interface),指令有很多,以下提供三種方法供大家參考,選擇一個自己喜歡的就行:

ip link

ip link 指令示意圖

ip a

ip a 指令示意圖

ifconfig -a

ifconfig -a 指令示意圖

在這裡的準備工作,就是要知道等等我們要設置哪張網卡,通常網卡名稱會以「ens」開頭 (當然也會有例外),以本例看來,我們要的網卡名稱即為ens33,如果你有出現多個可能的網卡名稱候選人,比較簡單的判斷方式,就是由你現在取得的動態IP來看它是對應到哪張網卡。

利用Netplan設定固定IP

Ubuntu在17.10後,即改用「Netplan」來管理網路設定,設定檔位置預設是在「/etc/netplan/」中,因此可先切換到該目錄並進行查看:

# 進入netplan設定檔目錄
cd /etc/netplan
# 查看目錄下的檔案
ll

在netplan的目錄,你所看到的檔案可能會因為你的版本不同而有不同的名字,例如:我用桌面版的,看到的就是01-network-manager-all.yaml,而我有另一個Server版本,其netplan下的檔案則是50-cloud-init.yaml,也有文章提到會出現01-netcfg.yaml這個名字,因此,大家可以看一下你自己的目錄下是哪個檔案,選擇符合自己的就行。

這裡就先以「Desktop」版本的01-network-manager-all.yaml為範例來說明,當我第一次進入此檔案時,只有以下的內容:

netplan 桌面版設定檔

如果是「Server」版本的,內容大概如下:

netplan Server版設定檔

而我們要做的就是把固定IP的資訊加入,通常會需要加入以下項目:(如果怕設定失敗,建議先備份舊檔,這次的目標是把原本的動態IP 172.16.66.188,改成固定的IP 172.16.66.199)

  • addresses:設定IP及MASK,以本文的目的來說,就是要填入你想要固定IP,本例為「172.16.66.199/24」
  • nameservers:DNS伺服器,可設定多組,不知道要加什麼DNS的話,就加「8.8.8.8」吧
  • gateway4:就是大家熟知的Gateway囉,後面的4代表IP4的Gateway,習慣上會設成和IP的值一樣,但把最後組數字改成「1或254」,本例為「172.16.66.1」。注意:這邊說的只是「習慣」上,但實際的網站環境也許不是這麼設定的,因此,若你不知道可用的Gateway IP,建議用文末的方式取得
  • dhcp4:請設「no」,關閉DHCP的自動取得IP功能
  • ethernets:設定網卡的地方,桌面版的可能會沒有這個欄位,要自己加
  • 網卡名稱:設定網卡名稱的地方,桌面版的可能會沒有這個欄位,要自己加,本例為「ens33」

下圖是桌面版加入固定IP相關資訊後的示意圖,這個檔案是YAML格式,相關的格式規定在此就不多說了,請自行上網查詢相關的資料,這裡只做重點的提示,也就是說縮排的地方要特別注意,每列的縮排空二格就空二格,空四格就空四格,記得要對齊,如果不熟的人建議就參考下面的格式去撰寫就行了。

netplan桌面版 固定IP 設定

同樣地,提供Server版設定後的參考內容供大家參考,在Server版中,我是將IP設成「172.16.66.177

netplan server版 固定IP 設定

修改完成後,執行以下指令進行設定的套用

sudo netplan apply

至此,設定就完成了,以後就可以用固定IP連線囉!不過建議還是可以再利用指令查一下自己的IP是否設定完成,以免設定失敗,例如在準備工作介紹的「ip a」、「ifconfig -a」或「hostname -I」皆可查看,如下圖,可看出IP已由原本的「172.16.66.188」改成「172.16.66.199」囉。

netplan設定IP - 由DHCP變成固定IP

更新:Ubuntu 22.04.1 設定

Ubuntu升到22.04.1後,設定上有些不太一樣,若照上面的設法,會被提醒說「Gateway4」已被棄用。若大家有這種情況,可以改用關鍵字「routes」來設定,如下範例:

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      addresses:
        - 192.168.0.200/24
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      routes:
        - to: default
          via: 192.168.0.1
  version: 2

如何取得Gateway IP?

用DHCP來動態取得IP時,通常上網都不會有太大問題,所以我會在可上網的情況下,利用指令查詢Gateway IP,其指令如下:

ip r 或 netstat -r -n 或 route -n

經過指令查詢後,可以發現Gateway IP為「172.16.66.2」,如下圖所示:

查詢Gateway IP

延伸閱讀:
[Linux] CentOS 固定IP 、DNS 設定教學
[Ubuntu] 如何安裝openssh-server,支援 SSH Server 讓用戶從外部登入操作
[Linux] vnStat 網路流量監控工具使用教學

參考文章:
Configure Static IP Addresses on Ubuntu 18.04 LTS Server