本篇介紹如何在 Linux 系統中使用 ip
指令查詢與更改網路設定。
ifconfig
指令是一個在過去的 Linux 系統中很常被使用的網路設定工具,而 ip
指令則是一個新的替代工具,功能比既有的 ifconfig
更豐富,而且 ip
指令目前在 Ubuntu Linux 中已經是預設會安裝的基本指令(ifconfig
預設並不會安裝),所以熟悉 ip
指令的使用方式對於 Linux 管理者來說是很重要的。
若要查詢 Linux 主機上各網路介面的 IP 位址,可以使用 ip address show
指令,而這個指令也有一些簡短的寫法,功能都相同:
# 查詢 IP 位址 ip address show # 查詢 IP 位址(簡短指令) ip address # 查詢 IP 位址(簡短指令) ip addr # 查詢 IP 位址(簡短指令) ip a
執行後的輸出會類似這樣:
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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 50:eb:f6:d6:ab:99 brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 84:7b:57:da:75:91 brd ff:ff:ff:ff:ff:ff inet 172.20.10.13/28 brd 172.20.10.15 scope global dynamic noprefixroute wlan0 valid_lft 86332sec preferred_lft 86332sec inet6 2001:b400:e7d5:6d49:b371:89fc:baae:193f/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::c99f:e954:478:50bf/64 scope link noprefixroute valid_lft forever preferred_lft forever 4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 00:e0:4c:a1:21:2d brd ff:ff:ff:ff:ff:ff
若只想要顯示 IPv4 或 IPv6 的網路位址,可以加上 -4
或 -6
參數:
# 查詢 IP 位址(只顯示 IPv4 位址) ip -4 address # 查詢 IP 位址(只顯示 IPv6 位址) ip -6 address
若只想要顯示指定網路介面的設定,可以用 dev
來指定網路介面,而 dev
也可以省略,以下幾種寫法都有相同的功能:
# 只顯示 wlan0 網路介面資訊 ip address show dev wlan0 # 只顯示 wlan0 網路介面資訊(簡短寫法) ip addr show wlan0 # 只顯示 wlan0 網路介面資訊(簡短寫法) ip addr list wlan0
ip
指令預設的輸出資訊比較多,如果希望輸出比較簡短的資訊,可以加上 -br
參數:
# 查詢 IP 位址(簡短輸出) ip -br address show
lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 DOWN wlan0 UP 172.20.10.13/28 2001:b400:e7d5:6d49:b371:89fc:baae:193f/64 fe80::c99f:e954:478:50bf/64 eth1 DOWN
若要在 eth0
這個網路介面上新增一個 192.168.0.1
的 IP 位址,並將網路遮罩設定為 255.255.255.0
,可以執行:
# 新增 IP 位址 sudo ip address add 192.168.0.1/255.255.255.0 dev eth0 # 新增 IP 位址(簡短寫法) sudo ip a add 192.168.0.1/24 dev eth0
在預設的情況下,ip
指令不會自動設定廣播位址,我們可以使用以下指令手動新增廣播位址:
# 新增廣播位址 sudo ip address add broadcast 192.168.0.255 dev eth0
另一種更常見的設定方式是在指定 IP 位址與網路遮罩時,將廣播位址指定為加號(+
),這樣可以讓 ip
指令自動依據 IP 位址與網路遮罩來計算廣播位址:
# 新增 IP 位址(自動新增廣播位址) sudo ip address add 192.168.0.1/255.255.255.0 broadcast + dev eth0
若要重設廣播位址,可以將廣播位址設定為減號(-
)。
若要刪除網路介面上的 IP 位址,可以使用 ip address del
指令:
# 刪除 eth0 網路介面上指定 IP 位址 sudo ip address del 192.168.0.1/255.255.255.0 dev eth0 # 刪除 eth0 網路介面上指定 IP 位址(簡短寫法) sudo ip addr del 192.168.0.1/24 dev eth0
若要一次刪除指定網路介面上的所有 IP 位址,可以使用 ip address flush
指令:
# 刪除 eth0 網路介面上所有的 IP 位址
sudo ip address flush dev eth0
若要啟用或停用指定的網路介面,可以使用 ip link set
指令:
# 啟用 eth0 網路介面 sudo ip link set dev eth0 up # 停用 eth0 網路介面 sudo ip link set dev eth0 down
若要查詢目前系統上的 ARP 快取資訊,可以使用 ip neigh show
指令:
# 查詢 ARP 快取 ip neigh show # 查詢 ARP 快取(簡短寫法) ip n show # 查詢 ARP 快取(簡短寫法) ip n
172.20.10.1 dev wlan0 lladdr 5e:87:30:98:db:64 REACHABLE 2001:b400:e7d5:6d49:d18c:f25e:ed50:373a dev wlan0 lladdr 5e:87:30:98:db:64 router STALE fe80::5c87:30ff:fe98:db64 dev wlan0 lladdr 5e:87:30:98:db:64 router REACHABLE
若要新增 ARP 項目,可以使用 ip neigh add
指令:
# 新增 ARP 項目 sudo ip neigh add 192.168.0.5 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
這裡的 nud permanent
參數是將此 ARP 項目的狀態設定為 permanent
(永久有效),關於其他的 ARP 項目狀態說明,可以參考 ip-neighbour(8)
線上手冊。
若要修改 ARP 項目,則可使用 ip neigh chg
指令:
# 修改 ARP 項目狀態 sudo ip neigh chg 192.168.0.5 dev eth0 nud reachable
若要刪除 ARP 項目,則可使用 ip neigh del
指令:
# 刪除 ARP 項目 sudo ip neigh del 192.168.0.5 dev eth0
若要將 ARP 表整個清空,可以使用 ip neigh flush
指令:
# 刪除 eth0 網路介面上的所有 ARP 項目
sudo ip neigh flush dev eth0
若要查詢目前系統上的路由表(routing table),可以使用 ip route list
指令:
# 查詢路由表 ip route list # 查詢路由表(簡短寫法) ip route # 查詢路由表(簡短寫法) ip r
若要查詢指定網段的路由設定,可以在指令後方加上要查詢的網段:
# 查詢指定網段的路由 ip route list 192.168.0.0/24 # 查詢指定網段的路由(簡短寫法) ip r list 192.168.0.0/24
若要在路由表中新增陸由設定,可以使用 ip route add
指令,例如將 eth0
網路介面上的 192.168.0.254
設定為預設閘道:
# 新增 eth0 網路介面上的預設閘道 sudo ip route add default via 192.168.0.254 dev eth0
若要刪除路由表中的路由設定,可以使用 ip route delete
指令,例如刪除預設閘道設定:
# 刪除預設閘道設定
sudo ip route delete default
網路卡的 MAC 位址在 ip address show
指令的輸出中就會顯示,若只要單純查詢 MAC 位址,可以使用 ip link show
指令:
# 查詢網路介面 MAC 位址
ip link show
如果需要更改網路卡的 MAC 位址,可以使用 ip link show
指令,先將網路介面停用,待修改完 MAC 位址之後,再重新啟用網路介面:
# 啟用 eth0 網路介面 sudo ip link set dev eth0 up # 更改網路介面 MAC 卡號 sudo ip link set dev eth0 address 00:11:22:33:44:55 # 停用 eth0 網路介面 sudo ip link set dev eth0 down
如果希望 ip
指令輸出彩色的訊息,方便閱讀,可以加上 -c
參數,例如:
# 輸出彩色的訊息 ip -c address show
加上彩色的輸出畫面繪像這樣:
如果希望 ip
指令可以自動輸出彩色的訊息,可以在 .bashrc
的設定中新增一條 alias:
# 自動讓 ip 指令輸出彩色的訊息 alias ip='ip -c'