写点什么

GRE—用于网络走私的隧道

2020 年 3 月 26 日

GRE—用于网络走私的隧道

一. 背景

大家都知道 vlan 报文是实现网络“分组”的元老,也就是实现云网络(虚拟的假象)的基石。今天介绍网络中的另一位元老,走私鼻祖 GRE。


二. 什么是走私

普通的走私,我们不扣细节的看,走私就是过海关的时候,表面看挺正常,实际里面藏着其你想要携带的东西。


那网络走私又是什么呢? 简单的说,就是在一个公开的协议上,传输一些“私有的 数据”,从而完成夹带私货。


还是看图展示一下大致流程:



当报文的发货方和收货方商量好“规则”之后,中间所有人都不知道他们在传输什么内容了~因为中间检查都是正常的。


上图我们举个具体的例子:



IP 报文看到自己在传输 TCP,正常,放过。

TCP 看到自己在传输 HTTP,正常,放过。

HTTP 检查正常,放过。

谁能知道,我只是通过 HTTP 走私点“干货”?

这里代表着:只要在网络上,有一种协议是通的,你就无法阻止通过这个公开的协议传输特定的内容。

这就是网络走私了。


三. GRE 是怎么走私的

先看看 GRE 报文的格式,然后看看上一章节走私的介绍,就会明白。



我把我要传输的内容(绿色部分),放在一个公开的 IP 报文里面(黄色部分)。


这里就好像,黄色部分走正常通道,如黄色地址先从美国发货到中国,正常通过。


在成功到达中国之后,那就是本端内部搞定了。拿出绿色部分,还有一层地址呢,然后国内真正发往想要的客户。至此 GRE 走私过程完成。


四. 为什么叫 GRE 隧道

走私的方式有很多,长期走私的话,隧道是一种比较好的理解是方式。


当你把货物源源不断的从走私通道传输的时候,它就像一个隧道一样,不停的流动起来。这个就是 GRE 隧道协议了。


五. GRE 隧道和云网络


这种走私方式,用在云网络里面,其实就是张三的货,通过正常通道先从美国发往中国,当到达中国之后,再内部分发,从而完成“走私隧道”。


这样张三走张三的走私隧道,李四走李四的走私通道,在感知上,两个人是互相不相干的,从而形成虚拟网络通信。(在同一个线路上,你走你的,我走我的,互相不感知,可以参见上一节的 vlan 门派介绍,云网络基石章节)。


VPN 隧道,其实用的就是上图这样的模式,把一端的局域网,和远处另一端的局域网,隐含的“桥接”起来。



左边的人,认为和右边的人在同一个局域网里面。中间的网络只是走私的通道的“载体”而已,看不到,也不用关心。(ps,因为有承载隧道的这种载体能力,也就是可以在一种协议上,跑另一个网络协议。所以这种隧道网络,有时候也可以叫 OverLay 网络)。


这样隧道就有能把多个不同地方的局域网“连接”在一起能力,从而形成了云网络的模型。


把两头的局域网“透明”的接在一起,这个就是隧道的魅力了。可以看到 kubernetes 里面的 flannel 网络,用的就是这种隧道原理。



你看它可以把每个节点上面的局域网,全部接在一起,让不同节点里面的容器以为自己在一个大的相同的局域网里面。


六. 总结

从 vlan、gre 的出现,一开始只是为了解决报文分门别类、互不干扰,到他们逐渐在云网络里面大展身手成为云网络的基石。这里面其实核心的思路就是:所有的云网络,其实都是障眼法。也就是你想让它(虚拟机/容器)看到它以为的样子。即它自己是不能发现自己在真实网络里面还是虚拟网络里面的。这个跟一个 app 程序,自己是不知道自己跑在虚拟机里面,还是跑在物理机里面是一样的。


这种对于真实世界的模拟,使得目标看到的假象跟真的一样,不仅仅是云网络,更是云的本质。


本文转载自华为云产品与解决方案公众号。


原文链接:https://mp.weixin.qq.com/s/G-dhD1_pOqMp8OYYTTFOHg


2020 年 3 月 26 日 23:14298

评论

发布
暂无评论
发现更多内容

DO、DTO、BO、VO、POJO区别

安琪拉的博客

系统设计

诊所数字化:诊所老板为什么拒绝预约制?

boshi

数字化转型 医院 七日更

开发利器——C语言必备实用第三方库

码哥比特

c c++ Linux 后端 框架

第四章作业

Deborah

CI-基于JMeter的性能测试

夏兮。

翻译:《实用的Python编程》01_04_Strings

codists

人工智能 爬虫 后端 数据结构与算法 Python Monad

【活动回顾】4步2小时,搭建爆火的语音聊天室

ZEGO即构

sonarLint与IntelliJ IDEA 集成

夏兮。

1480. 一维数组的动态和

小马哥

算法 七日更

ElasticSearch.03 - 基本原理

insight

elasticsearch 2月春节不断更

11. 用别人写好的代码,完成我的工作,剩下的时间去摸鱼

梦想橡皮擦

Python 2月春节不断更 python入门

自动化测试中的Page Object

夏兮。

Python PO selenium

【STM32】TIM---基本定时器

AXYZdong

硬件 stm32 2月春节不断更

消息队列Kafka:入门基础

正向成长

kafka

【LeetCode】数组拆分Java题解

HQ数字卡

算法 LeetCode 2月春节不断更

分布式任务框架:xxl-job使用问题整理

程序员架构进阶

分布式任务调度 开源框架 七日更 2月春节不断更 XXL-JOB

SonarQube&Gitlab-CI 实现静态代码分析

夏兮。

ci gitlab SonarQube

第十二周命题作业

cc

第十二周学习心得

cc

第一次异地过年有感

石君

思考 情感

如何搭建自动化测试框架

夏兮。

js puppeteer automation

Jacoco统计web接口/功能测试的代码覆盖率

夏兮。

tomcat WebService JACOCO

日记 2021年2月16日(周二)

Changing Lin

2月春节不断更

数据量大读写缓慢如何优化(5)【读缓存】

我爱娃哈哈😍

redis 缓存 架构设计实战 缓存设计

这是我的第一次JavaScript初级技巧

魔王哪吒

JavaScript 学习 程序员 前端 2月春节不断更

开箱即用cypress

夏兮。

PO Cypress

web自动化测试-puppeteer入门与实践

夏兮。

puppeteer

week12-conclusion

J

LeetCode题解:62. 不同路径,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

深度讲解背包问题:面试中每五道动态规划就有一道是背包模型 ...

宫水三叶的刷题日记

深度思考 LeetCode 动态规划 数据结构与算法 面试数据结构与算法

今日笔记

Nydia

新晋管理者都会遇到的6个问题

新晋管理者都会遇到的6个问题

GRE—用于网络走私的隧道-InfoQ