RAC私网通信被防火墙阻断的典型表现是节点反复驱逐、clsssInitNative连接失败(rc 9)、IPC SEND超时,虽公共网络连通且OCR可访问,但firewalld默认未放行私网网段流量;需通过firewall-cmd --zone=public --list-ports和--list-rich-rules排查实际规则,临时停用firewalld验证后,应永久添加私网源地址(如firewall-cmd --permanent --zone=public --add-source=192.168.10.0/24)并重载,同时注意SELinux(setsebool -P oracle_execmem 1)和内核参数(somaxconn≥65535)影响。
防火墙阻断RAC私网通信的典型表现
节点启动后反复被驱逐、clsssinitnative: connect failed, rc 9 报错、ipc send timeout 频发,但公共网络ping通、ocr磁盘可访问——这基本锁定为私有网络被防火墙拦截。rac节点间心跳依赖私网(非1521端口),而firewalld默认不放行私网段流量,哪怕你已开放了数据库监听端口。
确认firewalld是否在拦截私网流量
别只查firewall-cmd --list-services,它只显示预定义服务(如oracle-db),对私网IP段无效。必须检查实际规则:
- 运行
firewall-cmd --zone=public --list-ports,确认私网端口(如12345、45678等,具体看crsctl check cluster -verbose输出的IPC端口)未被列出 - 执行
firewall-cmd --zone=public --list-rich-rules,查找是否有拒绝私网IP段(如192.168.10.0/24)的规则 - 临时停用防火墙:
systemctl stop firewalld,再跑crsctl check cluster—— 若立刻变绿,就是它
正确放行RAC私网通信的实操步骤
不能简单加一条--add-port,RAC私网通信是双向、多端口、基于源IP的,必须按网段+协议精准放行:
- 确定私网网段:查
/etc/hosts或oifcfg getif输出,例如192.168.10.0/24 - 永久放行该网段所有TCP/UDP流量:
firewall-cmd --permanent --zone=public --add-source=192.168.10.0/24 - 重载规则:
firewall-cmd --reload - 验证:
firewall-cmd --zone=public --list-sources应含该网段;再用nc -zv node2 12345从node1测试端口连通性
容易被忽略的深层陷阱
即使firewalld配置正确,仍可能失败——因为RAC私网通信还依赖底层IPC机制,而SELinux或内核参数会干扰:
-
setsebool -P oracle_execmem 1必须执行,否则cssd进程无法建立共享内存段 - 检查
/proc/sys/net/core/somaxconn是否≥65535,过低会导致IPC连接队列溢出 - 私网网卡若绑定多个IP(如虚拟IP、GNS VIP),firewalld的
--add-source只认主IP,需额外加对应VIP
真正卡住的点,往往不是“没开防火墙”,而是开了却没开对网段,或者开了网段却被SELinux默默拦下。


















