17.14.11.2. 限制连接数量
要限制客户机虚拟机可以建立的连接数量,必须提供规则来设置给定流量类型的连接限制。例如,如果虚拟机应该一次只能 ping 另外一个 IP 地址,应该一次只有一个活跃的 ssh 连接。
例 17.10. 设定到连接的 XML 示例文件
以下 XML 片段可用于限制连接
[...] <rule action='drop' direction='in' priority='400'> <tcp connlimit-above='1'/> </rule> <rule action='accept' direction='in' priority='500'> <tcp dstportstart='22'/> </rule> <rule action='drop' direction='out' priority='400'> <icmp connlimit-above='1'/> </rule> <rule action='accept' direction='out' priority='500'> <icmp/> </rule> <rule action='accept' direction='out' priority='500'> <udp dstportstart='53'/> </rule> <rule action='drop' direction='inout' priority='1000'> <all/> </rule> [...]
注意
在接受流量的规则之前,必须在 XML 中列出限制规则。根据 例 17.10 “设定到连接的 XML 示例文件” 中的 XML 文件,添加允许发送到端口 22 的 DNS 流量进入客户端虚拟机的额外规则,以避免 ssh 会话没有因为 ssh 守护进程 DNS 查找失败的原因而建立。离开此规则可能会导致 ssh 客户端意外挂起,因为它尝试连接。对于处理与跟踪流量相关的超时相关的超时,应格外小心。用户在客户机虚拟机中可能已经终止的 ICMP ping 可能在主机物理计算机的连接跟踪系统中有较长的超时,因此不允许另一个 ICMP ping 进行访问。
最佳解决方案是使用以下命令调整主机物理机器
sysfs
中的超时:# echo 3 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout。此命令将 ICMP 连接跟踪超时设置为 3 秒。这样做的效果是,一旦 ping 被终止,另一个 ping 在 3 秒后可以启动。
如果因为任何原因客户机虚拟机没有正确关闭其 TCP 连接,则会在较长时间内保持打开的连接,特别是在主机物理机器上为大量时间设置 TCP 超时值。另外,任何闲置连接都可能会导致连接跟踪系统中的超时,在数据包交换后可以重新激活。
但是,如果设置限制太低,新启动的连接可能会强制闲置连接到 TCP backoff。因此,应设置连接限制,而不是高,以便新 TCP 连接中波动的流量行为不会导致与闲置连接的关系。