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

VPN的本质和必要性
市面上VPN方案分类
2. 原理篇 - 核心机制深入
Netfilter Hook Points详解
5个Hook点的触发时机
- NF_INET_PRE_ROUTING
- NF_INET_LOCAL_IN
- NF_INET_FORWARD
- NF_INET_LOCAL_OUT
- NF_INET_POST_ROUTING

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进行转发。