為了讓Linux可以使用或是提供網路服務,必須要設定Linux使其能夠連上網路。Linux可以透過圖形化桌面環境所提供的網路管理工具或是終端機的文字介面來輕鬆完成網路設定。



使用圖形使用者介面(GUI)設定Linux的網路連線

大多數的Linux桌面環境都有提供網路管理工具,可以很直覺地進行網路連線的設定。下圖即為Cinnamon的時間與時區設定視窗:

linux-network

linux-network

使用命令列介面(CLI)設定Linux的網路連線

顯示出所有的網路連線介面

如果不確定自己的系統擁有哪些網路介面,可以使用ip l或是ip link指令來查看。

linux-network

在這裡簡單說明一下不同名稱的網路介面所代表的網路類型:

  • lo:即Loopback。它是一個虛擬的網路介面,可以透過這個介面在本機中與自己進行連線。
  • eth:使用電纜(cable)形成乙太網路(有線網路)的網路介面。
  • enp:同eth,用硬體連接的位置來命名。
  • eno:同eth,用主機板上的裝置的號碼來命名。
  • ens:同eth,用PCI-E裝置的號碼來命名。
  • enx:同eth,MAC地址來命名。
  • wlan:不使用電纜連線(無線網路)的網路介面。
  • wlp:同wlan,用硬體連接的位置來命名。
  • wlx:同wlan,MAC地址來命名。
  • usb:使用USB連線的網路介面。如手機透過USB分享行動網路給電腦時,就會使用這個介面。
  • vboxnet:VirtualBox使用的虛擬的網路介面。VirtualBox的虛擬機可以透過這個網路介面與實體本機進行連線。
  • PPP:PPP為Point-to-Point Protocol(點對點協定)。常見的有建構在乙太網路的PPPoE(Point-to-Point Protocol Over Ethernet)、以及建構在ATM(Asynchronous Transfer Mode)的PPPoA(Point-to-Point Protocol Over ATM)。PPP支援連線認證與壓縮加密,常用於網際網路服務提供者(ISP, Internet Service Provider)與用戶之間的連線。由路由器(Router)建立PPP連線的方式稱作硬體撥接(簡稱硬撥),這樣的方式可以讓連接到此路由器底下的裝置都可以透過路由器所建立的同一條PPP連線來連上網際網路,也就是使用共同的IP上網。相反地,由電腦建立PPP連線的方式則稱作軟體撥接(簡稱軟撥)。硬撥的優點是多個裝置都可以使用同樣的IP進行上網,不太有IP數量限制的問題,且對外的IP不會直接連線到路由器底下的裝置,安全性較高;缺點則是效能會受限於路由器的等級,且外部難以直接透過路由器的對外IP來連線到路由器底下的裝置,需要作額外的設定才可以連線。軟撥的優點是效能取決於電腦的效能,通常會比路由器還要好,且外部可以直接使用對外IP來連線到軟撥的電腦;缺點則是撥接的裝置一多,會有IP不足的問題,且對外的IP可以直接連線到軟撥的電腦,安全性較低。

顯示出目前啟用的網路連線介面的連線狀態

使用ip a或是ip address指令可以查看目前啟用的網路介面的連線狀態。

linux-network

如果想專注於查看網路介面的啟用與否,以及網路介面的位址,可以使用ip -brief a指令。

linux-network

顯示出目前啟用的網路連線介面的路由方式

使用ip r或是ip route指令可以查看目前啟用的網路介面的路由方式(即主路由表)。

使用動態主機設定協定(DHCP)完成網路設定

大多數的路由器會使用動態主機設定協定(DHCP, Dynamic Host Configuration Protocol)來與底下的其它裝置完成內部連線設定。要在Linux上透過DHCP來設定網路介面,可以使用以下指令:

sudo dhclient <網路介面名稱>

例如要透過DHCP來設定enp0s3網路介面,可以執行以下指令:

sudo dhclient enp0s3

指令執行後,可以再次使用上面提到的ip a指令來查看DHCP設定的結果。

開啟網路介面

想要透過命令列開啟網路介面的話,可以使用以下指令:

sudo ip link set <網路介面名稱> up

例如要開啟enp0s3網路介面,可以執行以下指令:

sudo ip link set enp0s3 up

關閉網路介面

想要透過命令列關閉網路介面的話,可以使用以下指令:

sudo ip link set <網路介面名稱> down

例如要關閉enp0s3網路介面,可以執行以下指令:

sudo ip link set enp0s3 down

設定網路介面的參數

若路由器無法透過DHCP來自動設定連線參數,或是不想使用DHCP的話,也可以使用以下指令來手動指定連線參數:

sudo ip addr add <此網路介面的IP位址>/<IP位址遮罩位元數> dev <網路介面名稱>

例如:

sudo ip addr add 192.168.57.101/24 dev enp0s9

如果要重設IP位址,可以使用以下指令:

sudo ip addr flush dev <網路介面名稱>

如果需要指定通往其他設備的預設閘道器(Gateway),可以使用以下指令來設定:

ip route add default via <閘道器IP位址> dev <網路介面名稱>

以下指令可以刪除預設閘道器的路由規則:

sudo ip route delete default

以下指令可以刪除指定網路介面的所有路由規則:

sudo ip route flush dev <網路介面名稱>

修改網路介面設定檔

透過ip指令設定好的網路,重新開機之後依然需要再下指令重新設定。如果要對網路做永久的改變,假設我們的Linux發行版所使用的網路管理軟體為Netplan,可以使用文字編輯器修改/etc/netplan底下的設定檔(YAML格式)。

例如設定enp0s3enp0s8這兩個網路介面使用DHCP:

network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      dhcp4: true
  version: 2

linux-network

例如手動設定enp0s3的位址、路由和DNS,以及enp0s8網路介面的位址:

network:
  ethernets:
    enp0s3:
      addresses:
        - 10.0.2.101/24
      routes:
        - to: default
          via: 10.0.2.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
    enp0s8:
      dhcp4: true
    enp0s9:
      addresses:
         - 192.168.57.101/24
  version: 2

linux-network

addresses欄位可以同時設定網路介面的IP位址和IP位址遮罩。routes欄位用來設定閘道器。nameservers設定DNS伺服器。

修改設定檔之後,使用以下指令來測試設定檔是否正確。

sudo netplan try

這個指令除了會檢查設定檔的語法是否正確外,還會嘗試套用設定兩分鐘,讓使用者可以在這兩分鐘內去檢查這個設定是否正確。如果發現不正確,可以直接按Ctrl + c來回復之前的設定(設定檔不會被回復);如果正確,可以按下Enter來套用設定。

linux-network

設定PPPoE連線

一般來說我們會在路由器上直接做好PPPoE連線(硬體撥號),而不會使用電腦來做軟體撥號,請確認您是否真的需要用這種方式進行連線。注意,這個小節介紹的PPPoE連線設定方式只適用於基於Debian的Linux發行版。

首先執行以下指令安裝必要的套件:

sudo apt install pppoeconf

用文章前面介紹的方式設定好乙太網路之後,再執行以下指令來設定PPPoE:

sudo pppoeconf

linux-network

接著照著文字圖形介面上的步驟進行設定即可。

設定Wi-Fi

指令工具

注意,這個小節介紹的PPPoE連線設定方式只適用於基於Debian的Linux發行版。

首先要安裝需要的套件。

sudo apt install rfkill wireless-tools wpasupplicant

首先必須先確認Wi-Fi網路介面的名稱,並用上面介紹的方式啟用它。

如果您發現在啟用網路介面時出現RF-kill的相關問題,需要先解除RF-kill對Wi-Fi網路介面的軟體關閉功能。

首先輸入以下指令來查看所有RF-kill可控制的網路介面:

rfkill list all

linux-network

如果有看到Wireless LAN的部份出現yes,要記下它的號碼(這邊的圖是1),再套用到下面這個解除RF-kill軟體關閉功能的指令中:

sudo rfkill unblock 1

指令中的1即為網路介面的號碼。

成功啟動Wi-Fi網路介面之後,可以先使用以下的指令來掃描附近可見的無線網路:

sudo iwlist scan

linux-network

由於我們使用的是WPA連線,因此要先用以下指令來產生WPA的通行密鑰檔案。此處以連接到SSID為magiclen.org,密碼為12345678的AP(Access Point)為例。

wpa_passphrase magiclen.org 12345678 > ~/wpa.conf

指令執行後,便能在家目錄中產生出通行密鑰檔案,檔名為wpa.conf

然後再使用以下指令進行WPA連線:(網路介面以wlx14cc2016d2d4為例)

sudo wpa_supplicant -D wext -i wlx14cc2016d2d4 -c ~/wpa.conf

linux-network

如果關閉這支行程,連線將會中斷。因此也可以加上-B參數,讓wpa_supplicant在背景中執行。

最後用先前提到的方式,輸入以下指令,使用DHCP進行連線。

sudo dhclient wlx14cc2016d2d4

linux-network

網路介面設定檔

若要在Netplan設定檔中撰寫Wi-Fi連線設定,方式如下:

network:
  ...
  wifis:
    wlx14cc2016d2d4:
      dhcp4: true
      access-points:
        "magiclen.org":
          password: "12345678"