数据安全与虚拟网卡的应用
Posted Fireplusplus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据安全与虚拟网卡的应用相关的知识,希望对你有一定的参考价值。
前言
墨迹了大半年,终于把这个玩意墨迹的差不多了。整体的结构跟当初设计的还是有一些偏差的,一部分原因是因为懒,另一部分原因是没人关注没动力,随便搞搞吧。(源码链接见文末)
目录
跟之前基本没有差异
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
以上是关于数据安全与虚拟网卡的应用的主要内容,如果未能解决你的问题,请参考以下文章