XDP VNP虚拟以太网关(章节:三)

重点:关于重新注入内核

TCP SYN包

TCP后续包

UDP/ICMP

VNP返回流量

网卡接收

XDP程序

AF_XDP用户态
仅此一次!

查MAPS → XDP_PASS
内核协议栈处理

AF_XDP用户态
VNP帧封装

XDP_TX直接发送

仅SYN包需要重新注入内核
通过raw socket/tun/其它

内核TCP优化
高性能

XDP_TX直接发送
绕过内核

ZC/OC快速响应

后续TCP/IP报文走内核XDP高速通道

备注:基于AF_XDP技术原理,我们并不能通过它重新注入内核,因为它对外发帧时会绕过内核协议栈直通传递到网卡驱动,但可以采用 PF_RING、TUN/TAP、LIBPCAP、AF_PACKET_V3/4 等方式重新注入到内核。

四、自定义路由系统设计

4.1 RIB/FIB路由架构

本系统实现了一套完整的自定义路由系统,独立于操作系统内核路由表,为每个数据包提供灵活的路由决策能力。RIB(路由信息库)负责存储路由策略,FIB(转发信息库)负责快速查找和执行转发决策。

4.1.1 路由结构

路由决策

转发信息库FIB

路由信息库RIB

路由验证与执行

分层查询策略

不可达

可达

路由信息分发

路由变化检测

路由计算

转发表更新

缓存失效处理

工作线程通知

路由动作执行器

VNP隧道

本地网关

发送RST

直接丢弃

动作类型判断

路由动作

隧道封装

本地转发

RST响应

静默丢弃

多路径支持

等价多路径

非等价多路径

权重分配

健康检查

优化转发结构

IPv4前缀树

IPv6前缀树

端口映射表

协议状态表

动态路由学习

ARP表学习

路由跟踪学习

流量特征学习

性能反馈学习

策略路由系统

源地址策略

目的地址策略

协议类型策略

端口范围策略

时间策略

域名策略

静态路由配置

直连路由

静态路由条目

默认路由

黑洞路由

路由规则管理器

FIB管理器

异常处理表

数据包特征提取

快速路径查询

命中快速表?

返回路由结果

策略路由查询

策略匹配?

应用策略路由

常规路由查询

最长前缀匹配

路由存在?

返回最佳路由

默认路由处理

下一跳可达性

可达性状态

备选路由选择

路由信息同步

路由重新计算

4.2 NAT状态跟踪系统

本地转发流量需要NAT状态跟踪,以确保回程流量能够正确转发到原始客户端。本系统实现了完整的NAT状态机,支持TCP、UDP和ICMP协议的状态跟踪。

4.2.1 NAT状态跟踪流程

在这里插入图片描述

五、主动RST响应机制

5.1 RST响应触发条件

在某些情况下,系统需要主动发送TCP RST数据包来终止连接。这主要发生在以下场景:

  1. 路由策略拒绝:当路由决策决定拒绝某个连接时
  2. 资源分配失败:无法分配NAT资源或隧道资源时
  3. 安全策略拦截:连接违反安全策略规则时
  4. 连接状态异常:检测到异常连接状态时

5.2 RST响应生成流程

替代处理方式

连接状态清理

发送优化处理

发送路径选择

触发条件验证

RST数据包构造

直接发送

重新注入

内核发送

TCP头部设置

设置源/目的端口

设置序列号

设置RST标志

设置窗口大小

计算校验和

序列号计算

获取最后ACK号

有有效ACK?

使用ACK+1

使用当前序列号

需要发送RST的决策点

检查连接合法性

连接是否存在?

检查连接状态

无法发送RST

需要主动RST?

验证RST权限

其他处理方式

有权发送RST?

记录日志

获取原始数据包

提取连接信息

构造以太网头部

构造IP头部

查询路由策略

发送路径

通过原始套接字

通过XDP程序

通过内核协议栈

选择发送接口

设置发送优先级

批量发送优化

发送完成处理

更新连接状态表

移除NAT映射

释放资源

记录统计信息

完成处理

记录拒绝原因

更新计数器

可选的通知机制

六、单网卡架构下的流量处理

6.1 单网卡流量分离机制

在单网卡架构下,系统需要处理三种不同类型的流量:本地管理流量、VNP隧道流量和本地转发流量。通过智能的流量分类和转发机制,实现在单一物理接口上的流量分离。

流量路径总结

流量出口处理

AF_XDP用户态处理

XDP处理路径

流量入口处理

流量分类决策

管理流量
目的IP=网关IP

VNP隧道流量

本地客户端流量

TCP豁免流量

需处理流量

VNP隧道

本地转发

阻断连接

出站流量

VNP隧道流量

RST响应

管理响应

本地转发响应

VNP响应

连接终止

物理网卡接收流量

流量类型判断

内核协议栈处理

XDP程序处理

XDP程序处理

VNP流量识别

本地流量识别

流量决策

XDP_PASS到内核

XDP_REDIRECT到AF_XDP

用户态程序接收

DNS流量检测

常规流量处理

DNS分流决策

RIB路由查询

决策结果

隧道封装处理

本地NAT处理

RST响应处理

内核TCP协议栈

物理网卡发送队列

重新注入内核

直接发送RST

本地应用或转发

内核转发

物理网卡发送

物理网络

远程VNP服务器

原始客户端

内网客户端

内网客户端

VNP网关

客户端连接重置

6.2 本地转发流量处理机制

本地转发流量是指那些需要经过NAT转换后发送到本地物理网关的流量。这些流量不经过VNP隧道,直接使用本地运营商的网络出口。

6.2.1 本地转发处理流程

响应处理流程

内核转发流程

内核注入机制

头部重写处理

NAT映射管理

反向NAT转换

地址恢复

存在映射

原始套接字

netlink接口

虚拟设备

无映射

新映射创建

分配外部IP

分配外部端口

创建映射条目

初始化状态

记录映射信息

本地转发决策

提取五元组

查询NAT表

使用现有映射

修改源IP地址

修改源端口

更新IP校验和

更新传输层校验和

调整TTL值

选择注入接口

注入方式

通过raw socket

通过netlink

通过tun/tap

设置套接字选项

构造netlink消息

写入虚拟设备

路由查找

ARP解析

发送队列

物理网卡发送

等待响应

接收响应数据包

查询NAT映射表

映射存在?

丢弃数据包

修改目的IP

修改目的端口

更新校验和

通过AF_XDP发送

发送到原始客户端

记录丢弃原因

七、系统配置与管理

7.1 虚拟网关配置方案

系统支持两种虚拟网关配置模式,适应不同的部署环境和需求。

AF_XDP程序配置

XDP程序配置

配置模式选择

共享物理IP模式

独立虚拟IP模式

虚拟网关配置

部署模式

创建虚拟网络接口

配置虚拟IP地址

设置虚拟MAC地址

配置路由策略

客户端网关指向虚拟IP

复用物理接口IP

配置策略路由

基于端口分流

客户端网关指向物理IP

XDP程序加载

网卡绑定设置

混杂模式配置

MAPS初始化

流量规则加载

用户态程序启动

路由策略加载

DNS规则配置

隧道参数设置

启动工作线程

7.2 路由策略配置示例

系统通过配置文件定义路由策略,支持多种匹配条件和动作类型。

7.2.1 路由策略配置结构
路由策略配置:
├── 全局设置
│   ├── 默认动作: VNP隧道
│   ├── DNS默认策略: 本地解析
│   └── 日志级别: 信息
├── 域名规则
│   ├── 匹配模式: 后缀匹配
│   ├── 规则列表:
│   │   ├── *.github.com -> VNP隧道
│   │   ├── *.cloudflare.com -> VNP隧道
│   │   ├── *.cn -> 本地网关
│   │   └── *.local -> 本地网关
├── IP地址规则
│   ├── CIDR匹配
│   ├── 规则列表:
│   │   ├── 10.0.0.0/8 -> 本地网关
│   │   ├── 192.168.0.0/16 -> 本地网关
│   │   └── 0.0.0.0/0 -> VNP隧道
├── 端口规则
│   ├── 端口范围匹配
│   ├── 规则列表:
│   │   ├── 80,443 -> VNP隧道
│   │   └── 53 -> DNS特殊处理
└── 协议规则
    ├── 协议类型匹配
    └── 规则列表:
        ├── TCP -> 智能处理
        └── UDP -> 快速处理

八、总结

本方案设计了一个基于XDP技术的高性能VNP虚拟以太网关系统,预期可以实现在10G/25G网络环境下的线速处理能力。

重点:

  1. XDP与AF_XDP协同处理:利用XDP实现内核态高速过滤,AF_XDP实现用户态灵活处理,平衡性能与功能需求。

  2. TCP连接智能豁免:通过SYN包检测和MAPS状态跟踪,实现TCP连接的智能豁免机制,充分利用内核协议栈的TCP优化能力。

  3. DNS智能分流:实现基于域名的DNS流量分流,支持CDN优化和访问控制,解决跨境网络访问的常见问题。

  4. 自定义路由系统:构建独立的RIB/FIB路由系统,实现灵活的路由策略控制,支持复杂的流量工程需求。

  5. 单网卡流量分离:在单一物理接口上实现管理流量、VNP流量和本地流量的智能分离和转发。

  6. 主动RST响应机制:在资源分配失败或策略拒绝时,能够主动发送TCP RST数据包,优雅地终止连接。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐