我怎样才能让这些静态 IPv4 路由工作?

网络工程 路由 ipv4 linux
2021-07-22 23:47:59

我对 linux 网络非常陌生,正在尝试为测试台上的某些 VM 设置以下拓扑设置。(请注意,为了我的测试目的,我必须完全按照这种方式设置 VM。我不能欺骗并将它们放在交换机上。它们都需要在单独的网络上)。

Node1     Node2     Node3     Node4
eth[x]<-->eth[x]    eth[x]<-->eth[x]
          eth[y]<-->eth[y]

我目前正试图让 Node4 通过 Node3 与 Node2 通信,但失败了。有人能告诉我是不是我做错了以及如何纠正它?

节点1的IP:

eth2 - 10.1.3.2/24

Node2 的 IP

eth3 - 10.1.1.2/24
eth4 - 10.1.3.3/24

Node3的IP

eth1 - 10.1.2.2/24
eth3 - 10.1.1.3/24

Node4的IP

eth4 - 10.1.2.3/24

(Routes, from "ip route") Node1的路由:

10.1.3.0/24 dev eth2  proto kernel  scope link  src 10.1.3.2

Node2的路由:

10.1.1.0/24 dev eth3  proto kernel  scope link  src 10.1.1.2 
10.1.3.0/24 dev eth4  proto kernel  scope link  src 10.1.3.3 

添加via后,Node3的路由:

10.1.1.0/24 dev eth3  scope link  src 10.1.1.3 
10.1.2.0/24 dev eth1  scope link  src 10.1.2.2 
10.1.3.0/24 via 10.1.1.2 dev eth3

Node4的路由:

10.1.2.0/24 dev eth4  proto kernel  scope link  src 10.1.2.3 

通过这种设置,Node3 可以 ping 到 Node2 在 10.1.3.3 的地址,但是 Node4 无法 ping 到这个地址。我需要做什么才能使 Node4 能够 ping 10.1.3.3?另外,我怎样才能让 Node4 能够一直与 Node1 通信?

2个回答

第一步,在 node2 和 node3 上启用IP 转发(否则节点将是“主机”而不是“路由器”)

所有节点都需要知道什么不是直接附加的

节点 1

ip route add 10.1.1.0/24 via 10.1.3.3
ip route add 10.1.2.0/24 via 10.1.3.3

节点2

ip route add 10.1.2.0/24 via 10.1.1.3

节点3

ip route add 10.1.3.0/24 via 10.1.1.2

节点4

ip route add 10.1.3.0/24 via 10.1.2.2
ip route add 10.1.1.0/24 via 10.1.2.2

(如果所有内容都在一张图片中,这将更容易查看。)

除了它自己的前缀之外,Node4 没有其他前缀的路由。Node4 如何知道向何处发送 Node210.1.3.3地址的流量

路由协议将让路由器告诉每个路由器他们知道的路由,以便每个路由器知道在特定方向上发送前缀的流量。您可以使用静态路由执行此操作,但它不可扩展或动态。

终端节点应该有一个0.0.0.0/0指向它们单一接口的默认路由如果它们有多个接口,这就会分崩离析。两个中间节点需要路由到它们没有直接联系的前缀,这不应该使用默认路由来完成。

想象一个有许多路由器的网络,您正试图跟上这种情况。您可以看到创建路由协议的原因。静态路由有它的用途,但尝试使用它来完全运行网络是发疯的秘诀。