网关 是一个节点或一个路由器,当连接到同一路由器时,它允许两个或多个 IP 地址不同的主机相互通信。如果没有网关,它们将无法相互通信。换句话说,网关充当接入点,将网络数据从本地网络传输到远程网络。在本指南中,我们将看到在 Linux 和 Unix 中从命令行找到默认网关的所有可能方法。
在 Linux 中查找默认网关
Linux 中有各种各样的命令行工具可用于查看网关 IP 地址。最常用的工具是:ip、ss 和 netcat。我们将通过示例了解如何使用每种工具查看默认网关。
1、使用 ip 命令查找默认网关
ip 命令用于显示和操作 Linux 中的路由、网络设备、接口和隧道。
要查找默认网关或路由器 IP 地址,只需运行:
1 2
$ ip route
或者:
1 2
$ ip r
或者:
1 2
$ ip route show
示例输出:
1 2 3 4
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 网关:
1 2
$ ip -4 route
或者,使用 -6 参数只显示 IPv6 网关:
1 2
$ ip -6 route
如你所见,IP 地址和子网详细信息也一并显示了。如果你想只显示默认网关,排除所有其他细节,可以使用 ip route 搭配 awk 命令,如下所示。
现在,运行带有 -n 参数的 route 命令来显示 Linux 系统中的网关或路由器 IP 地址:
1 2
$ route -n
示例输出:
1 2 3 4 5 6
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0192.168.1.1010.0.0.0 UG 10000 eth0 172.17.0.00.0.0.0255.255.0.0 U 000 docker0 192.168.1.00.0.0.0255.255.255.0 U 10000 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 的系统中安装它:
1 2
$ sudo dnf install net-tools
使用 netstat 命令打印默认网关 IP 地址:
1 2
$ netstat -rn
示例输出:
1 2 3 4 5 6
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0192.168.1.1010.0.0.0 UG 000 eth0 172.17.0.00.0.0.0255.255.0.0 U 000 docker0 192.168.1.00.0.0.0255.255.255.0 U 000 eth0
netstat 命令与 route 命令的输出信息相同。如上输出可知,网关的 IP 地址为 192.168.1.191,UG 表示网关连接的网卡是有效的,G 表示网关。
请注意 netstat 也已弃用,建议使用 ss 命令代替 netstat。
4、使用 routel 命令打印默认网关或路由器 IP 地址
routel 是一个脚本,它以一种漂亮格式的输出路由。routel 脚本的输出让一些人认为比 ip route 列表更直观。
target gateway source proto scope dev tbl default 192.168.1.101 static eth0 172.17.0.0/ 16172.17.0.1 kernel linkdocker0 192.168.1.0/ 24192.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