# iproute与iptables的区别
# 1. iptables
所属领域:网络安全/防火墙
主要功能:
- 用于配置 Linux 内核的防火墙规则(如包过滤、网络地址转换 NAT、端口转发等)。
- 管理网络流量(允许/拒绝数据包、设置 NAT、标记数据包等)。
- 工作在网络层(IP)和传输层(TCP/UDP)。
典型用途:
- 过滤特定 IP 或端口的流量。
- 实现 NAT(例如共享网络或端口映射)。
- 防止 DDoS 攻击或限制连接速率。
示例命令:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许 HTTP 流量 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # NAT 配置
# 2. iproute2
所属领域:网络配置与路由管理
主要功能:
- 提供一套工具(如
ip
命令)用于管理网络接口、路由表、策略路由、隧道、VLAN 等。 - 替代传统的
ifconfig
、route
等工具(属于net-tools
包),功能更强大。 - 直接与 Linux 内核的网络子系统交互,支持更复杂的网络配置。
- 提供一套工具(如
典型用途:
- 配置网络接口(IP 地址、MAC 地址)。
- 管理路由表(静态路由、多路径路由)。
- 设置流量控制(QoS)、虚拟网络设备(如 VLAN、VXLAN)。
示例命令:
ip addr add 192.168.1.10/24 dev eth0 # 为 eth0 添加 IP 地址 ip route add default via 192.168.1.1 # 设置默认网关 ip link set eth0 up # 启用 eth0 接口
# 核心区别
特性 | iptables | iproute2 |
---|---|---|
领域 | 防火墙与流量控制 | 网络配置与路由管理 |
操作对象 | 过滤/修改数据包(包处理) | 管理接口、路由、隧道(网络层) |
依赖的子系统 | Netfilter 框架 | Linux 内核网络子系统 |
典型工具 | iptables 、nftables (新版) | ip 、ss 、tc (流量控制) |
# 协同工作场景
- 示例:
- 用
iproute2
配置一个 VPN 隧道接口(如tun0
)。 - 用
iptables
设置规则,将特定流量通过tun0
路由并加密。 - 用
iproute2
的路由策略,决定哪些流量走默认网关,哪些走 VPN。
- 用
# 总结
- iptables 是防火墙工具,用于控制数据包的允许/拒绝/修改(安全领域)。
- iproute2 是网络配置工具,用于管理接口、路由和复杂网络拓扑(网络管理领域)。
- 两者通常结合使用,共同实现复杂的网络架构和安全策略。
# iptables
# 组成
- 防火墙filter + nat网关
# iptables 核心笔记
# 四表五链
- 一般情况下,只需要关注fiter表与nat表即可
表 | 用途 | 包含的链 |
---|---|---|
filter | 数据包过滤(默认表) | INPUT、FORWARD、OUTPUT |
nat | 网络地址转换(NAT) | PREROUTING、INPUT、OUTPUT、POSTROOUTING |
mangle | 修改数据包(TTL、QoS等) | 所有链(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING) |
raw | 连接跟踪豁免(如不跟踪特定包) | PREROUTING、OUTPUT |
- 链的一大作用,就是通过默认链完成逻辑,在默认链的基础上用户可进行扩展,
- 扩展途径是通过规则的匹配动作,除了常规的规则匹配动作,还可以转发到自定义链
- 注意,转发到的自定义链,必须位于同一个表。不同表之间的自定义链无法转发;
# 链的执行顺序
- 入口流量:
PREROUTING
→ 路由判断(目标是否为本地)→
- 本地:
INPUT
→ 本地进程 - 转发:
FORWARD
→POSTROUTING
- 出口流量:
本地进程 →OUTPUT
→POSTROUTING
- 注意,这里只是展示了默认链的顺序, 问题的复杂性在于
- 每个默认链可能存在多个规则
- 默认链的规则可能导向自定义链
- 自定义链也可能存在多个规则
- 多个规则之间从上到下按顺序匹配
- 不太好调试(通过日志记录,也不太好找出具体的路径)(抓包对运维人员要求高)
# 链的规则匹配顺序
- 规则优先级:
按规则顺序从上到下匹配,匹配到第一条规则后停止。 - 默认策略:
所有规则未匹配时,执行链的默认策略(ACCEPT/DROP等)。 默认链都有默认策略,自定义链其实也归属于默认链。
# 常见规则动作
动作 | 效果 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包(无响应) |
REJECT | 拒绝数据包并返回错误(如ICMP port-unreachable ) |
SNAT | 修改源IP(用于出口NAT) |
DNAT | 修改目标IP(用于入口NAT) |
MASQUERADE | 动态IP的SNAT(适用于拨号环境) |
LOG | 记录日志(不阻止数据包) |
RETURN | 返回上一级链继续匹配 |
当前表的自定义链名 | 使用自定义链进行匹配 ,层层递进 |
# 关键点
- 表优先级:
raw
>mangle
>nat
>filter
(同一链中,高优先级表的规则先执行, 一般只需要关注 nat表,filter表) - 常用场景:
- 禁止Ping:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
- 端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
- 允许SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
总结:
- 表决定功能(过滤/NAT/修改),链决定生效阶段(入口/转发/出口),规则决定生效条件及处理结果
- 规则按顺序匹配(链中包含的就是规则,还可以自定义链),动作决定数据包命运,默认策略兜底。
# IPVS
核心区别:功能定位与性能
# 1. 功能定位
IPVS (IP Virtual Server)
- 定位:专为四层负载均衡设计(传输层,如TCP/UDP)。
- 用途:高性能流量分发(如反向代理、集群负载均衡)。
- 支持算法:轮询(RR)、加权轮询(WRR)、最少连接(LC)等。
iptables
- 定位:通用包过滤/NAT工具(网络层/传输层)。
- 用途:防火墙、NAT、简单流量转发(DNAT/SNAT)、端口映射。
- 负载均衡能力:通过
statistic
模块支持简单轮询,但非专业级。
# 2. 工作层级与性能
维度 | IPVS | iptables |
---|---|---|
工作层级 | 内核态,直接处理INPUT 链流量 | 用户态规则匹配,遍历多条链(PREROUTING/POSTROUTING等) |
性能 | 高并发下更高效(哈希表存储连接) | 规则多时性能下降(线性匹配规则) |
适用场景 | 大规模负载均衡(如K8s Service) | 中小规模转发、防火墙、简单NAT |
# 核心原理
基于 Netfilter 的流量拦截
- IPVS 工作在 Linux 内核的 Netfilter 框架中,通过注册
NF_INET_LOCAL_IN
钩子函数拦截目标为虚拟 IP(VIP)的流量。 - 当数据包到达时,IPVS 优先于常规协议栈处理,判断是否匹配预定义的虚拟服务(VIP + Port)。
- IPVS 工作在 Linux 内核的 Netfilter 框架中,通过注册
负载均衡算法
- IPVS 根据配置的算法(如轮询
rr
、加权轮询wrr
、最少连接lc
、源地址哈希sh
等)从后端真实服务器(Real Server)池中选择一个目标服务器。 - 算法决策基于实时状态(如连接数、权重)动态调整分发策略。
- IPVS 根据配置的算法(如轮询
数据转发模式: IPVS 支持三种核心转发模式:
- NAT 模式:修改数据包的目标 IP 和端口为真实服务器地址,返回流量需经负载均衡器反向 NAT。
- DR 模式(Direct Routing):仅修改数据包的目标 MAC 地址为真实服务器,服务器直接响应客户端(需配置 VIP 隐藏)。
- Tunnel 模式:通过 IP 隧道(如 IPIP)封装数据包,真实服务器解封装后直接响应客户端。
连接状态跟踪
- IPVS 维护内核级连接哈希表,记录每个连接(五元组)与真实服务器的映射关系,确保同一会话的流量转发到同一后端。
- 支持超时机制清理无效连接,减少状态表膨胀。
用户态与内核态交互
- 用户通过
ipvsadm
工具配置虚拟服务(VIP)、真实服务器池及算法,规则通过 Netlink 或 ProcFS 传递到内核。 - 内核模块直接处理数据平面流量,实现高性能转发(无用户态参与)。
- 用户通过
# iptables实践
- natter的iptables转发,经过nat表的PREROUTING进行DNAT,之后进入filter表的INPUT;此时,PREROUTING经过了一次DNAT之后,后续的PREROUTING就不会触发了。
- 进行了DNAT之后,会立即进行路由决策,进入INPUT或者FORWARD, 这与大模型给出的结果不一样,不能过于依赖大模型。
- 对于进入了INPUT链的服务,单机基于iptables的方案,将无法进入k8s的服务中,有大坑。
- 此时采用ipvs方案,可以进入k8s服务,ipvs是基于INPUT的!
# iproute2 笔记
# 一、概述
iproute2 是 Linux 系统下的网络配置工具集,替代传统的 net-tools
(如 ifconfig、route),提供更强大、统一的网络管理功能。
- 核心组件:
ip
命令(主工具)、ss
(替代 netstat)、tc
(流量控制)、bridge
(网桥管理)等。 - 内核依赖:基于 Linux 内核的
netlink
接口,直接与内核通信,支持实时更新网络配置。
# 二、发展历程
阶段 | 关键事件 |
---|---|
1999年 | Alexey Kuznetsov 开发 iproute2,随 Linux 2.2 内核发布,旨在替代 net-tools。 |
2000s | 逐步成为主流,支持现代网络功能(如策略路由、VLAN、隧道等)。 |
2010s至今 | net-tools 停止维护,iproute2 成默认工具,持续更新适配新内核特性。 |
# 三、核心理论
# 1. 核心概念
- 网络命名空间(Network Namespace):隔离网络栈,实现容器化网络。
- 路由表(Routing Table):支持多路由表(默认
main
、local
等),实现策略路由。 - 邻居表(Neighbor Table):管理 ARP/NDISC 缓存,替代
arp
命令。
# 2. 优势 vs net-tools
特性 | iproute2 | net-tools |
---|---|---|
语法统一性 | 统一 ip [对象] [操作] | 分散命令(ifconfig、route) |
功能支持 | 支持 VLAN、隧道、策略路由 | 功能有限 |
内核兼容性 | 实时同步内核状态 | 更新滞后 |
# 四、常用操作与案例
# 1. 接口管理(ip link)
操作 | 命令示例 | 说明 |
---|---|---|
查看所有接口 | ip link show | 显示接口状态与 MAC 地址 |
启用/禁用接口 | ip link set eth0 up | 替代 ifconfig eth0 up |
修改接口 MTU | ip link set eth0 mtu 1500 | 设置 MTU 值 |
案例:创建 VLAN 接口
ip link add link eth0 name eth0.10 type vlan id 10
# 2. IP 地址管理(ip addr)
操作 | 命令示例 | 对比 net-tools |
---|---|---|
添加 IP 地址 | ip addr add 192.168.1.2/24 dev eth0 | 替代 ifconfig eth0 add |
删除 IP 地址 | ip addr del 192.168.1.2/24 dev eth0 | |
查看 IP 地址 | ip addr show eth0 | 替代 ifconfig eth0 |
案例:为接口添加多个 IP
ip addr add 192.168.1.10/24 dev eth0
ip addr add 192.168.1.11/24 dev eth0
# 3. 路由管理(ip route)
操作 | 命令示例 | 对比 net-tools |
---|---|---|
添加默认路由 | ip route add default via 192.168.1.1 | 替代 route add default gw |
添加静态路由 | ip route add 10.0.0.0/24 via 192.168.1.1 | |
查看路由表 | ip route show | 替代 route -n |
案例:多路由表策略路由
# 创建自定义路由表
echo "200 custom_table" >> /etc/iproute2/rt_tables
ip route add 10.0.0.0/24 via 192.168.2.1 table custom_table
ip rule add from 192.168.2.0/24 lookup custom_table
# 4. 邻居表管理(ip neigh)
操作 | 命令示例 | 对比 net-tools |
---|---|---|
查看 ARP 表 | ip neigh show | 替代 arp -n |
删除 ARP 条目 | ip neigh del 192.168.1.1 dev eth0 |
# 5. 高级功能
- 隧道配置:
ip tunnel add tun0 mode gre remote 203.0.113.5 local 198.51.100.2
- 网络命名空间:
ip netns add ns1 # 创建命名空间 ip link set eth1 netns ns1 # 将接口移入命名空间
# 五、历史对比(iproute2 vs net-tools)
功能 | iproute2 命令 | net-tools 命令 |
---|---|---|
查看接口状态 | ip link show | ifconfig |
添加路由 | ip route add | route add |
查看路由表 | ip route show | route -n |
查看套接字统计 | ss -tuln | netstat -tuln |
# 六、总结
- iproute2 定位:现代 Linux 网络管理的基石,支持容器化、复杂路由等场景。
- 学习建议:掌握
ip
命令的模块化语法(ip [对象] [操作]
),优先替代 net-tools。 - 扩展工具:结合
ss
(分析连接)、tc
(流量控制)、nftables
(防火墙)构建完整网络栈。