缺省情况下,具有多个接口的系统(也称为多宿主主机)基于路由表中到通信目的地的最长匹配路由来路由其网络通信。如果存在多个长度相等的到目的地的路由路径,则 Oracle Solaris 将应用等成本多路径 (Equal-Cost Multi-Path, ECMP) 算法将通信分布到这些路由。
以此方式对通信进行分布并非始终合适。例如,可能会通过多宿主主机上的一个接口发送 IP 包,但是此主机与该包中的 IP 源地址不位于同一子网上。此外,如果传出数据包是对某传入请求(例如 ICMP 回显请求)的响应,则请求和响应可能不经过相同的接口。此类型的通信路由配置称为非对称路由。如果您的 Internet 服务提供商 (Internet service provider, ISP) 按照 RFC 3704 中所述实现准入过滤,则非对称路由配置可能导致 ISP 丢弃传出数据包。
RFC 3704 旨在限制拒绝服务 (denial-of-service, DoS) 攻击在 Internet 上扩散。为了与它保持一致,必须将您的网络配置为对称路由。使用 IP hostmodel 属性可以满足此要求。此属性控制通过多宿主主机接收或传送 IP 数据包的行为。
hostmodel 属性可以具有以下三个可能值之一:
对应于 RFC 1122 中定义的强端系统 (end system, ES) 模型。此值实现对称路由。
对应于 RFC 1122 中定义的弱 ES 模型。在采用此值的情况下,多宿主主机使用非对称路由。
通过使用首选路由配置数据包路由。如果路由表中存在多个目的地路由,则首选路由是使用在其上配置了传出数据包 IP 源地址的接口的那些路由。如果不存在这样的路由,则传出数据包将使用到数据包的 IP 目的地的最长匹配路由。
例如,如下所示在多宿主主机上实现 IP 包的对称路由:
# ipadm set-prop -p hostmodel=strong ipv4 # ipadm set-prop -p hostmodel=strong ipv6 # ipadm show-prop -p hostmodel ip PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE ipv6 hostmodel rw strong -- weak strong, src-priority, weak ipv4 hostmodel rw strong -- weak strong, src-priority, weak