MPLS VPN需要使用到的技术
1.MPLS LDP协议(作用:为运营商中间设备以及BGP中的VPN实例自动分配标签)
2.BGP协议(作用:为运营商边缘设备之间建立IBGP邻居,双方搭建逻辑隧道)
3.实例(作用:为区分客户端出口设备相同的私有地址)
4.OSPF或ISIS,跑运营商底层连通
1.CE1/CE2模拟A公司的总部及分部,CE3/CE4模拟B公司的总部及分部。
2.PE1/PE2为某运营商的MPLS VPN边缘接入设备(此处为一边一台,同时接入具有相同私有地址的客户A客户B),P模拟为运营商中间设备(中间设备可能有成千上万台,此处用一台模拟,效果一样,只要底层配通,各边缘设备之间通信都是通过标签转发)。
1.基础配置IP地址,PE1/P/PE2底层ISIS/OSPF协议等;
2.配置PE1/P/PE2 LDP协议;
3.PE1/PE2之间起BGP协议;
4.PE1/PE2上配置VPN实例隔开各公司的IP;
5.配置VPN实例路由(可通过动态协议和静态路由,此处A公司我用OSPF展示,B公司用静态),并引入BGP协议,通过BGP协议的路由发布特性,通告给IBGP邻居。
6.测试连通性,抓包分析嵌套标签
基础地址配置略过,底层协议选用ISIS
PE1上:
isis 1
is-level level-2
network-entity 49.0000.0000.0001.00
int g0/0/2
isis enable 1
isis circuit-type p2p //isis模式改P2P收敛快一些
P上:
isis 1
is-level level-2
network-entity 49.0000.0000.0002.00
int g0/0/0
isis enable 1
isis circuit-type p2p //isis模式改P2P收敛快一些
int g0/0/1
isis enable 1
isis circuit-type p2p //isis模式改P2P收敛快一些
PE2上:
isis 1
is-level level-2
network-entity 49.0000.0000.0003.00
int g0/0/0
isis enable 1
isis circuit-type p2p //isis模式改P2P收敛快一些
P上:
dis isis pee //P上看一下ISIS 邻居起来了吗
底层配置完毕
PE1上:
mpls lsr-id 1.1.1.1
interface loopback 0
ip add 1.1.1.1 32
isis enable 1 //宣告到ISIS中,LDP协议通过LSR-ID建立会话消息需要互通
mpls //全局开MPLS功能
lsp-trigger all //MPLS视图下开启为所有路由分配标签功能
mpls ldp //全局开MPLS的LDP协议
interface g0/0/2
mpls //接口下再开
mpls ldp //接口下开LDP协议
太麻烦了 P设备和PE2设备配置类似,略过了,配置过程就是宣告LSR ID 开启MPLS LDP
PE1上:
bgp 100
router-id 1.1.1.1
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface LoopBack0 //建IBGP邻居可以用LOOPBACK,记住要用命令宣告一下使用的接口,否则邻居起不来
ipv4-family unicast //开IPV4单播蔟 华为设备缺省就是开的,华三要手动敲一下
peer 3.3.3.3 enable //开IPV4单播蔟中的邻居
PE2上:
bgp 100
router-id 3.3.3.3
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0 //建IBGP邻居可以用LOOPBACK,记住要用命令宣告一下使用的接口,否则邻居起不来
dis bgp peer 命令看一下邻居是否正常
正常BGP基础配置完毕,后面BGP还需要绑定VPN实例
PE1上:
ip -instance VPNA //用名称为VPNA的VPN实例指公司A
route-distinguisher 1:2 //RD值随便配置,只在本地有效,用来区分设备接受CE的私有IP
-target 10:20 export-extcommunity //配置export target 发出的标签要与PE2接收的标签相同,这个值是要在BGP的community属性中传递的,所以BGP的团体属性不要给关闭了否则不通
-target 20:10 import-extcommunity //配置import target 允许接收的标签,这个值要与对方PE2发出的值相吻合
ip -instance VPNB //用名称为VPNB的VPN实例指公司B
route-distinguisher 3:4 //RD值随便配置,只在本地有效,用来区分设备接受CE的私有IP
-target 30:40 export-extcommunity //配置export target 发出的标签要与PE2接收的标签相同,这个值是要在BGP的community属性中传递的,所以BGP的团体属性不要给关闭了否则不通
-target 40:30 import-extcommunity //配置import target 允许接收的标签,这个值要与对方PE2发出的值相吻合
int g0/0/0
ip binding -instance VPNA //接口绑定VPN实例用来将接收的私有地址打上RD标签,区分重复私有地址
ip add 172.16.0.2 24
int g0/0/1
ip binding -instance VPNB //接口绑定VPN实例用来将接收的私有地址打上RD标签,区分重复私有地址
ip add 172.16.0.2 24 //这里已经用VPN实例隔开了,相当于把一台路由器分成了三台(一台根路由,两台VPN实例路由),所以可以在每一台逻辑的路由器上配置相同的地址,其实也就是打个RD值很好理解。
PE2上:
ip -instance VPNA //用名称为VPNA的VPN实例指公司A
route-distinguisher 1:2 //RD值随便配置,只在本地有效,用来区分设备接受CE的私有IP
-target 20:10 export-extcommunity //配置export target 发出的标签要与PE2接收的标签相同,这个值是要在BGP的community属性中传递的,所以BGP的团体属性不要给关闭了否则不通
-target 10:20 import-extcommunity //配置import target 允许接收的标签,这个值要与对方PE1发出的值相吻合
ip -instance VPNB //用名称为VPNB的VPN实例指公司B
route-distinguisher 3:4 //RD值随便配置,只在本地有效,用来区分设备接受CE的私有IP
-target 40:30 export-extcommunity //配置export target 发出的标签要与PE2接收的标签相同,这个值是要在BGP的community属性中传递的,所以BGP的团体属性不要给关闭了否则不通
-target 30:40 import-extcommunity //配置import target 允许接收的标签,这个值要与对方PE1发出的值相吻合
int g0/0/2
ip binding -instance VPNA //接口绑定VPN实例用来将接收的私有地址打上RD标签,区分重复私有地址
ip add 192.168.0.2 24
int g0/0/1
ip binding -instance VPNB //接口绑定VPN实例用来将接收的私有地址打上RD标签,区分重复私有地址
ip add 192.168.0.2 24 //这里已经用VPN实例隔开了,相当于把一台路由器分成了三台(一台根路由,两台VPN实例路由),所以可以在每一台逻辑的路由器上配置相同的地址,其实也就是打个RD值很好理解。
实例配置完成
首先我用A公司跑OSPF协议来进行展示(正常企业中接入MPLS VPN专线,一般不采用OSPF,客户端是什么都不需要配置的直接指缺省路由出去就通了,也就是客户方无感知)
PE1上:
ospf 10 router-id 1.1.1.1 -instance VPNA // OSPF进程绑定VPNA实例,可以理解为VPNA的逻辑路由器开了个OSPF协议
import-route bgp
area 0.0.0.0
network 172.16.0.2 0.0.0.0
CE1上:
ospf 10 router-id 11.11.11.11
area 0.0.0.0
network 172.16.0.1 0.0.0.0
int loopback 0 //起个LOOPBACK模拟客户方内网地址,方便测试
ip add 11.11.11.11 32
ospf enable 10 a 0 //宣告到OSPF里
PE2上:
ospf 10 router-id 1.1.1.1 -instance VPNA
import-route bgp
area 0.0.0.0
network 192.168.0.2 0.0.0.0
CE2上:
ospf 10 router-id 11.11.11.11
area 0.0.0.0
network 192.168.0.1 0.0.0.0
int loopback 0 //起个LOOPBACK模拟客户方内网地址,方便测试
ip add 22.22.22.22 32
ospf enable 10 a 0 //宣告到OSPF里
PE1/PE2上display ospf peer brief 查看邻居是否起来了
PE1:
ospf配完
接下来做OSPF和BGP的相互引入
PE1上:
bgp 100
ipv4-family v4 //开启BGP的VPNV4功能
peer 3.3.3.3 enable
ipv4-family -instance VPNA //进入到BGP中的实例VPNA中
import-route ospf 10 //引入OSPF
BGP进程一般设备只允许开一个进程所以一般都是在进程内进行划分实例,不像OSPF直接在开进程时就直接绑定实例
PE2上:
bgp 100
ipv4-family v4 //开启BGP的VPNV4功能
peer 1.1.1.1 enable
ipv4-family -instance VPNA //进入到BGP中的实例VPNA中
import-route ospf 10 //引入OSPF
配置完成
查看VPNA实例的路由表
PE1上:
PE2上:
路由已经学到了,在CE1pingCE2
验证完成
通过静态配置
PE1上:
ip route-static -instance VPNB 33.33.33.33 255.255.255.255 172.16.0.1 //配置VPN实例路由指向CE3的loopback口
bgp 100
ipv4-family -instance VPNB //引入静态和直连
import-route direct //引入直连是让对端邻居学习到172.16.0.0/24的路由
import-route static //引入静态是让对端邻居学习到33.33.33.33的路由
CE3/CE4上:
ip route-static 0.0.0.0 0 172.16.0.2 一条缺省即可
PE2上:
ip route-static -instance VPNB 44.44.44.44 255.255.255.255 192.168.0.1 //配置VPN实例路由指向CE4的loopback口
bgp 100
ipv4-family -instance VPNB //引入静态和直连
import-route direct //引入直连是让对端邻居学习到192.168.0.0/24的路由
import-route static //引入静态是让对端邻居学习到44.44.44.44的路由
验证路由表
PE1:
PE2:
CE3pingCE4
在CE3pingCE4的44.44.44.44地址
抓包P设备G0/0/0口可以看到ICMP请求包标签嵌套,外层标签为1025,栈底标签为1027
在PE1和PE2上查看LSP标签信息
PE1上:
FE2上:
可以看到BGP通过标签来区分进入流量的VPN实例,也就是说去往44.44.44.44的流量一经过PE1设备,PE1就为其打上了PE2可以识别的唯一标签1027,此标签在传递过程中不剥离一直到PE2设备上弹出外层的传递标签1025,看到栈底的1027标签,PE2就可以知道这个报文是去往VPNB实例中的44.44.44.44的报文。
抓包查看完成,此配置实例我发在下载中,点赞下载。