在 Linux 中如何從命令行查找默認網關的 IP 地址
Linux 下查找網關或路由器 IP 地址的 5 種方法。
網關 是一個節點或一個路由器,當連接到同一路由器時,它允許兩個或多個 IP 地址不同的主機相互通信。如果沒有網關,它們將無法相互通信。換句話說,網關充當接入點,將網路數據從本地網路傳輸到遠程網路。在本指南中,我們將看到在 Linux 和 Unix 中從命令行找到默認網關的所有可能方法。
在 Linux 中查找默認網關
Linux 中有各種各樣的命令行工具可用於查看網關 IP 地址。最常用的工具是:ip
、ss
和 netcat
。我們將通過示例了解如何使用每種工具查看默認網關。
1、使用 ip 命令查找默認網關
ip
命令用於顯示和操作 Linux 中的路由、網路設備、介面和隧道。
要查找默認網關或路由器 IP 地址,只需運行:
$ ip route
或者:
$ ip r
或者:
$ ip route show
示例輸出:
default via 192.168.1.101 dev eth0 proto static metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20 metric 100
你從輸出中看到了 default via 192.168.1.101
這一行嗎?它就是默認網關。我的默認網關是 192.168.1.101
。
你可以使用 -4
參數只顯示 IPv4 網關
:
$ ip -4 route
或者,使用 -6
參數只顯示 IPv6 網關:
$ ip -6 route
如你所見,IP 地址和子網詳細信息也一併顯示了。如果你想只顯示默認網關,排除所有其他細節,可以使用 ip route
搭配 awk
命令,如下所示。
使用 ip route
和 awk
命令列印網關地址,執行命令:
$ ip route | awk '/^default/{print $3}'
(LCTT 譯註:wsl1 上無輸出結果,正常 Linux 發行版無問題)
或者:
$ ip route show default | awk '{print $3}'
這將只列出網關 IP:
示例輸出:
192.168.1.101
你也可以使用 grep 命令配合 ip route
對默認網關進行過濾。
使用 ip route
和 grep
查找默認網關 IP 地址,執行命令:
$ ip route | grep default
default via 192.168.1.101 dev eth0 proto static metric 100
在最新的 Linux 發行版中,ip route
是查找默認網關 IP 地址的推薦命令。然而,你們中的一些人可能仍然在使用傳統的工具,如 route
和 netstat
。舊習難改,對吧?下面的部分將介紹如何在 Linux 中使用 route
和 netstat
命令確定網關。
2、使用 route 命令顯示默認網關 IP 地址
route
命令用於在較老的 Linux 發行版中顯示和操作路由表,如 RHEL 6、CentOS 6 等。
如果你正在使用較老的 Linux 發行版,你可以使用 route
命令來顯示默認網關。
請注意,在最新的 Linux 發行版中,route
工具已被棄用,ip route
命令取而代之。如果你因為某些原因仍然想使用 route
,你需要安裝它。
首先,我們需要檢查哪個包提供了 route
命令。為此,在基於 RHEL 的系統上運行以下命令:
$ dnf provides route
示例輸出:
net-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking tools
Repo : @System
Matched from:
Filename : /usr/sbin/route
net-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking tools
Repo : baseos
Matched from:
Filename : /usr/sbin/route
如你所見,net-tools
包提供了 route
命令。所以,讓我們使用以下命令來安裝它:
$ sudo dnf install net-tools
現在,運行帶有 -n
參數的 route
命令來顯示 Linux 系統中的網關或路由器 IP 地址:
$ route -n
示例輸出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.101 0.0.0.0 UG 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
如你所見,網關 IP 地址是 192.168.1.101。你還將在 Flags 下面看到兩個字母 UG
。字母 U
代表介面是 「Up」(在運行),G
表示 「Gateway」(網關)。
3、使用 netstat 命令查看網關 IP 地址
netstat
會輸出 Linux 網路子系統的信息。使用 netstat
工具,我們可以在 Linux 和 Unix 系統中列印網路連接、路由表、介面統計信息、偽裝連接和組播成員關係。
netstat
是 net-tools
包的一部分,所以確保你已經在 Linux 系統中安裝了它。使用以下命令在基於 RHEL 的系統中安裝它:
$ sudo dnf install net-tools
使用 netstat 命令列印默認網關 IP 地址:
$ netstat -rn
示例輸出:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.101 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
netstat
命令與 route
命令的輸出信息相同。如上輸出可知,網關的 IP 地址為 192.168.1.191
,UG
表示網關連接的網卡是有效的,G
表示網關。
請注意 netstat
也已棄用,建議使用 ss
命令代替 netstat
。
4、使用 routel 命令列印默認網關或路由器 IP 地址
routel
是一個腳本,它以一種漂亮格式的輸出路由。routel
腳本的輸出讓一些人認為比 ip route
列表更直觀。
routel
腳本也是 net-tools
包的一部分。
列印默認網關或路由器 IP 地址,不帶任何參數運行 routel
腳本,如下所示:
$ routel
示例輸出:
target gateway source proto scope dev tbl
default 192.168.1.101 static eth0
172.17.0.0/ 16 172.17.0.1 kernel linkdocker0
192.168.1.0/ 24 192.168.1.20 kernel link eth0
127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
172.17.0.1 local 172.17.0.1 kernel hostdocker0 local
172.17.255.255 broadcast 172.17.0.1 kernel linkdocker0 local
192.168.1.20 local 192.168.1.20 kernel host eth0 local
192.168.1.255 broadcast 192.168.1.20 kernel link eth0 local
::1 kernel lo
::/ 96 unreachable lo
::ffff:0.0.0.0/ 96 unreachable lo
2002:a00::/ 24 unreachable lo
2002:7f00::/ 24 unreachable lo
2002:a9fe::/ 32 unreachable lo
2002:ac10::/ 28 unreachable lo
2002:c0a8::/ 32 unreachable lo
2002:e000::/ 19 unreachable lo
3ffe:ffff::/ 32 unreachable lo
fe80::/ 64 kernel eth0
::1 local kernel lo local
fe80::d085:cff:fec7:c1c3 local kernel eth0 local
只列印默認網關,和 grep
命令配合,如下所示:
$ routel | grep default
default 192.168.1.101 static eth0
5、從乙太網配置文件中查找網關
如果你在 Linux 或 Unix 中配置了靜態 IP 地址,你可以通過查看網路配置文件查看默認網關或路由器 IP 地址。
在基於 RPM 的系統上,如 Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 等,網路介面卡配置存儲在 /etc/sysconfig/network-scripts/
目錄下。
查找網卡的名稱:
# ip link show
示例輸出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether d2:85:0c:c7:c1:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
網卡名為 eth0
。所以讓我們打開這個網卡文件的網卡配置:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
示例輸出:
DEVICE=eth0
ONBOOT=yes
UUID=eb6b6a7c-37f5-11ed-a59a-a0e70bdf3dfb
BOOTPROTO=none
IPADDR=192.168.1.20
NETMASK=255.255.255.0
GATEWAY=192.168.1.101
DNS1=8.8.8.8
如你所見,網關 IP 為 192.168.1.101
。
在 Debian、Ubuntu 及其衍生版中,所有的網路配置文件都存儲在 /etc/network
目錄下。
$ cat /etc/network/interfaces
示例輸出:
auto ens18
iface ens18 inet static
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.101
dns-nameservers 8.8.8.8
請注意,此方法僅在手動配置 IP 地址時有效。對於啟用 DHCP 的網路,需要按照前面的 4 種方法操作。
總結
在本指南中,我們列出了在 Linux 和 Unix 系統中找到默認網關的 5 種不同方法,我們還在每種方法中包含了顯示網關/路由器 IP 地址的示例命令。希望它對你有所幫助。
via: https://ostechnix.com/find-default-gateway-linux/
作者:sk 選題:lkxed 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive