在 Linux 中如何从命令行查找默认网关的 IP 地址
2022-10-20 18:44:46来源:Linux中国
Linux 下查找网关或路由器 IP 地址的 5 种方法。
网关是一个节点或一个路由器,当连接到同一路由器时,它允许两个或多个 IP 地址不同的主机相互通信。如果没有网关,它们将无法相互通信。换句话说,网关充当接入点,将网络数据从本地网络传输到远程网络。在本指南中,我们将看到在 Linux 和 Unix 中从命令行找到默认网关的所有可能方法。
(资料图片)
在 Linux 中查找默认网关Linux 中有各种各样的命令行工具可用于查看网关 IP 地址。最常用的工具是:ip
、ss
和netcat
。我们将通过示例了解如何使用每种工具查看默认网关。
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
使用 ip 命令列出默认网关
你也可以使用grep命令配合ip route
对默认网关进行过滤。
使用ip route
和grep
查找默认网关 IP 地址,执行命令:
$ ip route | grep defaultdefault via 192.168.1.101 dev eth0 proto static metric 100
在最新的 Linux 发行版中,ip route
是查找默认网关 IP 地址的推荐命令。然而,你们中的一些人可能仍然在使用传统的工具,如route
和netstat
。旧习难改,对吧?下面的部分将介绍如何在 Linux 中使用route
和netstat
命令确定网关。
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 toolsRepo : @SystemMatched from:Filename : /usr/sbin/routenet-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking toolsRepo : baseosMatched from:Filename : /usr/sbin/route
如你所见,net-tools
包提供了route
命令。所以,让我们使用以下命令来安装它:
$ sudo dnf install net-tools
现在,运行带有-n
参数的route
命令来显示 Linux 系统中的网关或路由器 IP 地址:
$ route -n
示例输出:
Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.1.101 0.0.0.0 UG 100 0 0 eth0172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0192.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”(网关)。
netstat
会输出 Linux 网络子系统的信息。使用netstat
工具,我们可以在 Linux 和 Unix 系统中打印网络连接、路由表、接口统计信息、伪装连接和组播成员关系。
netstat
是net-tools
包的一部分,所以确保你已经在 Linux 系统中安装了它。使用以下命令在基于 RHEL 的系统中安装它:
$ sudo dnf install net-tools
使用 netstat 命令打印默认网关 IP 地址:
$ netstat -rn
示例输出:
Kernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface0.0.0.0 192.168.1.101 0.0.0.0 UG 0 0 0 eth0172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
使用 netstat 命令查看网关 IP 地址
netstat
命令与route
命令的输出信息相同。如上输出可知,网关的 IP 地址为192.168.1.191
,UG
表示网关连接的网卡是有效的,G
表示网关。
请注意netstat
也已弃用,建议使用ss
命令代替netstat
。
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 local127.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 localfe80::d085:cff:fec7:c1c3 local kernel eth0 local
使用 routel 命令打印默认网关或路由器 IP 地址
只打印默认网关,和grep
命令配合,如下所示:
$ routel | grep default default 192.168.1.101 static eth05、从以太网配置文件中查找网关
如果你在Linux 或 Unix 中配置了静态 IP 地址,你可以通过查看网络配置文件查看默认网关或路由器 IP 地址。
在基于 RPM 的系统上,如 Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 等,网络接口卡配置存储在/etc/sysconfig/network-scripts/
目录下。
查找网卡的名称:
# ip link show
示例输出:
1: lo: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:002: eth0@if5: 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=eth0ONBOOT=yesUUID=eb6b6a7c-37f5-11ed-a59a-a0e70bdf3dfbBOOTPROTO=noneIPADDR=192.168.1.20NETMASK=255.255.255.0GATEWAY=192.168.1.101DNS1=8.8.8.8
如你所见,网关 IP 为192.168.1.101
。
在 Debian、Ubuntu 及其衍生版中,所有的网络配置文件都存储在/etc/network
目录下。
$ cat /etc/network/interfaces
示例输出:
auto ens18iface 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 地址的示例命令。希望它对你有所帮助。