Linux 网络

最后更新: 2026-06-17 09:53:22 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

Linux 通过支持网络命名空间的接口公开网络状态。自 Linux 2.6.25 起, /proc/net 是指向 /proc/self/net 的兼容性符号链接,因此它描述的是执行读取操作的进程所在的 网络命名空间。现代工具通常使用 Netlink,而不是解析 procfs。

IPv4 转发信息库(FIB)决定数据包的发送位置。 /proc/net/route 是它的历史视图;ip route 则通过 Netlink 查询和修改内核。Netlink 是一种 面向消息的套接字族,使用户空间无需添加新的系统调用即可配置和检查内核子系统。 路由、链路、地址、邻居、流量控制和 Netfilter 都使用它。

Netfilter 和 iptables #

Netfilter 在网络栈中提供数据包处理钩子。iptables 是用于 IPv4 的传统用户空间规则管理工具 (IPv6 使用 ip6tables);当前系统通常使用 nftables,但其兼容层仍可接受 iptables 语法。

重要的 iptables 表包括:

  • filter 是默认的过滤表,包含 INPUT、FORWARD 和 OUTPUT 链。
  • nat 对连接的第一个数据包执行地址或端口转换,并包含 PREROUTING、INPUT、OUTPUT 和 POSTROUTING 链。
  • mangle 在多个钩子处修改专用数据包字段。
  • raw 在连接跟踪之前运行,并可通过 NOTRACK 使流量免于连接跟踪。
  • security 在过滤表之后应用强制访问控制标签,用于 SELinux 及相关 Linux Security Module 策略。

规则按照链中的顺序进行评估。INPUT 应用于发往本地套接字的数据包,FORWARD 应用于经过路由的流量, 而 OUTPUT 应用于本地生成的数据包。连接跟踪使后续数据包能够遵循针对其流所作出的决定。

评论

在 GitHub 上阅读或评论(发表评论需要登录)