介紹如何在 Linux 系統中使用 ifconfig 指令查詢與修改網路設定值。
ifconfig 是一個基本的 Linux 網路設定工具,可以用來查詢與修改系統上各網路介面的設定,以下是 ifconfig 指令的使用方法與範例。
ifconfig 指令工具若在 Ubuntu 或 Debian 系列的 Linux 中,可以透過 apt 安裝 net-tools 套件,即可安裝 ifconfig 指令:
# 安裝 ifconfig 工具(Ubuntu/Debian)
sudo apt install net-tools
若在 Red Hat 系列的 Linux 中,則可使用 dnf 安裝 net-tools 套件:
# 安裝 ifconfig 工具(CentOS/RHEL)
sudo dnf install net-tools
執行 ifconfig 指令不帶任何參數,可以顯示目前主機上已經啟用的網路介面:
# 查看目前啟用的網路介面
ifconfig
enp0s3: flags=4163 mtu 1500
inet 192.168.5.4 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 fe80::1f6d:bf6f:90bb:a074 prefixlen 64 scopeid 0x20
ether 08:00:27:aa:26:96 txqueuelen 1000 (Ethernet)
RX packets 215540 bytes 314084328 (314.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41380 bytes 2629272 (2.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 268 bytes 24582 (24.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 268 bytes 24582 (24.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
若要查看主機上所有的網路介面(包含未啟用的網路介面),可以加上 -a 參數:
# 查看所有網路介面 ifconfig -a
若要查看指定網路介面的狀態與資訊,可以直接在參數列中指定網路介面名稱,例如查看 enp0s3 網路介面的資訊:
# 查看 enp0s3 網路介面
ifconfig enp0s3
若要讓 ifconfig 僅顯示簡略的資訊,可以採用 -s 參數:
# 僅顯示簡略資訊 ifconfig -s
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enp0s3 1500 107 0 0 0 170 0 0 0 BMRU lo 65536 159 0 0 0 159 0 0 0 LRU
ifconfig 指令也可以用來設定網路介面的 IP 位址與網路遮罩,系統管理者在測試或除錯時很常使用。
ifconfig 設定網路介面 IP 位址與遮罩的語法為:
ifconfig 網路介面 IP位址 netmask 遮罩
例如將 enp0s3 網路介面的 IP 位址設定為 192.168.5.100,網路遮罩設定為 255.255.255.0,則可執行:
# 設定 enp0s3 網路介面的 IP 位址與遮罩 sudo ifconfig enp0s3 192.168.5.100 netmask 255.255.255.0
IP 別名(IP aliasing)可以讓一張網路卡綁上多個 IP 位址,若要用 ifconfig 設定 enp0s3 這張網路卡的第一個 IP 別名(第二個 IP 位址),則可執行:
# 設定 IP 別名 sudo ifconfig enp0s3:0 192.168.5.101 netmask 255.255.255.0
這裡的 enp0s3:0 代表 enp0s3 的第一個 IP 別名,若要增加多個 IP 別名,則可使用 enp0s3:1、enp0s3:2 等名稱。
通常在更改網路設定之後,都會需要調整預設閘道設定,這部分可以使用 route 指令來處理,例如將預設閘道設定為 192.168.5.254 則可執行:
# 設定預設閘道 sudo route add default gw 192.168.5.254
若要移除預設閘道設定,則可執行:
# 移除預設閘道設定 sudo route delete default gw 192.168.5.254
若要啟用指定的網路介面,可以使用 ifconfig 指定網路介面並搭配 up 參數,例如啟用 enp0s3 這一張網路介面:
# 啟用 enp0s3 網路介面
sudo ifconfig enp0s3 up
若要停用指定的網路介面,則可使用 down 參數:
# 停用 enp0s3 網路介面
sudo ifconfig enp0s3 down
每一張網路卡都有一個固定的 MAC 位址,若要更改這個 MAC 位址,可以使用以下指令:
# 設定 enp0s3 網路卡 MAC 位址為 0c:72:5c:0f:80:73
ifconfig enp0s3 hw ether 0c:72:5c:0f:80:73
若要更改網路介面的最大傳輸單元(MTU)值,可以使用以下指令:
# 設定 enp0s3 網路介面的 MTU 值為 8000 sudo ifconfig enp0s3 mtu 8000
當網路介面啟用 promiscuous 模式時,可以截取所有的網路封包資料,通常用於資訊安全相關的操作。
若要讓網路介面啟用 promiscuous 模式,可以在指定網路介面後,加上 promisc 參數:
# 啟用 enp0s3 網路介面的 promiscuous 模式
sudo ifconfig enp0s3 promisc
若要停用 enp0s3 網路介面的 promiscuous 模式,可以執行:
# 停用 enp0s3 網路介面的 promiscuous 模式 sudo ifconfig enp0s3 -promisc
以下的 bash 指令稿可以用來取得指定網路介面的 IP 位址:
# 取得 enp0s3 網路介面的 IP 位址 ifconfig enp0s3 | grep "inet " | awk '{print $2}'
192.168.5.4