Openstack与Iptables

半兽人 发表于: 2025-09-19   最后更新时间: 2025-09-19 13:41:53  
{{totalSubscript}} 订阅, 14 游览

OpenStack 网络里 iptables 主要是在 Neutron 的各个 Agent 管理的 namespace 中生效,它并不在物理机全局直接写规则(除了少量 SNAT/DNAT 转发),所以不同的场景里 iptables 的作用也不同。以下是几个典型场景:

1. VM → 外网

路径:
VM → br-int → qrouter → qg-xxx → br-ex → 物理网卡 → 外部网关

iptables 作用点:

  • qrouter-namespace (L3 agent)

    • SNAT:把 VM 的私网 IP 转换成 qg-xxx 的外网 IP。

      • 规则在 iptables -t nat -S 里,形如:

        -A neutron-l3-agent-snat -s 172.24.30.0/24 -j SNAT --to-source 10.0.19.106
        
    • 安全组规则不会在这里生效(只在 qbr)。

2. 外网 → VM(比如公网访问 VM 浮动IP)

路径:
外部请求 → br-ex → qrouter → DNAT (浮动IP → 内网IP) → qbr → VM

iptables 作用点:

  • qrouter-namespace

    • DNAT:把浮动 IP 转换成 VM 内网 IP。

      -A neutron-l3-agent-float-snat -d 10.0.19.150/32 -j DNAT --to-destination 172.24.30.10
      
  • qbr-xxx (Linux bridge)

    • VM 的安全组规则在这里:

      • INPUT/FORWARD:控制是否允许 ICMP、TCP/22、TCP/80 等。
      • 如果没放通,会被 DROP。

3. VM → VM(同一台宿主机)

路径:
VM1 → br-int → qbr → VM2

iptables 作用点:

  • qbr-xxx(安全组网桥)

    • 安全组规则生效,控制 VM1 是否能访问 VM2。
    • 默认情况下安全组是 stateful 的,允许已建立连接返回。

4. VM → VM(不同宿主机)

路径:
VM1 → br-int → br-tun (VXLAN/GRE) → 物理网卡 → br-tun → br-int → qbr → VM2

iptables 作用点:

  • 源宿主机

    • qbr-xxx:安全组检查,决定报文能不能发出去。
  • 目标宿主机

    • qbr-xxx:安全组检查,决定报文能不能送给 VM。
  • qrouter 不参与,因为这是同网段内的 L2 通信。

5. 外网 → 内部网络(不经过浮动IP,而是直连路由器网关)

比如你把外部网络直接配置成 provider network,VM 拥有真实的外网 IP。

iptables 作用点:

  • qbr-xxx

    • 安全组规则依然生效。
  • qrouter

    • 不需要 NAT,但可能会有防火墙规则拦截伪造的源地址。

6. DHCP 分配场景

VM → DHCP 请求 → qdhcp-namespace

iptables 作用点:

  • qdhcp-namespace

    • 只负责 DHCP 服务的封装,不会有安全组规则。
  • qbr-xxx

    • 会允许 DHCP 报文(67/68端口),如果安全组里没允许 DHCP,VM 拿不到地址。

总结(iptables 的核心职责)

  1. NAT:在 qrouter-namespace 做 SNAT/DNAT。
  2. 安全组:在每个 VM 对应的 qbr-xxx 上做 ACL。
  3. 隔离控制:L3 agent 可能加额外的过滤,比如防止伪造源 IP。
更新于 2025-09-19
在线,11小时前登录

查看OpenStack更多相关的文章或提一个关于OpenStack的问题,也可以与我们一起分享文章