Corosync 和 Pacemaker IPTables 规则

Corosync 和 Pacemaker IPTables 规则

当通过多播地址 226.94.1.1(端口 5405)和 226.94.1.2(端口 5406)将 Corosync 与两个环一起使用时,需要哪些 iptables 规则才能允许两个节点进行最佳通信,而不会提供任何不当访问权限并使规则过于宽松?

我目前有:

iptables -A INPUT -p udp -m multiport --dports 5404,5405,5406 -j ACCEPT

这是否允许 Corosync/Pacemaker 设置两个环所需的所有通信?

我听到过这样的争论:

iptables -I INPUT 1 -m pkttype --pkt-type multicast -j ACCEPT

是必需的。但是,如果我上面列出的第一条规则已经存在,我似乎无法复制这种帮助的情况。

Red Hat 文档似乎支持第一种方法。有些 IBM 文档支持第二种方法,但这是否只是一条规则过于宽松的案例,因为第一种方法同样可以完成工作,而且不会打开不必要的端口?

我更倾向于第一条规则就足够了,但想就此事获得更多意见。

答案1

Red Hat 和 IBM 的文档指定的规则实际上允许比实际需要更多的数据包。

多播 IP 数据包与单播 IP 数据包实际上没有太大区别,唯一的区别(除了它们在第 2 层发送和路由的方式之外)是目标地址,该地址必须在 224.0.0.0/4 范围内。

作为在 Server Fault 上描述,可以对单个 Corosync 环使用以下规则(假设该OUTPUT链不阻止任何流量):

iptables -A INPUT -p igmp -i $corosync_interface -j ACCEPT
for src_addr in $ip_addr_self $ip_addr_partner1 $ip_addr_partner2; do
  iptables -A INPUT -i $corosync_interface -s $src_addr -d $ip_addr_self \
    -p udp --source-port $(($corosync_port - 1)) \
    --destination-port $corosync_port -j ACCEPT
  iptables -A INPUT -i $corosync_interface -s $src_addr -d $ip_addr_mcast \
    -p udp --source-port $(($corosync_port - 1)) \
    --destination-port $corosync_port -j ACCEPT
done

在此示例中,假设定义了以下变量:

  • $corosync_interface:Corosync 使用的网络接口
  • $ip_addr_self:Corosync 本地绑定的 IP 地址(按bindnetaddr指定corosync.conf
  • $ip_addr_partner1$ip_addr_partner2:其他 Corosync 节点的 IP 地址 - 如果集群有三个以上的节点,则可以添加更多节点。
  • $ip_addr_mcast:用于 Corosync 的多播地址(按mcastaddr指定corosync.conf
  • $corosync_port:Corosync 使用的(目标)端口(如mcastport中指定corosync.conf

对于多个环,可以使用相同的方法,但更改接口名称、IP 地址和端口号以匹配各自的定义。

与文档中指定的规则相比,上述规则仅限于特定接口、源地址和源端口,而目标端口仅限于单个端口。实际上,Corosync 不会将数据包发送到多个目标端口,它只是使用不同的端口(目标端口减一)来发送数据和接收数据。

相关内容