Skip to content

1. 概述篇 - Linux网络包处理与VPN基础

Linux网络包处理流程

image-20251002164524984

VPN的本质和必要性

市面上VPN方案分类

2. 原理篇 - 核心机制深入

Netfilter Hook Points详解

5个Hook点的触发时机

  1. NF_INET_PRE_ROUTING
  2. NF_INET_LOCAL_IN
  3. NF_INET_FORWARD
  4. NF_INET_LOCAL_OUT
  5. NF_INET_POST_ROUTING

image-20251002164910516

TUN/TAP设备工作原理

TUN vs TAP使用场景

路由表配置原理

3. 设计篇 - 架构思考

VPN架构设计要点

客户端-服务器 vs 点对点架构

协议选择考虑

为什么WebSocket不适合VPN

websocket协议实践下来,延迟抖动很明显。

加密方案设计

4. 实现篇 - 工程化要点

核心组件设计

基础实现模型

# 保留原有的双线程模型作为基础示例
tun_fd: int
conn_fd: int

# thread 0 - 网络到TUN
while True:
  packet_ciphertext = read(conn_fd)  # 从连接读取IP包
  packet_plaintext = decrypt(packet_ciphertext)  # 解密
  write(tun_fd, packet_plaintext)  # 转发IP包,由linux内核来处理路由

# thread 1 - TUN到网络
while True:
  packet_plaintext = read(tun_fd)
  packet_ciphertext = encrypt(packet_plaintext)
  write(conn_fd, packet_ciphertext)  # 将IP包转发给peer connection

连接管理和状态维护

路由决策引擎

VPN节点需要实现路由管理:若节点有多个连接,需要parse packet,确定source、destination,然后根据路由表,选择不同的connection进行转发。

性能优化策略

网络IO优化

加密算法选择和优化

内存管理最佳实践

5. 安全篇 - 威胁和防护

VPN安全威胁模型

密钥管理和交换

认证和授权机制

流量分析防护

6. 对比篇 - 方案选择

主流VPN方案对比

OpenVPN vs WireGuard vs 自研

各方案适用场景

技术选型决策树

7. 实战篇 - 部署和运维

部署最佳实践

服务器配置和优化

客户端适配要点

监控和告警

故障排查指南

常见问题和解决方案

性能分析工具

日志分析技巧

References