对于规模较大的企业来说,网络访问需求不仅仅局限于公司总部网络内,分公司、办事处、出差员工、合作单位等也需要访问公司总部的网络资源,可以采用VPN(Virtual Private Network,虚拟专用网络)技术来实现这一需求。VPN可以在不改变现有网络结构的情况下,建立虚拟专用连接。因其具有廉价、专用和虚拟等多种优势,在现网中应用非常广泛。
VPN即虚拟专用网,泛指通过VPN技术在公用网络上构建的虚拟专用网络。VPN用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全、可靠的连接。
虚拟(Virtual)
VPN用户的通信是通过公共网络进行的,而这个公共网络同时也可以被其他非VPN用户使用,VPN用户获得的只是一个逻辑意义上的专网。
专有性(Private)
VPN网络是专门供VPN用户使用的网络,对于VPN用户,使用VPN与使用传统专网没有区别。VPN能够提供足够的安全保证,确保VPN内部信息不受外部侵扰。VPN与底层承载网络(一般为IP网络)之间保持资源独立,即VPN资源不被网络中非该VPN的用户所使用。
根据建设单位不同:
租用运营商VPN专线搭建企业VPN网络
自建企业VPN网络
根据组网方式不同
远程访问VPN(Remote Access VPN)(多对一)
局域网到局域网的VPN(Site-to-site VPN)(点对点,GRE就是一种点对点的VPN)
根据实现的网络层次
应用层:SSL VPN
网络层:IPSec VPN、GRE VPN
数据链路层:L2TP VPN、PPTP VPN
VPN技术的基本原理是利用隧道(Tunnel)技术,对传输报文进行封装,利用VPN骨干网建立专用数据传输通道,实现报文的安全传输。位于隧道两端的VPN网关,通过对原始报文的“封装”和“解封装”,建立一个点到点的虚拟通信隧道。
身份认证、数据加密和认证技术可以有效保证VPN网络与数据的安全性:
身份认证:可用于部署了远程接入VPN的场景,VPN网关对用户的身份进行认证,保证接入网络的都是合法用户而非恶意用户。也可以用于VPN网关之间对对方身份的认证。
数据加密:将明文通过加密变成密文,使得数据即使被黑客截获,黑客也无法获取其中的信息。
数据验证:通过数据验证技术对报文的完整性和真伪进行检查,丢弃被伪造和被篡改的报文。
通用路由封装协议(General Routing Encapsulation,GRE)是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、IPv4、IPv6等)的报文进行封装,使封装后的报文能够在另一种网络中(如IPv4)传输,从而解决了跨越异种网络的报文传输问题。
GRE构成要素分为3个部分:乘客协议、封装协议和运输协议。
乘客协议是指用户在传输数据时所使用的原始网络协议。
封装协议的作用就是用来“包装”乘客协议对应的报文,使原始报文能够在新的网络中传输。
运输协议是指被封装以后的报文在新网络中传输时所使用的网络协议。
如图所示,乘客协议为IPv6,封装协议为GRE,运输协议为IPv4。整体转发流程如下:
当R1收到IP1发来的IPv6数据包,查询设备路由表,发现出接口是隧道接口,则将此报文发给隧道接口处理。
隧道接口给原始报文添加GRE头部,然后根据配置信息,给报文加上IP头。该IP头的源地址就是隧道源地址,IP头的目的地址就是隧道目的地址。
封装后的报文在IPv4网络中进行普通的IPv4路由转发,最终到达目的地R2。
配置GRE VPN命令
了解工作原理
AR1配置
基础IP配置
sys
[Huawei]sys AR1
[AR1]inte gi 0/0/0
[AR1-GigabitEthernet0/0/0]ip addr 12.1.1.1 255.255.255.0
[AR1-GigabitEthernet0/0/0]inte lo 1
[AR1-LoopBack1]ip addr 1.1.1.1 32
[AR1-LoopBack1]q
[AR1]ip route-static 0.0.0.0 0 12.1.1.2 //AR2模拟运营商,去往公网的流量缺省给运营商
配置隧道接口,封装协议为GRE VPN
[AR1]interface Tunnel 0/0/0 //创建隧道口
[AR1-Tunnel0/0/0]tunnel-protocol gre //隧道封装协议为Tunnel
[AR1-Tunnel0/0/0]source 12.1.1.1 //封装GRE时的源IP为12.1.1.1
[AR1-Tunnel0/0/0]destination 13.1.1.3 //封装GRE时的目的IP为13.1.1.3
[AR1-Tunnel0/0/0]ip addr 10.1.1.1 30 //配置隧道口的IP地址
AR2配置
sys
[Huawei]sys AR2
[AR2]inte gi 0/0/0
[AR2-GigabitEthernet0/0/0]ip addr 12.1.1.2 255.255.255.0
[AR2-GigabitEthernet0/0/0]inte gi 0/0/1
[AR2-GigabitEthernet0/0/1]ip addr 13.1.1.2 255.255.255.0
[AR2-GigabitEthernet0/0/1]inte lo 8
[AR2-LoopBack8]ip addr 8.8.8.8 32
AR3配置
sys
[Huawei]sys AR3
[AR3]inte gi 0/0/1
[AR3-GigabitEthernet0/0/1]ip addr 13.1.1.3 255.255.255.0
[AR3-GigabitEthernet0/0/1]inte lo 1
[AR3-LoopBack1]ip addr 3.3.3.3 32
[AR3-LoopBack1]inte tunnel 0/0/0
[AR3-Tunnel0/0/0]ip addr 10.1.1.2 30
[AR3-Tunnel0/0/0]tunnel-protocol gre
[AR3-Tunnel0/0/0]destination 12.1.1.1
[AR3-Tunnel0/0/0]source 13.1.1.3
[AR3-Tunnel0/0/0]q
[AR3]ip route-static 0.0.0.0 0 13.1.1.2
此时AR1和AR3的出口已经可以完成通信,隧道口建立完毕,可以通过查看接口的协议状态是否启动判断,在GRE封装的源目地址(AR1和AR3的出口地址)未能通信前,隧道口的协议状态是down的,并且将tunnel口作为直连路由加入路由表,去往10.1.1.0/30都将走隧道口
[AR1]dis ip inte b
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 4
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 4
The number of interface that is DOWN in Protocol is 2
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.1.1.1/24 up up
GigabitEthernet0/0/1 unassigned down down
GigabitEthernet0/0/2 unassigned down down
LoopBack1 1.1.1.1/32 up up(s)
NULL0 unassigned up up(s)
Tunnel0/0/0 10.1.1.1/30 up up //协议状态UP
[AR1]
此时的隧道口已经可以建立通信
AR1 ping AR3
[AR1]ping 10.1.1.2
PING 10.1.1.2: 56 data bytes, press CTRL_C to break
Reply from 10.1.1.2: bytes=56 Sequence=1 ttl=255 time=30 ms
Reply from 10.1.1.2: bytes=56 Sequence=2 ttl=255 time=30 ms
Reply from 10.1.1.2: bytes=56 Sequence=3 ttl=255 time=30 ms
Reply from 10.1.1.2: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 10.1.1.2: bytes=56 Sequence=5 ttl=255 time=30 ms
--- 10.1.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/30/30 ms
[AR1]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 12 Routes : 12
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 12.1.1.2 GigabitEthernet
0/0/0
1.1.1.1/32 Direct 0 0 D 127.0.0.1 LoopBack1
10.1.1.0/30 Direct 0 0 D 10.1.1.1 Tunnel0/0/0 //隧道口的直连路由
10.1.1.1/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
10.1.1.3/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
12.1.1.0/24 Direct 0 0 D 12.1.1.1 GigabitEthernet
0/0/0
12.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
12.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
在AR1的GE0/0/0抓包分析
上文通过查询路由表,AR1通过直连路由选择去往10.1.1.0/30为目标的出接口为Tunnel,Tunnel口将为通过此接口的数据包的网络层上再封装一层GRE协议和一层新的IPv4协议,其中的源目地址即为再TUNNEL中设备的源目IP,以此达到数据包在公网中传输的目的,在到达对端内网出口路由器时,在通过原始的IPv4协议报文进行通信
隧道口已经可以通信,通过配置OSPF协议,将两端内网的路由信息通过隧道口发给对方学习,就可以完成两端内网的其他设备通信
AR1
[AR1]ospf 1 router-id 1.1.1.1
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 10.1.1.1 0.0.0.0 //通过宣告隧道口与对端内网进行OSPF邻接建立
[AR1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
AR3
[AR3]ospf 1 router-id 3.3.3.3
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]network 10.1.1.2 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0
AR1的GE0/0/0口抓包
AR1和AR2的OSPF协商报文都通过隧道口封装了GRE协议和新的IP协议,以此达到通过公网将OSPF协商报文成功传达到不同的内网
查看AR1和AR3的路由表,通过OSPF学习到了对端内网的网络信息
dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 12.1.1.2 GigabitEthernet
0/0/0
1.1.1.1/32 Direct 0 0 D 127.0.0.1 LoopBack1
3.3.3.3/32 OSPF 10 1562 D 10.1.1.2 Tunnel0/0/0 //AR3的内网路由
10.1.1.0/30 Direct 0 0 D 10.1.1.1 Tunnel0/0/0
10.1.1.1/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
10.1.1.3/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
12.1.1.0/24 Direct 0 0 D 12.1.1.1 GigabitEthernet
0/0/0
12.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
12.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 13.1.1.2 GigabitEthernet
0/0/1
1.1.1.1/32 OSPF 10 1562 D 10.1.1.1 Tunnel0/0/0
//AR1的内网路由
3.3.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack1
10.1.1.0/30 Direct 0 0 D 10.1.1.2 Tunnel0/0/0
10.1.1.2/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
10.1.1.3/32 Direct 0 0 D 127.0.0.1 Tunnel0/0/0
13.1.1.0/24 Direct 0 0 D 13.1.1.3 GigabitEthernet
0/0/1
13.1.1.3/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/1
13.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/1
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
测试两个内网通信,在AR1的GE0/0/0抓包分析
ping -a 1.1.1.1 3.3.3.3
PING 3.3.3.3: 56 data bytes, press CTRL_C to break
Reply from 3.3.3.3: bytes=56 Sequence=1 ttl=255 time=40 ms
Reply from 3.3.3.3: bytes=56 Sequence=2 ttl=255 time=40 ms
Reply from 3.3.3.3: bytes=56 Sequence=3 ttl=255 time=30 ms
Reply from 3.3.3.3: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 3.3.3.3: bytes=56 Sequence=5 ttl=255 time=40 ms
--- 3.3.3.3 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/36/40 ms
通信过程
通过隧道口封装GRE和新的IP协议,两端内网的OSPF协商报文成功交互,学习到了各自的内网路由,去往对端内网的路由出接口为Tunnel口,Tunnel口再将经过此接口的数据包的IP协议之后封装上GRE和新的IP协议,新的IP协议中的源目IP地址为两个内网的出口公网地址,以此达到数据包可以通过公网到达内网的目的,在内网的出口路由器接受到数据包后再通过原始的IP协议封装进行转发,回包同理,以此到达两个内网的通信