客户端路由

客户端路由

我正在尝试使用 CLI 在我的 Ubuntu Desktop 16.04 机器上添加静态路由,但没有成功。我使用的是经典的 ip route 命令ip route add x.x.x.0/24 via y.y.y.y dev eno1:(隐藏了实际地址),然后我收到以下错误: RTNETLINK answers: Network is unreachable。我的机器将通过其默认网关访问 yyyy。从默认网关到 yyyy 的实际路由(将路由到 xxxx)已设置并正常运行。

收到的错误对我来说没问题,因为它实际上是可以到达的(我自己测试过),因为它一定是由网络组件(例如 FW)引起的错误错误。

我的问题是:有没有办法忽略该错误?此错误导致静态路由无法保存,我希望即使命令认为无法访问,也能保存它。我的route命令仅显示我的defaultlink-local由 dhcp 获取,还显示我的vmnet

我为什么要使用 CLI?

我知道 Ubuntu 16.04 应该使用/etc/network/interfaces,而 Ubuntu 18.04 及以上版本使用/etc/netplan,但我的/etc/network/interfaces文件绝对是空的(可能是因为 dhcp 方法)。

编辑:内容/etc/network/interfaces

auto lo
iface lo inet loopback

命令输出route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         z.z.z.254       0.0.0.0         UG    100    0      0   eno1
z.z.z.0         *               255.255.255.0   U     100    0      0   eno1
link-local      *               255.255.255.0   U     1000   0      0   eno1
g.g.g.0         *               255.255.255.0   U     0      0      0   vmnet1

命令输出ip route list

default via z.z.z.254 dev eno1 proto static metric 100
z.z.z.0/24 dev eno1  proto kernel  scope link  src z.z.z.101 metric 100
169.254.0.0/16 dev eno1  scope link  metric 1000
g.g.g.0/24 dev vmnet1 proto kernel  scope link  src z.z.z.1 

总的来说,我正在寻找一种方法来强制为机器设置一条路径,而无需创建虚拟接口并为该接口配置我的网络组件。

答案1

这个“答案”很可能会被互联网吞噬,因为它的措辞和其他东西,但是,我的假设您的问题是您正试图访问广播域之外的内容。

在您的最新评论中,您似乎正在尝试使用默认路由器进行外部路由 - 但我会在此处添加以下内容,我们会在进行过程中进行改进。


您的计算机只能路由第 2 层广播域。这意味着,您不能尝试在另一个逻辑网络上定义下一跳,路由器除外(忽略更高级的网络;这是一个 Ubuntu 论坛)。在“传统”私有网络上,您将从“/24”网络范围(有时表示为 192.168.0.0/24 或 255.255.255.0 CIDR)进行操作。

当您想要添加静态路由时,除非您有一个带有 或 的路由器RIP正在OSPF运行BGP,否则您必须在设备上有一个逻辑下一跳。以下是网络“设计”的示例:

  1. 我的计算机有一个通过 DHCP 分配的 IPv4 地址 10.128.129.1(掩码为 255.255.255.0),并通过 VLAN 10 上的 10.128.129.254 进行路由;
  2. 我的思科路由器在 VLAN 10(10.128.129.254)和 VLAN 11(10.128.130.254)中有一个逻辑接口;
  3. 我的服务器的 IP 地址为 10.128.130.1(VLAN 11),默认路由为 10.128.130.254;

在我的主机地址上,如果我没有学习内部路由,我的默认路由将通过 10.128.129.254 - 在它的ARP表中,应该有一个已知的地址来路由到服务器 - 这是第 3 层功能。

如果我的路由器没有学习路由,并且本身不是 VLAN 11 的网关地址,会发生什么情况?然后,我需要表示路由条目(我不会详细介绍BGP和其他技术)

客户端路由

对于我的 Linux 机器上的这种情况,我仍然需要知道在哪里可以联系 VLAN 11 - 10.128.130.0/24 - 所以我添加了一条静态路由:

$ sudo ip route add 10.128.130.0/24 via 10.128.129.254 dev eno2   

为什么这样做有效?因为在广播范围内,我的 PC10.128.129.254无需第 3 层功能即可到达。

例如,我无法添加以下内容:

$ sudo ip route add 10.128.130.0/24 via 10.128.130.254 dev eno2

因为路由器不在同一个逻辑子网中。

配置路由 - 路由器修改

好的,此时客户端正在使用路由器尝试路由到 10.128.130/24 - 所以现在路由器需要知道这是下一跳。取决于设备,取决于语法,以及您有哪些可用的解决方案;目前,我们只是认为您的路由器的下一跳是到逻辑 VLAN 中的路由器,并且一切正常。

为什么命令失败?

一些例子同一个问题在其他网站上也可以找到,并且还指出不在逻辑网络中。您可以尝试(如果这是多跨度)添加 IP 别名到达一个界面并从那里开始。

只需仔细检查您要路由的网络以及 PC 上的下一跳位于同一逻辑网络中

相关内容