IPv4 TCP会话上的IPv4和IPv6前缀
配置目标:
在R1通过bgp发布ipv6前缀,使R2收到有效路由条目
R2出现三条ipv6路由条目为标准
配置过程:
ipv4接口地址之间建立邻接关系,在ipv6地址簇内激活ipv4邻居。
静态路由的配置是为了IPv6前缀注入BGP中。
R1
interface GigabitEthernet0/0
ip address 10.0.0.38 255.255.255.252
ipv6 address 2001:DB8:A:5::2/64
!
router bgp 500
bgp log-neighbor-changes
neighbor 10.0.0.37 remote-as 100
!
address-family ipv4
neighbor 10.0.0.37 activate
exit-address-family
!
address-family ipv6
network 2001:DB8:5:1::/64
network 2001:DB8:5:2::/64
network 2001:DB8:5:3::/64
neighbor 10.0.0.37 activate
exit-address-family
!
ipv6 route 2001:DB8:5:1::/64 Null0
ipv6 route 2001:DB8:5:2::/64 Null0
ipv6 route 2001:DB8:5:3::/64 Null0
R2
interface GigabitEthernet0/0
ip address 10.0.0.37 255.255.255.252
ipv6 address 2001:DB8:A:5::1/64
!
router bgp 100
bgp log-neighbor-changes
neighbor 10.0.0.38 remote-as 500
!
address-family ipv4
neighbor 10.0.0.38 activate
exit-address-family
!
address-family ipv6
neighbor 10.0.0.38 activate
exit-address-family
!
配置完以上部分,R2的ipv6路由表中并没有ipv6路由,需要做进一步排查以识别该问题。
R2#debug bgp ipv6 unicast updates in
R2#clear bgp ipv6 unicast 500 soft in
从红框中可以发现,该下一跳地址是通过ipv4映射的ipv6地址格式将该地址填充到ipv6下一跳地址字段中,所以R2接收端的bgp进程无法识别该地址为有效的下一跳地址,从而拒绝了这些路由。
这里需要配置一条策略,将默认的下一跳地址更改为宣告接口的ipv6地址,配置ipv6前缀列表,路由映射更改下一跳地址为ipv6接口地址2001:DB8:A:5::2该路由映射用作出站策略,告诉对端下一跳是 2001:DB8:A:5::2。道理相同,R2也要配置更改下一跳地址。
R1
ipv6 prefix-list v6-routes seq 5 permit 2001:DB8:A::/48 le 64
route-map v6-next-hop permit 10
match ipv6 address prefix-list v6-routes
set ipv6 next-hop 2001:DB8:A:5::2
!
address-family ipv6
network 2001:DB8:5:1::/64
network 2001:DB8:5:2::/64
network 2001:DB8:5:3::/64
neighbor 10.0.0.37 activate
neighbor 10.0.0.37 route-map v6-next-hop out
exit-address-family
!
R2
ipv6 prefix-list v6-routes seq 5 permit 2001:DB8::/32 le 64
route-map v6-next-hop permit 10
match ipv6 address prefix-list v6-routes
set ipv6 next-hop 2001:DB8:A:5::1
!
address-family ipv6
neighbor 10.0.0.38 activate
neighbor 10.0.0.38 route-map v6-next-hop out
exit-address-family
!
查看调试效果,目前已经拥有期望的下一跳地址,并且从调试信息中也可以得知传送BGP更新2001:db8:5:1::/64等路由信息的ipv4 TCP 会话位于ipv4子网10.0.0.36/30上,而下一跳地址位于同一个BGP更新接口上的ipv6子网2001:DB8:A:5::/64上,因而下一跳地址不在建立EBGP会话的同一个子网上。
修改配置,让R2接受两跳之外的下一跳地址,如果要R1也传输ipv6路由信息也要做相同配置。
R2
router bgp 100
bgp log-neighbor-changes
neighbor 10.0.0.38 remote-as 500
neighbor 10.0.0.38 ebgp-multihop 2
!
R1
router bgp 500
bgp log-neighbor-changes
neighbor 10.0.0.37 remote-as 100
neighbor 10.0.0.37 ebgp-multihop 2
!
为什么需要修改多跳为两跳的原因:
如果下一跳地址不属于IPv4对等体所在的子网,那么IPv6不会自动接受来自IPv4对等体的路由。下一跳所属的IPv6地址可以与IPv4子网共享同一条链路,此时会被视为非直连,因而需要配置多跳EBGP以接受“非本地”子网。
在ipv4地址为结构的地址簇中传送ipv6路由信息,这个ipv6路由信息需要下一跳地址也为IPv6地址,那么身为拥有IPv4地址和IPv6地址的同一个接口。会被视为非直连,所以需要配置多跳EBGP。