为什么这些静态路由需要是双向的?

网络工程 路由 非对称路由
2021-07-12 07:52:15

我正在为一些虚拟机设置一个测试平台。这些路线需要是静态的,因为这是一个学术项目。(我知道手动执行此操作通常是一个坏主意。相信我,我有这样做的理由。)

我遇到了一个问题,除非进出的路由经过所有相同的主机,否则我在远端的主机无法相互 ping 通。有人可以帮忙解释为什么会这样吗?有什么方法可以设置它以便返回路线是分开的?例如,在下图中,我可以使从 n0 发出的 ping 通过 n1 -> n2 -> n4 -> n5 并在 n5 -> n4 -> n3 -> n1 -> n0 上返回吗?

这是我的网络。一切都是 10.1.yx 地址。链接显示为最后两个八位字节。

              n2
            /     \
           / 2.x   \6.x
   5.x    /         \     4.x
n0 ---- n1           n4 ----- n5
          \         /
           \ 3.x   /1.x
            \     /
              n3 

这是每个路由表,如果这样更清楚的话。全部取自“ip route”:

0

10.1.4.0/24 via 10.1.5.3 dev eth2 
10.1.5.0/24 dev eth2  proto kernel  scope link  src 10.1.5.2 
10.1.6.0/24 via 10.1.5.3 dev eth2 
10.1.1.0/24 via 10.1.5.3 dev eth2 
10.1.2.0/24 via 10.1.5.3 dev eth2 
10.1.3.0/24 via 10.1.5.3 dev eth2 

n1

10.1.4.0/24 via 10.1.3.3 dev eth3 
10.1.5.0/24 dev eth2  proto kernel  scope link  src 10.1.5.3 
10.1.6.0/24 via 10.1.2.3 dev eth4 
10.1.1.0/24 via 10.1.3.3 dev eth3 
10.1.2.0/24 dev eth4  proto kernel  scope link  src 10.1.2.2 
10.1.3.0/24 dev eth3  proto kernel  scope link  src 10.1.3.2

n2

10.1.4.0/24 via 10.1.6.3 dev eth2 
10.1.5.0/24 via 10.1.2.2 dev eth4 
10.1.6.0/24 dev eth2  proto kernel  scope link  src 10.1.6.2 
10.1.1.0/24 via 10.1.6.3 dev eth2 
10.1.2.0/24 dev eth4  proto kernel  scope link  src 10.1.2.3 
10.1.3.0/24 via 10.1.2.2 dev eth4 

n3

10.1.4.0/24 via 10.1.1.3 dev eth4 
10.1.5.0/24 via 10.1.3.2 dev eth3 
10.1.6.0/24 via 10.1.1.3 dev eth4 
10.1.1.0/24 dev eth4  proto kernel  scope link  src 10.1.1.2 
10.1.2.0/24 via 10.1.3.2 dev eth3 
10.1.3.0/24 dev eth3  proto kernel  scope link  src 10.1.3.3

n4

10.1.4.0/24 dev eth3  proto kernel  scope link  src 10.1.4.2 
10.1.5.0/24 via 10.1.6.2 dev eth2 
10.1.6.0/24 dev eth2  proto kernel  scope link  src 10.1.6.3 
10.1.1.0/24 dev eth4  proto kernel  scope link  src 10.1.1.3 
10.1.2.0/24 via 10.1.6.2 dev eth2 
10.1.3.0/24 via 10.1.1.2 dev eth4

n5

10.1.4.0/24 dev eth2  proto kernel  scope link  src 10.1.4.3 
10.1.5.0/24 via 10.1.4.2 dev eth2 
10.1.6.0/24 via 10.1.4.2 dev eth2 
10.1.2.0/24 via 10.1.4.2 dev eth2 
10.1.3.0/24 via 10.1.4.2 dev eth2
3个回答

您应该删除 Linux 路由器(n1 到 n4)上的反向路径过滤。 https://access.redhat.com/solutions/53031

我可以让 n0 的 ping 通过 n1 -> n2 -> n4 -> n5 并在 n5 -> n4 -> n3 -> n1 -> n0 上返回吗?

是的你可以。

根据您帖子中的信息,n0 的 IP 地址是 10.1.5.2。因此,要更改返回路径,您需要更改 n4 上 10.1.5.0 的路由。

目前它看起来像这样:

10.1.5.0/24 via 10.1.6.2 dev eth2 

您需要做的是将其更改为:

10.1.5.0/24 via 10.1.1.2 dev eth4

原因是您当前的路线(通过 10.1.6.2 dev eth2 的 10.1.5.0/24)指向 n2,而根据您的图表,“10.1.1.2 dev eth4”指向 n3。

因此,我上面建议的更改是“到达 n4 且目标 IP 地址为 10.1.5.0/24 的流量可以通过 eth4 到达其目的地。”

换句话说,这将导致流量以下列方式流动:n5 - n4 - n3 - n1 - n0。换句话说,从 n5 到 n0 的流量将通过 n3。

为了让相反方向的交通走另一条路线(n0 - n1 - n2 - n4 - n5,换句话说,从 n0 到 n5 的交通将通过 n2),您需要执行以下操作:

从 n1 中删除它:

10.1.4.0/24 via 10.1.3.3 dev eth3

并在 n1 上添加:

10.1.4.0/24 via 10.1.2.3 dev eth4

对于 N1->N2->N3 的双向静态路由配置,从 N3->N2-N1 用于从客户端 -> 服务器和服务器 -> 客户端的正向和反向流量

为了确保在实际会话开始之前客户端和服务器之间的通信,TCP 握手应该成功完成,然后客户端和服务器之间才真正建立会话以交换数据。对于 TCP 握手和实际数据传输,客户端 ---> 服务器和服务器-客户端网络路径都通过 . 由于这个原因,需要双向静态路由。