背景: 在进行远距离传输时,需要跨越多个实体网络:
- 在实体网络上直接传输数据,会造成数丢失、篡改、破坏等问题。
- 搭建专用物理链路,造价昂贵,且不易搭建维护。
VPN:虚拟专用网络
在实体网络的基础上,构建虚拟网络专线(不会改变原有网络拓扑),使用相关技术,进行用户验证、数据保护。
VPN的划分:
- 建设VPN的单位
- 运营商建立。常见租用运营商MPLS VPN专线。
- 企业自建立。基于Internet建立企业VPN网络,常见的如IPSec VPN、L2TP VPN、SSL VPN等。
- 组网方式
- 用户到站点(远程访问VPN)
- 站点到站点(局域网到局域网VPN)
VPN的分类:
- 二层VPN:L2TP VPN、PPTP VPN
- 三层VPN:IPsec VPN、GRE VPN、MPLS VPN(2.5层,一般归为三层)
- 应用层VPN:SSL VPN
::: tip VPN本质上就是隧道,隧道的本质就是数据封装。 :::
VPN的认证、加密:
- 用户认证:对于用户接入合法性判断。
- 数据加密:防止数据被截取,泄露数据信息。
- 数据验证:防止数据被篡改、伪造。 每种VPN存在不同的认证、加密方式:
可以将不同VPN结合使用(VPN嵌套)。
GRE:通用路由封装
GRE是三层VPN封装技术,是一个万能隧道,可以将内部任何数据都执行封装(如IPX、IPv4、IPv6等),使封装后的报文能够在另一种网络中(如IPv4)传输,解决跨越异种网络的报文传输问题。
配置PC1和PC2通信
[AR1]interface Tunnel 0/0/1 创建隧道逻辑接口,最大0/0/511
[AR1-Tunnel0/0/1]ip ad 100.1.1.1 24
[AR3]interface Tunnel 0/0/0
[AR3-Tunnel0/0/0]ip ad 100.1.1.2 24
[AR1-Tunnel0/0/1]tunnel-protocol gre 指定隧道协议GRE
[AR3-Tunnel0/0/0]tunnel-protocol gre
[AR1-Tunnel0/0/1]source ? 指定源
Cellular Cellular interface
GigabitEthernet GigabitEthernet interface
NULL NULL interface
Tunnel Tunnel interface
X.X.X.X IP address
[AR1-Tunnel0/0/1]source 1.1.1.1 指定隧道源地址
[AR1-Tunnel0/0/1]destination 3.3.3.3 指定隧道目标地址
[AR3-Tunnel0/0/0]source 3.3.3.3
[AR3-Tunnel0/0/0]destination 1.1.1.1
AR1和AR3可以通过隧道实现直连通信:
::: tip
::: 需要通过静态路由访问到对方的私网:
[AR1]ip route-static 192.168.2.0 24 Tunnel 0/0/1 将去往对方目的网段的流量导入到隧道
[AR3]ip route-static 192.168.1.0 24 Tunnel 0/0/0
上述配置后,PC1访问PC2的流量是:PC1-AR1-隧道-AR3-PC2: ::: tip :::
GRE支持简单的密钥加密:
[AR1-Tunnel0/0/1]gre key ?
INTEGER<0-4294967295> Tunnel key Value
[AR1-Tunnel0/0/1]gre key 123456
[AR3-Tunnel0/0/1]gre key 123456
加密的数据抓包时可以看到key值做加密信息:
VRF
VRF:虚拟路由转发,通过在一台三层转发设备上创建多张路由表实现数据或业务的隔离。 通过虚拟化在一台实际的物理设备上构建多个虚拟路由器,且虚拟路由器独占接口、路由表、路由协议等等。
每一台三层设备都存在一张Public路由表(共享/公共路由表)。 默认情况下,设备产生的路由信息都会加入Public路由表项。
VRF技术又叫VPN实例技术,设备使用后会创建新的路由表。
如上,如果在AR1上配置了两个VPN实例,就可以实现PC1和PC2在同网段上的隔离。
[AR1]ip vpn-instance ?
STRING<1-31> VPN instance name
[AR1]ip vpn-instance VPN_A 创建路由表的名字为VPN实例的命名VPN_A
[AR1-vpn-instance-VPN_A]ipv4-family 使能VPN实例的IPv4地址族,并进入VPN实例IPv4地址族视图(默认不使能)
[AR1-vpn-instance-VPN_A-af-ipv4]dis ip rou vpn-instance VPN_A 查看新创建得到的路由表信息
被VPN实例隔离的路由表不会相互访问。
[AR1-GigabitEthernet0/0/0]ip binding vpn-instance VPN_A VPN实例VPN_A绑定在接口G0/0/0上
::: warning 接口绑定完成后,接口上原有的配置信息都会消失,需要重新配置。 ::: 接口的网段信息出现在VPN实例VPN_A中: VPN实例VPN_B绑定在接口G0/0/1上,网段出现在对应实例的路由表中: VPN隔离使得同一台设备的不同接口可以配置相同的网络:
::: tip 一般企业通过VRF做隔离时,一个出口用来做VPN连接,另一个出口用于外网通信。 :::
实例间通信:
1.网段不能相互冲突,因为VPN实例隶属于三层VPN(即可以实现三层互通)。 2.通过VPN实例间的相互引入,学习各VPN实例的路由。
如上PC1和PC2通信时,PC1需要在VPN实例A中创建一条静态路由,且下一跳指向VPN实例B的路由表:
PC1-PC2时,VPN_A路由表中没有对方路由,需要在VPN_A中指向对方网段,转发到VPN_B中,下一跳是对方路由:
[AR1]ip route-static vpn-instance VPN_A 192.168.2.0 255.255.255.0 vpn-instance VPN_B 192.168.2.1
PC2-PC1时,VPN_B路由表中没有对方路由,需要在VPN_B中指向对方网段,转发到VPN_A中,下一跳是对方路由:
[AR1]ip route-static vpn-instance VPN_B 192.168.1.0 255.255.255.0 vpn-instance VPN_A 192.168.1.1
VPN实例是一个本地概念,只有本设备生效,不会影响其他设备。
OSPF的进程ID是本地概念,链路上的两台设备进程ID不同不会影响邻居建立。 OSPF不同进程之间的LSDB是相互隔离的。
[AR2]ospf 3 router-id 10.2.2.2
[AR2-GigabitEthernet0/0/0]ospf network-type p2p
[AR2-GigabitEthernet0/0/0]ospf enable 3 area 0
[AR3]ospf 1 router-id 10.3.3.3
[AR3-GigabitEthernet0/0/0]ospf network-type p2p
[AR3-GigabitEthernet0/0/0]ospf enable 1 area 0
[AR2]ospf 4 router-id 10.2.2.2
[AR2-GigabitEthernet0/0/1]ospf network-type p2p
[AR2-GigabitEthernet0/0/1]ospf enable 4 area 0
[AR4]ospf 2 router-id 10.4.4.4
[AR4-GigabitEthernet0/0/0]ospf network-type p2p
[AR4-GigabitEthernet0/0/0]ospf enable 2 area 0
OSPF在路由表中没有隔离: AR3无法和AR4通信,原因就是AR2上OSPF 数据库做了隔离。 AR3数据库:
数据库引入:
[AR2-ospf-3]import-route ospf 4
AR3数据库: ::: tip 如果AR2需要把AR3和AR4的路由传递给其他交换机,需要有两个VPN实例对应AR2上的两个OSPF进程,才能将AR2两个进程的数据库都传出去。 :::
OSPF不同进程和VPN实例绑定
[AR2-ospf-3]undo import-route ospf 4
::: warning 需要先把之前创建的OSPF进程和相关配置删除,然后再绑定VPN实例时重建,否则会报错进程已被使用。 :::
[AR2]ospf 3 vpn-instance VPN_A router-id 10.2.2.2
[AR2-GigabitEthernet0/0/0]ip binding vpn-instance VPN_A
[AR2]ospf 4 vpn-instance VPN_B router-id 10.2.2.2
[AR2-GigabitEthernet0/0/1]ip binding vpn-instance VPN_B
接口绑定实例后配置消失,需要重新配置。 OSPF数据库中无变化: 公共路由表中没有了AR3和AR4的路由条目: 通过VPN实例的路由表将AR3和AR4的路由实现隔离: 此时再在AR2上执行两个进程的import引入也不会有产生路由变化。 ::: tip 同协议不同实例间,相互引入很难实现效果,通常使用静态等方式实现通信。 路由引入常用于不同协议之间。
::: 如AR3也做VPN实例,使用如下命令将静态路由引入到VPN实例中:
[AR3]ip route-static vpn-instance VPN_A 192.168.1.1 32 NULL 0
然后再引入到AR3的OSPF中:
[AR3]import-route static
OSPF中import后没有VPN实例的参数,只能引入对应VPN实例中的路由。 AR2可以通过OSPF学到对应的数据库LSA信息,但不会加入到IP路由表中(不会计算路由)。 ::: warning AR2和AR3都属于VPN实例中,只要是VPN实例中发出的外部路由,都会被认为是环路,OSPF中的DNbit置位,该LSA不参与路由计算(环回口属于内部路由)。 防止外部路由引入VPN实例内后再传到外部引发环路。 ::: 解决方法:
[AR2-ospf-3]vpn-instance-capability simp 不检查vpn路由环路