老王说网络:网络资源分享
https://docs.qq.com/sheet/DWXZiSGxiaVhxYU1F
☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝
GREvpn
基于IP地址
ip用协议号47标识GRE头
GRE是一种封装方法,在任意一种网络协议上传输任意一种其它网络协议的封装方法
优点:
最普遍的ip网络作为承载网络
支持多种协议
支持组播和动态路由协议
配置简单 部署容易
缺点
点到点隧道
静态配置隧道参数
部署复杂连接关系时代价巨大
缺乏安全性—不提供加密
不能分隔地址空间
Ip私网1----E0/0 MSRA s0/0-------公网--------s0/0 MSRB E0/0----ip私网2
私网1访问私网2流程:
隧道起点路由查找
1)找不到路由项,丢弃
2)匹配到一条普通接口的路由项正常转发
3)匹配到出站接口为tunnel的路由表项 执行转发和GRE封装
加封装
1)Tunnle口是逻辑接口实际还是依靠物理接口进行转发,
2)将ip私网数据包进行发GRE封装,从tunnel接口获取源目地址,填充字段,
3)这样一个包裹GRE头和私网IP的公网IP包–承载协议–
承载协议路由转发
1)找不到路由表象 丢弃
2)匹配到路由表项 执行转发
中途转发
1)公网正常转发 ,路由可达
解封装
1)检查数据包目的iP地址 发现为本端接口地址
2)检查公网IP头 发现协议号为47 标识载荷为GRE封装
3)根据公网IP包头目的地址 将私网IP包提交给Tunnel接口 就如同这个数据包是Tunnel接口收到的一样
4)GRE模块解开GRE封装
隧道终点路由查找
1)若找不到匹配表项 丢弃
2)匹配到路由表项 执行转发·
具体流程
1)私网1 RTA根据目的地址(私网2)查找路由表 找到出站接口
2)如出站接口为tunnel接口 对私网IP(私网2)包进行GRE封装 再加以公网Ip封装 变成一个公网IP包 其目的的为RTB的公网地址(s0/0)
3)数据包穿越Ip公共网 到达RTB
4)RTB收到 由于其目的地址为RTB 且ip包头协议号为47 RTB将根据地址将该数据包交给对应tunnel接口
由GRE模块进行解封装处理
5)解开数据包GRE封装后 根据得到的原始私网IP包目的地址(私网2)在进行下一步路由查找 通过e0/0包发到私网2
注意事项:
两端私网路由要可达
不支持两端地址重叠
Keeplive功能:实现故障探测和路由备份,探测并感知隧道的实际工作情况
开启后tunnel口周期性发送keeplive报文 默认连续三次接收不到对方响应的keeplive报文认为隧道不可达
Tunnel口置为down 这样以tunnel接口的静态路由表项就会从路由表中消失
配置:
[RTA]int tunnel 1 mode gre 创建tunnel接口1
[RTA-tunnel1] source 20.0.10.1 指定tunnel的源地址为20.0.10.1
[RTA-tunnel1]destination 20.0.20.1 指定tunnel的目的地址为20.0.20.1
源目地址为公网出接口地址
[RTA-tunnel1] IP add 192.168.20.1 指定tunnel口192.168.20.1
{RTA-tunnel1]keeplive 开启keeplive 功能实时感知隧道的变化
查询命令: dis int tunnel 1 查看tunnel口详细信息
实例:
配置RTA
[RTA]interface g 0/0
[RTA-GigabitEthernet0/0]ip ad 192.168.10.254 24
[RTA]interface g 0/1
[RTA-GigabitEthernet0/1]ip add 20.0.0.1 30
[RTA-GigabitEthernet0/1]nat outbound
[RTA]ip route-static 0.0.0.0 0 20.0.0.2
配置LSP
[LSP]int g 0/0
[LSP-GigabitEthernet0/0]ip add 20.0.0.2 30
[LSP-GigabitEthernet0/0]int g 0/1
[LSP-GigabitEthernet0/1]ip add 30.0.0.2 30
配置RTB
[RTB]int g 0/0
[RTB-GigabitEthernet0/0]ip add 30.0.0.1 30
[RTB-GigabitEthernet0/0]int g 0/1
[RTB-GigabitEthernet0/1]ip add 172.16.10.254 24
[RTB-GigabitEthernet0/0]nat outbound
[RTB]ip route-static 0.0.0.0 0 30.0.0.2
测试:
<私网2>ping 30.0.0.2
56 bytes from 30.0.0.2: icmp_seq=1 ttl=254 time=1.000 ms
<私网1>ping 20.0.0.2
56 bytes from 20.0.0.2: icmp_seq=1 ttl=254 time=2.000 ms
<私网2>ping 192.168.10.1
Request time out
两端私网上公网都正常,两边私网不互通
两端公网要保证互通,
配置GRE vpn
配置RTA:
interface Tunnel0 mode gre
ip address 10.100.1.1 255.255.255.252
source 20.0.0.1
destination 30.0.0.1
keepalive 10 3
配置RTB:
interface Tunnel0 mode gre
ip address 10.100.1.2 255.255.255.252
source 30.0.0.1
destination 20.0.0.1
keepalive 10 3
测试
[RTA]ping -a 10.100.1.1 10.100.1.2
56 bytes from 10.100.1.2: icmp_seq=0 ttl=255 time=2.000 ms
[RTA]ip route-static 172.16.10.0 24 tunnel 0
去往私网2下一跳交给tunnel 0
[RTB]ip route-static 192.168.10.0 24 tunnel 0
去往私网1下一跳交给tunnel 0
私网的数据要交给tunnel ,也就是gre模块,不然数据包不能在公网上传输,
<私网1>ping 172.16.10.1
56 bytes from 172.16.10.1: icmp_seq=0 ttl=253 time=6.000 ms
[私网2]ping 192.168.10.1
56 bytes from 192.168.10.1: icmp_seq=0 ttl=253 time=7.000 ms
总结:实现了两端私网的通信