前言

墨迹了大半年,终于把这个玩意墨迹的差不多了。整体的结构跟当初设计的还是有一些偏差的,一部分原因是因为懒,另一部分原因是没人关注没动力,随便搞搞吧。(源码链接见文末)

目录

跟之前基本没有差异

root
  \_ comm: 一些简单的公共依赖:文件描述符的发送、通用协议头
  \_ config: 配置读取及管理
  \_ doc: 这里可能会找到一些文档
  \_ tun: 创建虚拟网卡的
  \_ tunnel: 创建并维护数据流隧道
  \_ utils: 封装的组件:dh群交换、libevents、无锁环形buf等
  \_ xxx: 协商主逻辑

交互过程

整个项目共创建2个进程,fire-xxx-manage与fire-tunnel-manage,交互过程如下:

可以看到交互过程非常简单,整个两台网关设备通信共涉及4个进程:

1. xxx-manage先通过dh群密钥交换协商出share key,接下来的通信全部通过share key保护。

2. 下一步则是分支端向总部发起用户名/密码认证,用户名/密码是提前配置在总部的

3. 认证完成后,整个协商过程就结束了,xxx-manage会将当前的连接描述符直接发送给tunnel-manage,tunnel-manage会复用这个协商连接作为通信连接;同时将总部配置的网段添加到系统路由中,路由目的是tun口

4. tunnel-manage直接定时发送echo报文进行隧道保活

5. xxx-manage定时通过conn info获取tunnel-manage的连接状态,决定是否需要销毁/重建

6. tunnel-manage监听虚拟网卡,抓取收上来的报文,判断如果是tunnel-manage的感兴趣流,就将报文放入环形buf

7. tunnel-manage的消费者线程raw_consumer会不停的处理这些报文并发送到WAN口

8. 注册的WAN收包接口接口在read事件到来时会收取WAN口报文,并在处理后将报文发送至tun口

9. 当前由于数据通信只有一条连接,内核分发按会话五元组(源目的ip/port/proto)进行分发,该连接只能分发在一个核上,所以单隧道场景下会存在性能瓶颈,一个可行的优化方法就是单隧道多连接,按内部流量会话分发至多连接,这样内核也可以将不同的会话分发至不同的核上。

Thank You !

https://github.com/Fireplusplus/fire-engine-vpn

数据安全与虚拟网卡的应用(三)相关推荐

  1. 华三HCL模拟器添加虚拟网卡连接外网、VMware虚拟机、实体机方法

    华三模拟器可以模拟交换机.路由器.防火墙等,由于自带的PC功能有限,因此需要连接到VMware虚拟机或实体机以模拟真实的PC或者FTP\HTTP服务器设备.另外也可以使其连接到互联网,以进行防火墙等的 ...

  2. vmware虚拟机重装后本机没虚拟网卡解决方案及虚拟机的三种网络连接方式详解

    vmware虚拟机重装后本机没虚拟网卡解决方案: 卸载虚拟机时,就算删除了安装路径,在设备管理器中删除了网卡,在注册列表项中删除了vmware列表项,重装后一般还是会出现本机网络连接中没有没有虚拟机默 ...

  3. LINUX驱动开发(三)USB虚拟网卡

    1. 简述 之前见过其他项目组的开发板,发现他们没有网口,但是可以通过IP进行ssh连接和scp文件传输到开发板,百度发现他们用的是USB虚拟网卡,于是我在我的开发板进行测试. 主机:windows ...

  4. 将VMware Workstation 12 Pro的虚拟网卡修改为自己希望的IP网段

    每天在做各种测试的时候,很多地方都会需要填写ip,每次都192.168.237...,每次都必须输入10几位的ip地址,烦不胜烦.简洁为美!我还是喜欢诸如10.1.1.1之类的ip填写,是否可以实现呢 ...

  5. 全志A33-USB虚拟网卡的配置与使用

    开发环境 开发板:A33-Vstar 开发板系统:Linux USB网卡:三星S4.华为P8(USB共享网络) -------------------------------------------- ...

  6. 什么叫有效物理网卡_如何区分虚拟网卡和物理网卡?-阿里云开发者社区

    一.什么是物理网卡和虚拟网卡? 图示如下:红色部分包含VMWare的为虚拟网卡. 通常,我们部署VMWare虚拟机.VMSphere虚拟集群.XenCenter虚拟集群是都会涉及虚拟网卡. 二.辨别物 ...

  7. VMware 虚拟上网的的三种模式 ——bridged、host-only、NAT 模式

    恐怕这是今年在上海的最后的一篇博客了,同事们上班都不工作了,我也没有什么事情要做.为什么要写这篇博客呢,原因是我回家要带上自己的笔记本,里面装了一个虚拟机.平时自己的学习和工作都是在虚拟机里进行的.回 ...

  8. vmware虚拟机里的LINUX不能上网的原因一:虚拟网卡设置

    http://hi.baidu.com/1986v5/item/2e4f1a152ded65038ebde48c 得出结论,如果你的电脑里有两个网卡,都是在一个网段内,那么访问本网段内的其他主机就会有 ...

  9. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

    STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一.简介   本文基于stm32 Rndis实例,github开源, 使用STM32F407单板.结合协 ...

最新文章

  1. matlab中的histc,Matlab histc与矢量箱
  2. Swift 3 网络请求+数据解析
  3. 项目打包publicpath_将项目部署至github和码云
  4. 操作系统之文件管理:7、文件共享与文件保护(软连接、硬链接、口令保护、加密保护、访问控制)
  5. 库克:苹果从没有垄断;微信搜索升级;微软发布首款支持 Linux 的 Office 应用 | 极客头条...
  6. Jetson Nano 读取 GPS数据(TTL转 USB)
  7. 算法学习笔记(5) 传递闭包
  8. coverity代码检测工具介绍_Coverity功能介绍
  9. R语言:数据预处理-缺失值
  10. 海康、大华视频流地址格式
  11. Unity技术手册 - 形状(Shape)子模块 - Sphere球体和 Hemisphere半球和Donut圆环圈
  12. PHP注册登录系统(一)-极简
  13. NLP入门之综述阅读-自然语言处理发展及应用综述
  14. Java程序员 面试如何介绍项目经验? Java程序员应该如何介绍自己的项目经验和自我介绍?面试如何突出自己
  15. 联想电脑计算机无法正常启动怎么办,电脑蓝屏无法启动怎么办
  16. 响应式布局 meta详解
  17. 数据仓库中各个常用英文简写的代表意义
  18. (强制)类型转换方法
  19. 如何用W7100A实现串口转以太网(一)
  20. CSU多媒体技术及应用(实验)

热门文章

  1. 苹果免密支付怎么关闭_支付宝蚂蚁保险怎么关闭?蚂蚁保险怎么样?
  2. java 常量放在哪里_浅谈JAVA中字符串常量的储存位置
  3. 银泰百货打造商场文化高地,推动“商业+文化”水乳交融
  4. HIVE日期函数计算
  5. hive日期函数使用大全
  6. 直击线下K12培训机构的痛点
  7. 基于SSM的java WEB音乐网站
  8. 游戏运维及运营存在问题
  9. Intellig IDEA 中文设置 汉化
  10. 设置当前网页为浏览器首页