# 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 等
    • 替代传统的 ifconfigroute 等工具(属于 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 内核网络子系统
典型工具 iptablesnftables(新版) ipsstc(流量控制)

# 协同工作场景

  • 示例
    1. iproute2 配置一个 VPN 隧道接口(如 tun0)。
    2. iptables 设置规则,将特定流量通过 tun0 路由并加密。
    3. 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
  • 链的一大作用,就是通过默认链完成逻辑,在默认链的基础上用户可进行扩展
  • 扩展途径是通过规则的匹配动作,除了常规的规则匹配动作,还可以转发到自定义链
  • 注意,转发到的自定义链,必须位于同一个表。不同表之间的自定义链无法转发;

# 链的执行顺序

  1. 入口流量
    PREROUTING → 路由判断(目标是否为本地)→
  • 本地:INPUT → 本地进程
  • 转发:FORWARDPOSTROUTING
  1. 出口流量
    本地进程 → OUTPUTPOSTROUTING
  • 注意,这里只是展示了默认链的顺序, 问题的复杂性在于
    • 每个默认链可能存在多个规则
    • 默认链的规则可能导向自定义链
    • 自定义链也可能存在多个规则
    • 多个规则之间从上到下按顺序匹配
    • 不太好调试(通过日志记录,也不太好找出具体的路径)(抓包对运维人员要求高)

# 链的规则匹配顺序

  1. 规则优先级
    按规则顺序从上到下匹配,匹配到第一条规则后停止。
  2. 默认策略
    所有规则未匹配时,执行链的默认策略(ACCEPT/DROP等)。 默认链都有默认策略,自定义链其实也归属于默认链

# 常见规则动作

动作 效果
ACCEPT 允许数据包通过
DROP 直接丢弃数据包(无响应)
REJECT 拒绝数据包并返回错误(如ICMP port-unreachable
SNAT 修改源IP(用于出口NAT)
DNAT 修改目标IP(用于入口NAT)
MASQUERADE 动态IP的SNAT(适用于拨号环境)
LOG 记录日志(不阻止数据包)
RETURN 返回上一级链继续匹配
当前表的自定义链名 使用自定义链进行匹配 ,层层递进

# 关键点

  1. 表优先级raw > mangle > nat > filter
    (同一链中,高优先级表的规则先执行, 一般只需要关注 nat表,filter表)
  2. 常用场景
  • 禁止Pingiptables -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
  • 允许SSHiptables -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

# 核心原理

  1. 基于 Netfilter 的流量拦截

    • IPVS 工作在 Linux 内核的 Netfilter 框架中,通过注册 NF_INET_LOCAL_IN 钩子函数拦截目标为虚拟 IP(VIP)的流量。
    • 当数据包到达时,IPVS 优先于常规协议栈处理,判断是否匹配预定义的虚拟服务(VIP + Port)
  2. 负载均衡算法

    • IPVS 根据配置的算法(如轮询 rr、加权轮询 wrr、最少连接 lc、源地址哈希 sh 等)从后端真实服务器(Real Server)池中选择一个目标服务器。
    • 算法决策基于实时状态(如连接数、权重)动态调整分发策略。
  3. 数据转发模式: IPVS 支持三种核心转发模式:

    • NAT 模式:修改数据包的目标 IP 和端口为真实服务器地址,返回流量需经负载均衡器反向 NAT。
    • DR 模式(Direct Routing):仅修改数据包的目标 MAC 地址为真实服务器,服务器直接响应客户端(需配置 VIP 隐藏)。
    • Tunnel 模式:通过 IP 隧道(如 IPIP)封装数据包,真实服务器解封装后直接响应客户端。
  4. 连接状态跟踪

    • IPVS 维护内核级连接哈希表,记录每个连接(五元组)与真实服务器的映射关系,确保同一会话的流量转发到同一后端。
    • 支持超时机制清理无效连接,减少状态表膨胀。
  5. 用户态与内核态交互

    • 用户通过 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):支持多路由表(默认 mainlocal 等),实现策略路由。
  • 邻居表(Neighbor Table):管理 ARP/NDISC 缓存,替代 arp 命令。

# 2. 优势 vs net-tools

特性 iproute2 net-tools
语法统一性 统一 ip [对象] [操作] 分散命令(ifconfig、route)
功能支持 支持 VLAN、隧道、策略路由 功能有限
内核兼容性 实时同步内核状态 更新滞后

# 四、常用操作与案例

操作 命令示例 说明
查看所有接口 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(防火墙)构建完整网络栈。