![客户端路由](https://linux22.com/image/1173031/%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%B7%AF%E7%94%B1.png)
我正在尝试使用 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
命令仅显示我的default
和link-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
,否则您必须在设备上有一个逻辑下一跳。以下是网络“设计”的示例:
- 我的计算机有一个通过 DHCP 分配的 IPv4 地址 10.128.129.1(掩码为 255.255.255.0),并通过 VLAN 10 上的 10.128.129.254 进行路由;
- 我的思科路由器在 VLAN 10(10.128.129.254)和 VLAN 11(10.128.130.254)中有一个逻辑接口;
- 我的服务器的 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 上的下一跳位于同一逻辑网络中。