实现跨网段的直连路由器通信

1. 拓扑

拓扑如下:

alt text

R1和R2相互直连,但是直连的端口IP地址不在同一网段。R1的g0/0/0接口IP地址为6.6.6.6/24,R2的g0/0/0接口IP地址为8.8.8.8/24。

2. 静态路由

要实现R1和R2能三层互相通信,首先需要在R1和R2上配置静态路由:

1
2
3
4
// R1
ip route-static 8.8.8.0 24 g0/0/0 8.8.8.8
// R2
ip route-static 6.6.6.0 24 g0/0/0 6.6.6.6

R1和R2通信,R1在完成网络层的源和目的IP地址的封装后,在进行数据链路层的目的MAC地址封装之前,还需要通过ARP协议获取R2的MAC地址。在R1的静态路由配置中,已经指定了下一跳地址为8.8.8.8,因此ARP协议请求获取的目的MAC地址也就是R2的8.8.8.8对应的物理接口MAC地址。但由于R1和R2的IP地址不在同一网段,并且ARP不能跨网段工作,因此R2的g0/0/0接口收到R1的ARP请求后,虽然解析出目标IP就是本接口的IP,也不会响应R1的ARP请求,而是会直接丢弃掉R1的ARP请求:

在R2的g0/0/0接口上进行抓包

R1的ARP请求无法获取到R2的MAC地址,因此R1无法完成数据链路层的封装,最终导致数据包无法发送出去:

alt text

3. 静态ARP

找到了问题所在,接下来就需要在R1和R2上配置静态ARP,在R1上将静态路由的下一条地址与R2的g0/0/0接口的MAC地址进行静态绑定,在R2上也同样地将静态路由的下一条地址与R1的g0/0/0接口的MAC地址进行静态绑定。这样R1和R2在封装目的MAC地址时,可以直接从ARP缓存表中获取到对应的MAC地址,而无需进行ARP请求。

查看接口的MAC地址可以用display interface g0/0/0 | include Hardware命令,或者直接用display arp命令查看ARP缓存表中直连接口的MAC地址:

R1

R2

配置长静态ARP的命令如下:

1
2
3
4
// R1
arp static 8.8.8.8 00e0-fc90-3c1d
// R2
arp static 6.6.6.6 00e0-fc02-1af1

完成长静态ARP的配置后,可以使用display arp static命令查看静态ARP表项信息:

alt text

使用ping命令进行连通性测试:

alt text

alt text

4. 参考