前言
我们之前讲过了6 to 4 当中的手动和自动,在自动当中是有要求条件的,而正是这种条件要求导致了一定的局限性,分支的网络必须是2002开头的,那如果不是2002开头的呢?还能使用自动6 to 4 技术吗?
在这个地方,6 to 4 技术就发生了分支,一类是普通的6 to 4 隧道,也就是我们之前讲的有限制的 6 to 4 普通隧道,分支的网络必须是2002开头的,如果不是2002开头的,这种普通 6 to 4 技术就无法应对了,那就要采用另一种6 6 to 4 的技术,叫做6 to 4 中继,专门用来用来解决分支机构的网段不是2002开头的的问题。
为什么违反了分支不是2002开头的网段,普通的6 6o 4 隧道就会失效呢?
6 to 4 隧道缺点很明显,PC的IPV6地址与路由器的外网接口的IPV4地址必须有关联,一旦违反了这个规则,6 to 4 隧道就不生效了,为什么呢?我们知道6 to 4的隧道要路由两次,第一次路由交给隧道接口,这一次的路由是这样的ip route 2002:: tunnel0/0/0 然后隧道接口提取出目标IPV4地址再路由一次。如果违反了规则之后,第一次路由会失效,路由器不知道怎么转发。
如何解决这种问题?
违反了规则导致路由器不知道如何转发,我们手动指导路由器进行转发不就行了吗?我们进行干预,如何干预呢?再加一条路由,这一条路由的下一跳指向目标路由器,这一条路由并不会真正指导转发,这一条路由的作用是为了调用我们之前手工指的2002相关的路由,根据之前手动的路由数据包又会被交给隧道接口,然后又再次提取出目标IP当中的IPV4部分,这次提取的目标IP也不是真正的目标IP,而是下一跳的IP,从下一跳的目标IP当中提取出IPV4部分,然后再次路由,也就是说 6 to 4 路由了两次,而 6 to 4 中继是路由了三次。
好了,看了上面的解释可能有点迷惑,我们用一个例子来说明
说明
我们从上图当中的R3路由下面可以看到,除了2002之外,还有一个3009的网段,明显违反了6 to 4 隧道当中的规则,也就是说当前我们从R1的PC1上是无法与3009网段进行通信的,原因也很简单,当PC1的数据包到达R1的时候,R1就已经蒙圈了,R1只知道2002开头的路由要交给隧道接口,3009开头的数据包R1不知道如何转发,在R1这个地方我们要加一条路由,这一条路由有些特别,ip route 3009:: 2002:0303:0303::3下一跳不指向R1的隧道接口了,而是指向R3当中隧道接口的IPV6地址,那R1能到R3当中隧道接口的IPV6地址吗?不能呀,因为R1只有一条到达2002的路由,既然不能到达那这一条路由有什么意义呢?其实这一条路由的目的并不是指导转发,这一条路由的真正意义是,告诉路由器,去往3009的下一跳要发给2002所在网段,这些R1才能调用我们之前加的那一条2002的路由,换句话说,新加的这一条路由目的就仅仅是让R1调用起他之前添加那条去往2002的路由,调用起来之后,之后的过程就与普通6 to 4隧道一样了,将给隧道接口之后,根据报文的目的地址?不对,不对,是根据第一条路由的下一跳地址提取IPV4地址,再次进行路由。
看了上面的过程我们知道,普通6 to 4隧道与6 to 4中继的区别仅仅是再加了一样路由而已,但你别小看了这一条路由,如果我们在R1上抓包就可以看到当PC1与3009进行通信时,ipv6的目的地址就是3009,而ipv4 的目标地址就不是从3009这个IPV6地址当中提取出来的,如下图所示: