Linux 系統的網路設定對於伺服器管理至關重要,理解網路介面、IP 位址、路由等概念是網路管理的基礎。本文將介紹如何使用 ip 指令檢視網路介面和 IP 位址,並解說子網路遮罩的計算方式和特殊用途的 IP 位址,例如廣播位址、多播位址和私有位址。同時,也會涵蓋使用 nmcli 和傳統方法設定 IP 位址、閘道器和 DNS 伺服器,以及新增、檢視路由表,調整 MTU 等實務操作。文章將比較新舊指令的差異,例如 ipifconfigip routeroutenetstat,並提供清晰的指令解說和實際案例,幫助讀者快速上手 Linux 網路設定。

Linux 網路基礎設定與操作 - 與本地介面共舞

在 Linux 系統中,ip 指令支援命令補全功能,因此 ip addr 或簡寫為 ip a 都能得到相同的結果。以下是一個範例:

robv@ubuntu:~$ ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:33:2d:05 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.182/24 brd 192.168.122.255 scope global dynamic noprefixroute ens33
       valid_lft 6594sec preferred_lft 6594sec
    inet6 fe80::1ed6:5b7f:5106:1509/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

內容解密:

  • lo 代表回環介面(loopback interface),其 IP 位址為 127.0.0.1,用於本機內部通訊。
  • ens33 代表乙太網路介面,其 IP 位址為 192.168.122.182,由 DHCP 動態分配。
  • valid_lftpreferred_lft 分別表示 IP 位址的有效生命週期和首選生命週期。
  • IPv6 位址也一併顯示,若只需檢視 IPv4 或 IPv6 資訊,可使用 -4-6 選項。

使用舊版指令 ifconfig

舊版的 ifconfig 指令也能達成類別似的功能:

robv@ubuntu:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1400
        inet 192.168.122.22  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::1ed6:5b7f:5106:1509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:33:2d:05  txqueuelen 1000  (Ethernet)
        RX packets 161665  bytes 30697457 (30.6 MB)
        RX errors 0  dropped 910  overruns 0  frame 0
        TX packets 5807  bytes 596427 (596.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1030  bytes 91657 (91.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1030  bytes 91657 (91.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

內容解密:

  • ifconfig 以不同的格式顯示網路介面資訊,包括接收和傳送的封包數量、錯誤數等。
  • 相較於 ip 命令,ifconfig 的輸出格式較為傳統,但在現代 Linux 系統中較少被使用。

路由資訊的檢視

使用 ip route 或簡寫為 ip r 可以檢視路由表:

robv@ubuntu:~$ ip route
default via 192.168.122.1 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
192.168.122.0/24 dev ens33 proto kernel scope link src 192.168.122.156 metric 100

解碼路由資訊:

  • default via 192.168.122.1 表示預設路由指向 192.168.122.1,所有未知的封包將透過此閘道傳送。
  • 169.254.0.0/16 是鏈路本地位址(Link-Local Address),用於在沒有 DHCP 分配 IP 的情況下進行本地通訊。
  • 192.168.122.0/24 是本機子網的連線路由,表示可以直接與該子網中的主機通訊,無需額外的路由。

舊版指令 netstat 和 route

舊版的 netstat -rnroute 命令也可以用來檢視路由表:

robv@ubuntu:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window irtt Iface

使用舊版指令的注意事項:

  • netstat -rn 以數值形式顯示路由表,包含目標網路、閘道、子網路遮罩等資訊。
  • 在現代 Linux 系統中,推薦使用 ip route 命令來檢視和管理路由表,因為其語法更一致且功能更強大。

Linux 網路基礎組態與操作 - 本地介面工作

網路設定基礎

在 Linux 系統中,網路組態是至關重要的。我們可以使用多種命令來檢查和設定網路介面、IP 位址和路由表。首先,讓我們來看看如何使用 ip 命令來檢查網路介面和 IP 位址。

IP 位址和子網路遮罩

IPv4 位址允許我們為子網路中的每個裝置分配一個唯一的位址。一個 IPv4 位址由四個八位元(octet)組成,每個八位元的範圍是 0-255。例如,IP 位址 192.168.122.182 和子網路遮罩 /24(或 255.255.255.0)。

讓我們將其轉換為二進位制來理解:

  • 255 在二進位制中是 11111111(8 位元)。
  • 三個這樣的分組構成 24 位元。

因此,192.168.122.182/24 表示網路部分是 192.168.122.0,而主機部分是 182,其範圍可以是 1-254。

子網路遮罩的調整

如果我們需要一個更大的子網路,可以將遮罩向左移動幾個位元。例如,對於一個 20 位元的子網路遮罩:

  • 第三個八位元的遮罩是 0b11110000,轉換為十進位制是 240
  • 這使得第三個八位元的網路部分是 1120b01110000)。
  • 主機部分的範圍在第三個八位元中是 0-15,在第四個八位元中是 0-255,總共可用的主機位址是 3824(15 x 255 - 1)。

特殊用途的 IP 位址

有一些特殊的 IP 位址需要了解:

  1. 廣播位址:當主機部分的所有位元都設為 1 時,該位址被稱為廣播位址。例如,對於 /24 網路,廣播位址是 192.168.122.255;對於 /20 網路,廣播位址是 192.168.127.255

  2. 多播位址:用於將相同的資料傳送到多個裝置。多播位址的形式通常為 224.0.0.0239.255.255.255,其中最後 11 個位元通常用於形成「眾所周知」的多播協定位址。

  3. 私有位址(RFC 1918):這些位址範圍被保留用於組織內部使用,不能直接在公共網際網路上使用,需要透過網路位址轉換(NAT)來進行轉換。

私有 IP 位址範圍

根據 RFC 1918,私有 IP 位址範圍包括:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

這些範圍內的位址不會在公共網際網路上被路由,因此可以用於內部網路而無需擔心與公共網際網路上的其他裝置衝突。

Linux 網路基礎組態與操作:本地介面管理

在探討 Linux 網路設定之前,我們先來瞭解 RFC1918 地址。這些地址專為內部網路使用而設計,不會與公共網際網路上的任何地址衝突。RFC1918 地址包括:

  • 10.0.0.0/8(A 類別位址)
  • 172.16.0.0 至 172.31.0.0/16(B 類別位址,可簡化為 172.16.0.0/12
  • 192.168.0.0/16(C 類別位址)

這些地址區塊為組織提供了龐大的內部 IP 空間,且保證不會與公共網際網路上的地址發生衝突。

為介面指派 IP 位址

在大多數伺服器組態中,指派永久 IPv4 位址是一項基本任務。使用 nmcli(Network Manager 命令列工具)可以輕鬆完成此操作。以下是設定 IP 位址、預設閘道和 DNS 伺服器的步驟:

  1. 首先,顯示目前的網路連線組態:

    sudo nmcli connection show
    

    假設我們的連線名稱為 “Wired connection 1”。

  2. 使用 nmcli 修改連線組態:

    sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.122.22/24
    sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.122.1
    sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8"
    sudo nmcli con mod "Wired connection 1" ipv4.method manual
    
  3. 儲存變更並啟用連線:

    sudo nmcli connection up "Wired connection 1"
    

傳統方法

在某些舊系統中,網路組態是透過編輯檔案來完成的。例如:

  • 編輯 /etc/resolv.conf 以變更 DNS 伺服器:

    nameserver 8.8.8.8
    
  • 編輯 /etc/sysconfig/network-scripts/ifcfg-eth0 以變更 IP 位址、子網路遮罩等:

    DEVICE=eth0
    BOOTPROTO=none
    ONBOOT=yes
    NETMASK=255.255.255.0
    IPADDR=10.0.1.27
    GATEWAY=192.168.122.1
    

新增路由

要新增臨時靜態路由,可以使用 ip 命令:

sudo ip route add 10.10.10.0/24 via 192.168.122.10

若要新增永久靜態路由,可以使用 nmcli

sudo nmcli connection modify "Wired connection 1" +ipv4.routes "10.10.11.0/24 192.168.122.11"
sudo nmcli connection up "Wired connection 1"

檢視路由表

使用 ip route 命令檢視目前的路由表:

ip route

Linux 網路基礎設定與操作:本機介面管理

在 Linux 系統中,網路設定是一項基本且重要的管理工作。無論是設定 IP 位址、子網路遮罩,還是路由,都需要熟悉相關的指令和設定檔。本文將介紹如何使用傳統方法和現代化工具來進行網路設定。

使用傳統方法新增路由

首先,介紹如何使用傳統的 route 指令來新增路由。假設我們需要新增一條到達 10.10.12.0/24 網段的路由,並且下一跳是 192.168.122.12,可以使用以下指令:

$ sudo route add -net 10.10.12.0 netmask 255.255.255.0 gw 192.168.122.12

內容解密:

  • sudo:以系統管理員許可權執行指令。
  • route add:新增路由的指令。
  • -net 10.10.12.0:指定目標網段。
  • netmask 255.255.255.0:指定子網路遮罩。
  • gw 192.168.122.12:指定下一跳位址。

若要使這條路由永久生效,需要將其寫入設定檔中。不同 Linux 發行版的設定檔位置不同。例如,在舊版的 Debian/Ubuntu 中,可以編輯 /etc/network/interfaces 檔案,並加入以下行:

up route add -net 10.10.12.0 netmask 255.255.255.0 gw 192.168.122.12

內容解密:

  • up:表示在介面啟動時執行後續的指令。
  • 其餘部分的解說與前述相同。

在舊版的 RedHat 系列發行版中,可以編輯 /etc/sysconfig/network-scripts/route-<device name> 檔案,並加入以下行:

10.10.12.0/24 via 192.168.122.12

內容解密:

  • 10.10.12.0/24:以 CIDR 表示法指定目標網段。
  • via 192.168.122.12:指定下一跳位址。

停用和啟用網路介面

在現代 Linux 系統中,可以使用 ip 指令來停用和啟用網路介面。例如,要停用和重新啟用 ens33 介面,可以執行:

$ sudo ip link set ens33 down
$ sudo ip link set ens33 up

內容解密:

  • ip link set:用於設定網路介面的指令。
  • ens33 down:停用 ens33 介面。
  • ens33 up:啟用 ens33 介面。

在舊版系統中,可以使用 ifconfig 指令達到相同的效果:

$ sudo ifconfig ens33 down
$ sudo ifconfig ens33 up

內容解密:

  • ifconfig:用於設定和檢視網路介面狀態的指令。
  • 其餘部分的解說與 ip link set 相同。

設定 MTU

MTU(Maximum Transmission Unit)是指網路介面可以傳輸的最大資料單元大小。預設情況下,乙太網路的 MTU 為 1500 位元組。在某些情況下,例如 iSCSI 儲存流量,需要較大的 MTU(通常稱為巨型幀,Jumbo Frame),一般設為 9000 位元組。可以使用 nmcli 指令來設定 MTU:

$ sudo nmcli con mod "Wired connection 1" 802-3-ethernet.mtu 9000
$ sudo nmcli connection up "Wired connection 1"

內容解密:

  • nmcli con mod:修改連線設定的指令。
  • "Wired connection 1":指定要修改的連線名稱。
  • 802-3-ethernet.mtu 9000:將 MTU 設定為 9000 位元組。
  • nmcli connection up:啟動已修改的連線。

更多關於 nmcli 的使用

nmcli 不僅可以用於設定 MTU,還可以進入互動式模式進行更多設定。進入互動式模式的指令如下:

$ nmcli connection edit type ethernet

在互動式模式下,可以使用 print 指令列出所有可設定的引數。

nmcli> print
===============================================================
================
Connection profile details (ethernet)
===============================================================
================
...

內容解密:

  • nmcli connection edit type ethernet:進入針對乙太網路介面的互動式編輯模式。
  • print:列出目前連線的所有可設定引數。

透過本文的介紹,您應該對 Linux 系統中的網路設定有了更深入的瞭解。無論是使用傳統方法還是現代化工具,都能夠有效地管理和組態您的網路介面。