![当eth0不是默认网关时如何确定它的网关地址?](https://linux22.com/image/52920/%E5%BD%93eth0%E4%B8%8D%E6%98%AF%E9%BB%98%E8%AE%A4%E7%BD%91%E5%85%B3%E6%97%B6%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E5%AE%83%E7%9A%84%E7%BD%91%E5%85%B3%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
在我的系统中,我有 eth0(可能已连接,也可能未连接)和 ppp0 上的调制解调器(始终可能处于打开或关闭状态)。在两个接口均已启动且ppp0为默认路由的情况下,我想找到一种方法来确定eth0的网关IP实际地址。我尝试了“netstat -rn”,但在此配置中输出是:
内核IP路由表 目标网关 Genmask 标志 MSS 窗口 irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 呃 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 洛 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
那么如何确定eth0的网关地址呢?在上述情况下,实际网关地址是 192.168.98.1。
答案1
您的错误是您将 netstat 输出上的信息与接口而不是目的地相关联。目标地址可以有关联的网关。配置网络时,您将接口和网关与目标地址集相关联 - 因此您需要问的问题是“192.168.98/24 中的目标网关是什么?”我敢打赌不应该有一个,该范围内的设备要么桥接要么直接连接到该以太网。
请注意,您的默认路由是 via ppp0
(最后一行是通配符路由,掩码全为零,因此实际上没有比较任何位,因此这些地址的数据包将通过 发送ppp0
)。因此,任何目的地的数据包不在通配符掩码中127.xx.xx.xx
或192.168.98.xx
最终将与通配符掩码匹配并通过 发送ppp0
。现在,因为它是一种点对点协议,所以在该接口上发送的每个数据包都会发送到该链路上唯一可直接寻址的设备,即链路另一端的设备。无需为其指定网关,因为每一个通过该接口发送的数据包是通过该设备发送的,无论其 Internet 目的地是否是该设备。
现在:如果您有一台eth0
可以访问的路由器,那么该路由器几乎肯定有一个 IP 地址在 192.168.98.xx 范围内,至少有可能不是 192.168.98.1,并且当该路由器通电并且实际上连接到互联网时,您希望默认路由,即所有未直接连接到本地网络的路由default via 192.168.98.1
您可能正在使用较新的(这是一个相对术语,它已经存在很长时间了)ip
命令,尝试一下ip route
,如果这给您一些输出尝试ip route help
。否则,请尝试route help
。
所以,你的eth0
界面根本不有网关地址。可能有另一个设备或多个连接到该以太网的设备愿意充当网关。您说您的网络有一个可以响应(纯传统)的网络.1
。没有法律规定它必须拥有该地址,也没有法律规定它必须宣传其存在。有一些常见的方法,其中最常见的是运行路由软件的盒子也运行 dhcp 服务器,并以这种方式告诉任何使用 dhcp 的人关于自己的信息。 MolbOrg 的回答给出了非常典型的设置风格,但是任何人此时可以建议的任何内容都或多或少可能与您的特定网络相匹配。
答案2
假设eth0
是 DHCP 客户端接口。
一种选择是检查 DHCP 客户端租用文件dhcpd.租约
地点和名称取决于系统;在某些 Fedora 系统上,下面的文件/var/lib/dhclient/
是租用文件,其中有趣的字符串如下所示:
option routers 192.168.1.1;
另一个选项,对我在 funtoo 盒子上有用:dhcpcd -U eth0
打印一个漂亮的表格,准备在脚本中获取源代码
broadcast_address=192.168.1.255
dhcp_lease_time=86400
dhcp_message_type=5
dhcp_server_identifier=192.168.1.1
domain_name_servers='192.168.1.1 192.168.1.101'
ip_address=192.168.1.101
network_number=192.168.1.0
routers=192.168.1.1
subnet_cidr=24
subnet_mask=255.255.255.0
根据谷歌和手册页,还有其他选项dhcping
,例如,,但它们在我的盒子上失败,但可能对你有用。dhclient -n
答案3
Linux:
您需要打开一个终端。根据您的 Linux 发行版,它可以位于屏幕顶部或底部的菜单项中。在此示例中,我们将使用 Fedora。单击应用程序 > 系统工具 > 终端。
当终端打开时,键入以下命令:ip route | grep default
其输出应如下所示:
joe$ ip route | grep default
default via 192.168.1.1 dev eth0 proto static
在此示例中,192.168.1.1 再次是您的默认网关(路由器)IP 地址。
有关此主题的更多信息如何找到你的网关IP(linux/win/osx)。