Linux中國

在 Linux 中如何從命令行查找默認網關的 IP 地址

Linux 下查找網關或路由器 IP 地址的 5 種方法。

網關 是一個節點或一個路由器,當連接到同一路由器時,它允許兩個或多個 IP 地址不同的主機相互通信。如果沒有網關,它們將無法相互通信。換句話說,網關充當接入點,將網路數據從本地網路傳輸到遠程網路。在本指南中,我們將看到在 Linux 和 Unix 中從命令行找到默認網關的所有可能方法。

在 Linux 中查找默認網關

Linux 中有各種各樣的命令行工具可用於查看網關 IP 地址。最常用的工具是:ipssnetcat。我們將通過示例了解如何使用每種工具查看默認網關。

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 routeawk 命令列印網關地址,執行命令:

$ ip route | awk '/^default/{print $3}'

(LCTT 譯註:wsl1 上無輸出結果,正常 Linux 發行版無問題)

或者:

$ ip route show default | awk '{print $3}'

這將只列出網關 IP:

示例輸出:

192.168.1.101

使用 ip 命令列出默認網關

你也可以使用 grep 命令配合 ip route 對默認網關進行過濾。

使用 ip routegrep 查找默認網關 IP 地址,執行命令:

$ ip route | grep default
default via 192.168.1.101 dev eth0 proto static metric 100

在最新的 Linux 發行版中,ip route 是查找默認網關 IP 地址的推薦命令。然而,你們中的一些人可能仍然在使用傳統的工具,如 routenetstat。舊習難改,對吧?下面的部分將介紹如何在 Linux 中使用 routenetstat 命令確定網關。

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

使用 route 命令顯示默認網關 IP 地址

如你所見,網關 IP 地址是 192.168.1.101。你還將在 Flags 下面看到兩個字母 UG。字母 U 代表介面是 「Up」(在運行),G 表示 「Gateway」(網關)。

3、使用 netstat 命令查看網關 IP 地址

netstat 會輸出 Linux 網路子系統的信息。使用 netstat 工具,我們可以在 Linux 和 Unix 系統中列印網路連接、路由表、介面統計信息、偽裝連接和組播成員關係。

netstatnet-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 命令查看網關 IP 地址

netstat 命令與 route 命令的輸出信息相同。如上輸出可知,網關的 IP 地址為 192.168.1.191UG 表示網關連接的網卡是有效的,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

使用 routel 命令列印默認網關或路由器 IP 地址

只列印默認網關,和 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國