我家里的设置相当标准,由单个子网 192.168.240.0/24 组成,我的 DSL 路由器位于 192.168.240.1。其他设备占用 192.168.240.64 及以上地址。
但是我现在在 192.168.240.16 上添加了一个 Linux 服务器,它有两个 NIC。一个显然位于 192.168.240.0/24,另一个位于 192.168.241.0/24(192.168.241.16)。
目前,192.168.241.0/24 上没有其他内容,但我打算在不久的将来将我的 DSL 调制解调器移到这个子网上。
我正在尝试在 Linux 机器上配置两个接口之间的路由,我相信我已经成功了。但在移动 DSL 调制解调器之前,我想确保路由正常工作。
在执行任何操作之前,我使用 检查了 Mac 上的路由表netstat -r
,其(减去不相关的条目)显示如下:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.240.1 UGSc 4665 0 en0
192.168.240 link#4 UCS 8 0 en0
因此我在 Mac 上配置了静态路由,如下所示:
route add -net 192.168.241.0/24 192.168.240.16
然后Mac上的路由表显示:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.240.1 UGSc 4665 0 en0
192.168.240 link#4 UCS 8 0 en0
192.168.241 192.168.240.16 UGSc 0 1 en0
当我尝试从 Mac 上 ping Linux 机器上的第二个接口时,没有收到任何回复。再次检查路由表时,令我惊讶的是,出现了一行额外的信息。
Destination Gateway Flags Refs Use Netif Expire
default 192.168.240.1 UGSc 4665 0 en0
192.168.240 link#4 UCS 8 0 en0
192.168.241 192.168.240.16 UGSc 0 1 en0
192.168.241.16 192.168.240.1 UGHDI 0 17 en0
为什么会出现最后一行?为什么它不遵循我之前创建的路由?我需要做什么才能强制它使用我创建的静态路由?
答案1
我认为 UGHDI 中的 D 表示动态。Linux 机器告诉 Mac 它不知道到该子网的路由,并告诉它最好将该数据路由到 DSL 路由器(因为这是 Linux 机器的默认网关,因此假定知道如何到处路由)。
这意味着 Linux 机器没有在其 NIC 之间路由数据。我会检查它的配置。
答案2
看起来您不仅需要添加新的子网,还需要添加新的默认路由,这似乎是您做错的。
有趣的是,我经常在 Apple 设备上遇到基本名称解析和网络问题(ssh hostname
失败并显示“无法解析主机主机名”但nslookup hostname
返回 IP),所以这一点也不让我感到惊讶。