我的 GRE 隧道数据包如何路由?

我的 GRE 隧道数据包如何路由?

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

我的网络如下所示(-> 表示直接连接):

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

我在路由器 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 ping 到计算机 B,则可以在路由器 A 上观察到以下内容:

  1. 流量进入 eth0,目的地为 10.0.4.2。

  2. 流量被路由到新的Tunnel5接口:由我添加的路由规则导致(ip route add 10.0.4.2/32 via 192.168.33.3)

  3. ??? 魔术 ??? 流量以某种方式被封装并使用新的目标地址 10.0.3.2 路由回路由器

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

第 3 步发生了什么?

附加信息

一些命令及其输出,均在路由器 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 的流量应该封装新的源地址和目标地址。

封装的数据包应像平常一样进行路由。在这种情况下,IPSec 策略将匹配并加密数据包,同时保留源地址和目标地址。

然后根据路由表将数据包路由到路由器 C。

只是猜测。

答案1

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

相关内容