拓扑分析
1、现有一公司通过部署MPLS BGP专线,总公司作为数据中心提供服务,各分公司互访的流量必须通过总公司内进行监控过滤后再进行转发。
2、规定所有公司互访流量必须从PE1设备的G0/0/0.10口进入,从G0/0/0.20口发出
3、CE与PE之间是EBGP关系,PRR与各PE之间是IBGP关系
配置思路
1、通过使用VPN实例中的RT值的export和import参数来控制设备学习路由和发布路由
2、使用PRR设备做反射器3个PE设备为client
3、充分利用BGP传递属性使得各CE设备都学习到对方路由条目(后面会详细解释传递顺序)
配置注意事项
(此试验一定要理清VPN实例中RD值与RT值所起的作用,下面有详细说明)
1、PRR上需要忽略BGP VPNV4下的VPN TAG属性否则不会接受各PE路由
2、各CE与PE需要为EBGP关系,且CE1/CE2/CE3之间的AS尽量不要相同,否则AS号重叠将导致BGP的AS-PATH防环,接下来实验中演示相同的AS-PATH如何操作
3、各PE设备上的VPN实例中的RD值不可一样,否则路由传递到PE上后,PE设备不会将与本地VPN实例RD值相同的路由向PRR发送(RD值为32:32标识唯一的VPN实例,与32位的IP报文组合形成64位+32位的VPN实例路由,以此来与传统路由表隔开)
4、PE设备上VPN TAG的规划要遵循传递规则,VPN TAG的作用:负责接收和发送路由时打上VPN TAG标签(注意只是用来决定发布和接收的路由条目是否加入路由表中,报文的接收与否是看路由表中有没有路径。)
VPN RT属性解释:
以拓扑图来说:PE1上VPNIN实例中的EXPORT参数为10:20,也就是说VPNIN在向邻居发送自己的BGP路由时会打上10:20的 export标签(这个VPN TAG属性是在BGP的community团体属性中传递的,大家应该都知道BGP团体属性的作用是用来选取路由条目的),如果邻居的import标签为10:20,那么邻居就会接收VPNIN的路由,并加入到对应的VPN路由表中,且注意团体属性缺省情况下为Internet (缺省属性,所有路由都属于Internet,此属性的路由可以通告给所有BGP的邻居)也就是说收到此属性我如果不支持还是会发送给我的其他BGP邻居,例如图中的PE1中VPNIN向PRR传递路由带团体属性标签为export 10:20,PRR虽然不支持此属性但是他还是会在将从PE1学到的BGP路由反射出去的时候携带上此团体属性标签。
团体属性在BGP中属于可选过度属性:
可选过度:BGP 不能识别该属性,但可以接收该属性并将其发布给其他邻居的属性。
团体属性中支持的情况:
Internet :缺省属性,所有路由都属于Internet,此属性的路由可以通告给所有BGP的邻居
No_Export :收到此属性的路由后,不会将该路由发布给其他的AS。
No_Advertise :收到此属性的路由后,不会将该路由通告给任何BGP邻居。
No_Export_Subconfed :在联盟中使用
VPN RD属性:
RD值是32:32位的唯一标识在本地设备上标识唯一的VPN实例,起到的作用就是区分开传统IP和VPN实例IP(传统IPV4报文为32位),RD+IP得出64位+32位的VPNV4 IP条目。
当一个路由器收到一条报文,如果此报文长度是32位则为传统的IPV4报文,直接查IPV4路由表转发即可,当收到一个64+32位的则为VPNV4路由,这就需要查看报文中的RD值,并记录在本地的VPNV4路由表中,然后再根据RT值决定将此条VPNV4路由条目加入到本地哪一个VPN实例中。
在PE1上查看VPNV4路由学习情况,查看下面截图
可以看到PE1从RD值为1:3 的VPN实例上学习到了14.14.14.14的路由条目,从RD值为1:4的VPN实例上学习到了22.22.22.22的路由条目
再通过对端发送这两条路由时插入的团体属性RT值export值 20:10
本地进行比较与VPNOUT实例的import值 20:10相符合,即将两条路由都加入到了VPNOUT实例中,VPNIN实例由于不符合RT值,一条路由都没有学到。
理清RD与RT的作用即可开始配置
配置开始
1、先配置底层,搞通底层的IGP和MPLS LDP
PE2上:
isis 10
network-entity 49.0000.0000.0001.00
is-level level-2
int loopback0 10.10.10.10 32
isis enbale 10
mpls lsr-id 10.10.10.10
mpls
mpls ldp
int g0/0/0
ip add 10.0.0.10 30
isis enable 10
mpls
mpls ldp
PE3上:(与PE2类似,略过)
PRR上:(与PE2类似,略过)
PE1上:(与PE2类似,略过)
2、配置IBGP邻居
PE2上:
bgp 100
router-id 10.10.10.10
peer 6.6.6.6 as-number 100
peer 6.6.6.6 connect-interface LoopBack0
ipv4-family unicast
undo peer 6.6.6.6 enable //此处不需要开启IPV4单播BGP邻居,关闭减少报文
ipv4-family vpnv4 //进入VPV4视图,开启VPNV4的BGP邻居
peer 6.6.6.6 enable
PE3上:(与PE2类似,略过)
PE1上:(与PE2类似,略过)
PRR上:
bgp 100
router-id 6.6.6.6
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
peer 10.10.10.10 as-number 100
peer 10.10.10.10 connect-interface LoopBack0
peer 18.18.18.18 as-number 100
peer 18.18.18.18 connect-interface LoopBack0
ipv4-family unicast //关闭一下IPV4的邻居
undo synchronization
undo peer 2.2.2.2 enable
undo peer 10.10.10.10 enable
undo peer 18.18.18.18 enable
ipv4-family vpnv4 开启VPNV4邻居
undo policy vpn-target
peer 2.2.2.2 enable
peer 2.2.2.2 reflect-client //将PE1/PE2/PE3都作为客户端,自身为RR
peer 10.10.10.10 enable
peer 10.10.10.10 reflect-client
peer 18.18.18.18 enable
peer 18.18.18.18 reflect-client
3、VPN实例的配置
PE2上:
ip vpn-instance VPNA //起实例
ipv4-family
route-distinguisher 1:3
vpn-target 20:10 export-extcommunity
vpn-target 10:20 import-extcommunity
interface GigabitEthernet0/0/1 //绑定实例
ip binding vpn-instance VPNA
ip address 192.168.0.1 255.255.255.0
PE3上:
ip vpn-instance VPNB //起实例
ipv4-family
route-distinguisher 1:4
vpn-target 20:10 export-extcommunity
vpn-target 10:20 import-extcommunity
interface GigabitEthernet0/0/1 //绑实例
ip binding vpn-instance VPNB
ip address 192.168.0.1 255.255.255.0
PE1上:
ip vpn-instance VPNIN //起实例VPNIN
ipv4-family
route-distinguisher 2:1
vpn-target 10:20 export-extcommunity
ip vpn-instance VPNOUT //起实例VPNOUT
ipv4-family
route-distinguisher 2:2
vpn-target 20:10 import-extcommunity
interface GigabitEthernet0/0/0.10 //起子接口
dot1q termination vid 10 //dot1q用来起VID值和其他接口隔离
ip binding vpn-instance VPNIN //绑定VPNIN
ip address 10.0.10.2 255.255.255.252
arp broadcast enable //开二层广播功能
interface GigabitEthernet0/0/0.20
dot1q termination vid 20
ip binding vpn-instance VPNOUT
ip address 10.0.20.2 255.255.255.252
arp broadcast enable
CE设备与PE设备起EBGP
PE2上:
ipv4-family vpn-instance VPNA //在实例下起,因为接口绑定这个实例了
peer 192.168.0.2 as-number 200
CE2上:
int loopback 0
ip add 14.14.14.14 32
int g0/0/0
ip add 192.168.0.2 24
bgp 200
peer 192.168.0.1 as-number 100
network 14.14.14.14 255.255.255.255
PE3/CE3上配置类似略过
PE1上:
ipv4-family vpn-instance VPNIN
peer 10.0.10.1 as-number 200
ipv4-family vpn-instance VPNOUT
peer 10.0.20.1 as-number 200
CE1上:
bgp 200
peer 10.0.10.2 as-number 100
peer 10.0.20.2 as-number 100
注意此处在CE1/CE2/CE3上都起的BGP 200,最后学习路由是因为AS-PATH属性防环会导致路由学习不到,需要用命令解决
CE1上学习不到BGP表项,忽略AS-PATH解决方式:
查看BGP VPNV4表项,发现VPNOUT实例已经学习到了,且VPNOUT向CE1发布了路由,CE1由于AS-path未接收:
PE1上:dis bgp vpnv4 all routing-table ,可以看到VPNOUT中学习到了表项,但是AS-path为200
看一下是否向CE1发送了路由
PE1上:dis bgp vpnv4 vpn-instance VPNOUT routing-table peer 10.0.20.1 advertised-r
outes //查看向对等体10.0.20.1宣告的路由,可以看到PE1加上AS-PATH100后是宣告了的,只是CE1未接收
那么在CE1上忽略AS-PATH
CE1上:
ipv4-family unicast
peer 10.0.20.2 allow-as-loop
再查看CE1已经有路由了
但是此时的PE1上的VPNIN实例表里没学到任何路由,且CE1也向自己的EBGP邻居PE1的VPNIN宣告了路由,看CE1上的路由可以看到是AS100防环了,那么我们需要再忽略掉AS-PATH。
PE1上:
ipv4-family vpn-instance VPNIN
peer 10.0.10.1 allow-as-loop 3
此时PE1上的VPNIN也有了路由且也向外宣告了,但是,我们通过命令在PE2/3设备上查看AS-PATH为两层了
PE2上:
dis bgp vpnv4 all routing-table //注意理解此处为什么PE2/PE3会学到AS含有100的路由条目,需要理解BGP的水平分割原理,对于EBGP邻居通过AS-path防环,对于IBGP邻居,是从EBGP学习到的路由不向自己的IBGP邻居通告,也就是说IBGP邻居是不通过AS-PATH防环,是AS域内IBGP不互相通告来防环,此时我们设立PRR为反射器打破IBGP传递原则,所以PE2/PE3收到了路由
PE2上:dis bgp vpnv4 vpn-instance VPNA routing-table peer 192.168.0.2 advertised-r
outes 查看已经向CE2宣告 此时AS-PATH中两个200
CE2/CE3上忽略到AS-PATH:
peer 192.168.0.1 allow-as-loop 3 //缺省情况下数值为1,此时AS为两次重复所以给数值3次
此上配置完成
测试
在CE2上tracertCE3,查看路径
CE2上:tracert -a 14.14.14.14 22.22.22.22 //带源tracet 因为使用的loopback0地址,且MPLS未开启 lsp-trigger all 命令,只为32位的路由分配标签
配置成功