为什么我无法添加默认路由?

为什么我无法添加默认路由?

我在私有地址空间上有一台 CentOS 7 机器,IP 是 10.10.0.2。我想通过具有公共 IP 的网关访问互联网连接到同一个交换机,我们称之为 50.50.50.50。我曾经让它在某个时候工作过,但现在已经损坏了它并且似乎无法修复它。我还安装了 net-tools,因为我发现更容易理解它的格式。

[root@node002 ~]# ip route show
10.0.0.0/8 dev ens785 proto kernel scope link src 10.10.0.2 metric 100 
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785

那么如何为其他所有内容添加一条以 50.50.50.50 作为网关的路由呢?

我已经尝试了一些方法,[root@node002 ~]# ip route add 0.0.0.0/0 dev ens785但根本没有向路由表添加任何内容。也没有错误消息。我还尝试向主机添加一条路由,如下所示ip route add 50.50.50.50 dev ens785,这在路由表中增加了一条额外的行。

[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

我还尝试了其他变体,例如[root@node002 ~]# ip route add 0.0.0.0/0 via 50.50.50.50但这删除了我到主机的路由,因为这是运行后立即看到的样子:

[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785

我也尝试过:

[root@node002 ~]# ip route add default via 50.50.50.50/0
Error: ??? address is expected rather than "50.50.50.50/0".

乃至:

[root@node002 ~]# ip route add default dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

每台其他计算机都有一条默认路由,其中​​ 0.0.0.0 作为目的地和网关。例如,就像我的桌面一样,这是有道理的 - 同一网络上的流量会在没有网关的情况下进入本地网络,而到其他任何地方的流量都会通过路由器。

root@desktop ~ $ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         100.100.100.1   0.0.0.0         UG    100    0        0 eth0
100.100.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

我不太清楚我是如何破坏这个或如何修复它的。任何指点都非常感谢!

编辑

首先,我在同一接口上给网关机器一个私有地址。现在是 10.1.1.1,我思考表示子网掩码为 255.0.0.0 表示这是同一网络。该地址可 ping 通。但我也无法将其添加为默认值。

[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

我可以临时向节点添加一个公共IP,然后我可以添加一个默认网关:

[root@node002 ~]# ip a add 50.50.50.51 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785
[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    100    0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785
50.50.50.51     0.0.0.0         255.255.255.255 UH    100    0        0 ens785

然后我可以删除公共 IP 地址,但仍保留默认路由:

[root@node002 ~]# ip a del 50.50.50.51/32 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    100    0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

那么,如果我可以删除公共 IP 并保留网关,为什么我必须添加公共 IP 才能添加网关呢?

编辑2 我仍然无法使用 ip 命令添加默认路由,除非我简单地添加一个公共 IP。

更令人困惑的是,我可以通过绕过 NetworkManager 并使用 ifcfg 文件(并交换到静态分配而不是 DHCP)来实现目标。

[root@node002 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens785 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NM_CONTROLLED=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens785
DEVICE=ens785
ONBOOT=yes
MTU=9000
HWADDR=00:11:22:33:44:55
IPADDR=10.10.0.2
NETMASK=255.0.0.0
GATEWAY=10.1.1.1
DNS1=10.1.1.1
[root@node002 ~]# systemctl stop NetworkManager 
[root@node002 ~]# ifdown ens785 && ifup ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 
Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 ens785
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 ens785

答案1

首先,您无法通过 IP 添加默认网关,并且您的接口没有具有与网关相同范围的 IP。例如,要添加默认网关,50.50.50.50/24您必须拥有同一范围内的 IP 50.50.50.100/24

如果你只有一个接口,并且它有私有IP地址,并且你需要访问互联网,那么你需要一台路由器,这样他就可以从本地IP到公共IP进行NAT。

您只有交换机,因此要解决此问题,您可以采取一种技巧,将子(别名)接口添加到具有私有 IP 和公共 IP 范围内的 IP 的同一接口,然后50.50.50.100/24像这样添加默认网关ip route add default via 50.50.50.50

答案2

路由始终在第 3 层 (IP) 完成。仅有一条指向 的默认路由是不够的50.50.50.50,您的路由表还必须包含一个显示如何到达的条目主持人。对于IP层来说,某些随机地址是不可达的,即使它在同一条链路上; IP层不知道这一点。只有当 IP 层根据路由表确定 IP 数据包应前往何处时,才准备将其移交给第 2 层。

请注意,您的主机并不一定需要拥有同一范围内的 IP(例如50.50.50.51);重要的是你有到子网的路由。但是,添加辅助地址 ( ip addr add 50.50.50.51/24 dev ens785) 会自动添加到 的路由50.50.50.0/24

话虽如此,我认为执行此操作的正确方法就是您尝试执行的操作:向范围内的路由器添加辅助地址10.0.0.0/8,并添加到该地址的默认路由(10.1.1.1在您的示例中)。我不知道为什么添加路线对你不起作用。您收到任何错误消息吗ip route add default via 10.1.1.1

如果你想从网络上的主机访问互联网10.0.0.0/8,路由器需要在私有地址和公共地址之间执行 NAT,就像@WissamRoujoulah 上面所说的那样。

答案3

我认为这是自动网络配置管理器中的一个错误。如果您通过输入以下命令关闭配置管理器:

NM_CONTROL=no

在您ifcfg-ens785重新启动网络后,它应该让您手动添加默认路由。

答案4

您可以使用

ip route add default via 50.50.50.50 dev ens785

或者

ip route add default via 50.50.50.50 dev ens785 onlink

如果本地未配置网络 50.50.50.0/24

顺便说一句,50.50.50.50/0 应该是 0/0,这是默认的别名?!

ip r a 0/0 via 50.50.50.50/32 ..

是相同的

ip r a default via 50.50.50.50/32 ..

除此之外,零比特网络没有任何意义。如果您仅指该 IP(单个主机),则可以省略 /32

华泰

相关内容