我的GRE-Tunneled数据包如何路由?

我试图弄清楚创buildGRE隧道时到底发生了什么。

我的networking看起来像这样( – >表示直接连接):

  • 计算机A(eth0:10.0.1.1) – >
  • (eth0:10.0.1.2)Router B(eth1:10.0.2.1) – >
  • (eth0:10.0.2.2)Router C(eth1:10.0.3.1) – >
  • (eth0:10.0.3.2)Router D(eth1:10.0.4.1) – >
  • (eth-:10.0.4.2)计算机E

我在Router B上运行以下命令:

ip tunnel add Tunnel5 mode gre local 10.0.2.1 remote 10.0.3.2 ifconfig Tunnel5 192.168.33.2 netmask 255.255.255.0 up ip route add 10.0.4.2/32 via 192.168.33.3 

具有以下连接信息:

 conn routerD_eth0 type=tunnel authby=secret left=10.0.2.1 leftsubnet=10.0.2.1/32 right=10.0.3.2 rightsubnet=10.0.3.2/32 auto=start 

路由器D上的等价物:

 ip tunnel add Tunnel5 mode gre local 10.0.3.2 remote 10.0.2.1 ifconfig Tunnel5 192.168.33.3 netmask 255.255.255.0 up ip route add 10.0.1.1/32 via 192.168.33.2 

 conn routerb_eth1 type=tunnel authby=secret left=10.0.3.2 leftsubnet=10.0.3.2/32 right=10.0.2.1 rightsubnet=10.0.2.1/32 auto=start 

这是我可以在路由器A观察,如果我从计算机A ping计算机B:

  1. stream量进入eth0,目的地是10.0.4.2。

  2. stream量被路由到新的Tunnel5接口:由我添加的路由规则引起(ip route add通过192.168.33.3添加10.0.4.2/32)

  3. ??? 魔法 ??? 不知怎的,stream量被封装并路由回路由器,新的目的地址为10.0.3.2

  4. 正常的OSPF路由规则会导致stream量从eth1出去并到达目的地。

第3步会发生什么?

附加信息

一些命令及其输出全部在Router A上运行:

 $ ip tunnel show Tunnel5: gre/ip remote 10.0.3.2 local 10.0.2.1 $ setkey -DP 10.0.3.2[any] 10.0.2.1[any] 255 ... /esp/tunnel/10.0.3.2-10.0.2.1/unique:3 ... 10.0.2.1[any] 10.0.3.2[any] 255 ... /esp/tunnel/10.0.2.1-10.0.3.2/unique:3 ... 

理论

根据“ip tunnel show”中的信息,路由器才知道路由到Tunnel5的stream量应该封装新的源地址和目的地址。

封装的数据包应该正常路由。 在这种情况下,IPSec策略匹配并encryption数据包,保留源地址和目标地址。

然后,数据包根据路由表路由到路由器C.

只是一个猜测。

当数据包进入路由器时,由于您的静态路由,它将被路由出隧道接口。 路由器将报文封装在GRE报文中,目的地址为10.0.3.2。 路由器然后根据路由表路由这个数据包(即out eth 1)。 当到达路由器D时,数据包被解封,然后正常路由。