必须放行public ip、private ip和haip网段三类源地址;需为私网段同时开放tcp/udp全端口,scan监听端口须与srvctl配置一致,并为管理ip单独设置ssh白名单。

firewalld 必须放行三类源地址,不能只开 1521/tcp
Oracle RAC 节点间通信严重依赖私网、公网 VIP/SCAN 和 HAIP 三个网络平面,firewalld 默认规则会拦截关键流量,仅开放 1521/tcp 会导致 CRS 启动失败、节点被驱逐、OCR 同步中断等故障。
- 所有 PUBLIC IP(含物理 IP、VIP、SCAN IP):如
172.16.100.19、172.16.100.119、172.16.100.100 - 所有 PRIVATE IP(私网真实地址,不是网卡名):如
100.100.100.19、100.100.100.30 - HAIP 网段
169.254.0.0/16:Oracle 11.2.0.2+ 强制使用,必须用 CIDR 段,不能只加单个 HAIP 地址
错误做法是逐条添加单 IP rich-rule,漏掉任意一个 HAIP 或私网地址都可能触发 CRS-4639: Could not contact Oracle High Availability Services。正确方式优先按网段批量放行:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.100.0/24" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="169.254.0.0/16" accept'
私网必须同时放开 TCP 和 UDP 全端口范围
RAC 私网通信大量使用 UDP(GCS/GES 消息、心跳包),且后台进程(如 PMON、LMD)会主动发起连接并绑定临时端口。只开 1521/tcp 会导致 gc cr block busy 等等待事件飙升、资源争用超时。
- 私网段必须显式放开
port protocol="tcp" port="1-65535"和port protocol="udp" port="1-65535" - 公网业务访问建议放开临时端口范围(如
9000-65500),但需与系统一致:cat /proc/sys/net/ipv4/ip_local_port_range - 若系统返回
9000 65500,firewalld 规则就不能写1024-65535——多开低端口无意义,反而扩大攻击面
示例(针对私网段):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" port protocol="tcp" port="1-65535" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="100.100.100.0/24" port protocol="udp" port="1-65535" accept'
SCAN 监听器端口配置需与实际监听列表对齐
SCAN 监听器默认只监听 1521,但若集群运行多个数据库并分配不同端口(如 1521、1525、1526),仅开放 1521/tcp 会导致客户端连不上非默认端口的实例。
- 用
srvctl config scan_listener查看当前监听端口列表 - 用
srvctl modify scan_listener -p "TCP:1521/TCP:1525/TCP:1526"添加端口 - 重启后执行
lsnrctl status LISTENER_SCAN1,确认输出中包含所有目标端口的(PORT=xxx)条目 - firewalld 需同步开放这些端口:
firewall-cmd --permanent --add-port=1525/tcp、firewall-cmd --permanent --add-port=1526/tcp
注意:SCAN 监听器本身不处理业务连接转发,它只做初始分发;后续连接重定向到实例本地监听器的随机端口,所以业务网段仍需配合放开临时端口范围。
堡垒机 SSH 和管理网段要单独白名单,别混进私网规则
管理通道(如堡垒机跳转)和 RAC 私网通信逻辑隔离,把管理 IP 加进私网 rich-rule 会导致策略混乱,且无法精准审计或限制权限。
- 堡垒机 IP 应单独加 rich-rule,例如:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.50/32" port port="22" protocol="tcp" accept' - 禁止用
firewall-cmd --permanent --remove-service=ssh后又手动开22/tcp——这会绕过 firewalld 的 service 机制,导致 reload 后失效 - 若需保留 SSH 服务但限制来源,应禁用默认
sshservice,改用带 source 的 rich-rule 控制
HAIP 和私网地址常动态变化,而管理 IP 固定;混用会增加维护成本,也容易在节点扩容或网络调整时遗漏更新。











