Linux 下基于Netfilter 的可控NAT 功能实现*
2021-10-03吴华,邓波
吴 华,邓 波
(中国电子科技集团公司第三十研究所,四川 成都 610041)
0 引言
随着互联网应用日益普及,越来越多的电子设备可以接入互联网,导致可用IPv4 地址资源愈发紧缺。为解决这一难题,本文引入了网络地址转换技术[1](Network Address Translation,NAT),让原本无法上网并且使用内部因特网互联协议(Internet Protocol,IP)地址的电子设备可以成功连接互联网。
Linux 操作系统是一个开源的操作系统,具有高效性、灵活性和良好的网络性能等特点,大量应用于各类电子设备。Netfilter 是Linux 3.10 内核的一个子系统,可以完成数据包过滤、连接跟踪、地址转换等重要功能,是一个结构合理、功能强大、扩展性强的网络架构[2-3]。本文将分析Linux 操作系统的Netfilter 框架和NAT 工作原理,并讨论其具体的功能实现进。此外,本文基于Netfilter 框架和Linux系统,设计了一种新的进程间通信方式ukcomm。
1 Netfilter 框架
Netfilter 在传输控制协议/因特网互联协议(Transmission Control protocol/Internet Protocol,TCP/IP)协议栈中定义了5 个检查点(hook)和相应的数据结构,规定了在检查点上对这些数据结构引用的过程。用户只需要在检查点注册一些处理函数(钩子函数),编写符合自己需求的过滤规则,就可对从检查点获取的数据包进行修改、丢弃或发送到用户空间等处理[4]。
Linux 系统的Netfilter 部署于内核态,它在TCP/IP 协议栈的数据转发/处理流程中提供了5 个钩子函数挂接点[5],如图1中5个虚线椭圆框图所示。

图1 Netfilter 框架流程
这5 个钩子函数挂接点具体功能如下文所述。
(1)PRE_ROUTING:位于被路由代码处理之前,因此所有收到的包在进一步接受任何处理之前都必须经过该钩子函数进行处理,可实现非法网络包的快速丢弃。……
