DDoS防护体系里,流量回注的成败往往卡在二层网络的细节上。很多运维团队发现清洗设备配置无误,但回注流量就是不通,或者回注后业务时断时续,根因十有八九出在VLAN隔离没做透,或者回注路由策略过于粗糙。直接说结论:在清洗中心与骨干网之间,必须用独立的VLAN终结回注流量,同时配合基于源地址的策略路由,才能彻底消除环路风险,并解决非对称路径导致的TCP握手失败。

为什么回注流量必须走独立VLAN

清洗设备完成流量清洗后,需要将正常流量送回骨干网,再转发给源站。如果回注流量和原始脏流量共用同一个广播域,二层环路几乎是必然的。因为清洗设备通常以透明桥或路由模式接入,一旦回注的报文被交换机再次泛洪到引流端口,清洗设备会再次看到同一会话,形成放大效应。解决办法很直接:在核心交换机上创建一个专用的回注VLAN,ID建议使用与业务VLAN完全不同的号段,例如业务VLAN用100-200,回注VLAN直接用900以上。这个VLAN里只放清洗设备的回注口和骨干网路由器的下行口,连成一条点对点的二层通道,不跑任何其他业务流量。

VLAN隔离的具体落地步骤

第一步,在核心交换机上创建回注VLAN,并配置为Access模式或Trunk模式只允许该VLAN通过,取决于你的端口类型。假设清洗设备回注口接在交换机G1/0/1,骨干路由器下行口接在G1/0/2,那么这两个端口都划入VLAN 901。第二步,在交换机上关闭该VLAN的MAC地址学习功能,或者直接配置为静态MAC绑定,防止未知单播泛洪。第三步,在骨干路由器下行子接口上,配置802.1Q封装,终结VLAN 901的流量,并配置一个/30的互联IP地址,对端清洗设备回注口配置同网段IP。这样回注流量在二层就被严格限制在这条链路上,物理上杜绝了向引流端口回灌的可能。

精细化路由策略的核心逻辑

VLAN隔离解决了二层环路,但三层路由策略才是决定回注流量能否正确到达源站的关键。最常见的错误是清洗设备直接用默认路由回注,导致流量被送回骨干网后,又匹配了原来的引流策略,再次被牵引到清洗设备,形成路由环路。正确的做法是策略路由,在清洗设备上根据目的IP来决定下一跳,同时在骨干路由器上根据源IP来区分回注流量和正常流量。这里有一个硬核细节:清洗设备回注时,源IP是源站的真实IP,目的IP是访问者的IP,所以骨干路由器必须识别出“源IP属于源站网段”的报文,将其路由到互联网出口,而不是再次匹配引流路由。

清洗设备侧的路由配置

在清洗设备上,不要写默认路由指向回注下一跳。应该配置一条静态路由,目的网段为源站的公网IP段,下一跳指向骨干路由器在回注VLAN里的接口IP。同时,清洗设备自身的管理流量和心跳流量,必须走单独的管理接口,绝对不能混入回注链路。如果清洗设备支持策略路由,更精细的做法是:匹配源IP为清洗后放行的源站IP,设置下一跳为回注对端,其余流量一律丢弃或走管理口。这样即使攻击者伪造源IP,也不会把脏流量重新注入网络。

骨干路由器侧的精细化策略路由

骨干路由器是防环的最后一道闸门。在路由器的入方向接口,也就是连接清洗设备回注链路的子接口上,应用策略路由。匹配规则很简单:源IP属于源站公网地址池的报文,设置下一跳为互联网出口的下一跳路由器,或者直接走缺省路由出网,但必须跳开引流策略的路由表。具体实现可以用Route-map或Policy-based Routing,匹配ACL后再设置ip next-hop。同时,在引流策略的路由条目上,增加一个前提条件:仅当源IP不是源站地址池时才执行引流。这样双重保险,即使策略路由失效,引流策略也不会把回注流量再次拉走。

非对称路径的TCP序列号问题

流量回注中最隐蔽的坑,是回注路径与原始请求路径不一致导致的TCP序列号错乱。正常访问时,用户到源站的入向路径经过清洗设备,出向路径直接从源站回用户,不经过清洗设备。如果清洗设备只做单向清洗,出向流量不处理,那么TCP三次握手和后续数据传输的序列号是连贯的。但一旦回注流量走了不同的三层路径,比如经过了不同的运营商链路,时延和MTU发生变化,某些中间设备可能会丢弃看似“乱序”的报文。解决这个问题的办法不是强行让回注路径与入向路径一致,而是在清洗设备上启用TCP协议栈的严格校验,并适当调大回注链路的MTU,避免分片。同时,在骨干路由器上对回注流量设置IP DF位清零,允许必要时分片,减少丢包。

多源站场景下的VLAN扩展设计

当清洗设备需要保护多个源站,且这些源站分布在不同的物理机房或不同网段时,单一回注VLAN就不够用了。这时需要为每个源站组分配独立的回注VLAN,或者在同一个回注VLAN内启用VRF隔离。推荐的做法是:在核心交换机上创建多个回注VLAN,每个VLAN对应一个源站组,清洗设备通过子接口或物理接口分别接入这些VLAN。骨干路由器同样用子接口终结每个VLAN,并配置对应的VRF。这样每个源站的回注流量在二层和三层都完全隔离,即使某个源站的回注链路出现故障,也不会影响其他源站。这种设计虽然增加了配置量,但在金融、游戏等对可用性要求极高的场景下,是必须的冗余手段。

实际配置示例与关键命令

下面给出一个典型的清洗设备回注接口配置,假设设备运行Linux系统,回注口eth1,对端路由器IP为10.255.255.1/30:

# 配置回注接口IP
ip addr add 10.255.255.2/30 dev eth1
ip link set eth1 up

# 添加源站网段的静态路由,下一跳为路由器回注口IP
ip route add 203.0.113.0/24 via 10.255.255.1 dev eth1

# 策略路由:仅允许源IP为源站网段的报文从eth1出去
ip rule add from 203.0.113.0/24 table 100
ip route add default via 10.255.255.1 dev eth1 table 100

骨干路由器侧,假设使用Cisco IOS,回注子接口配置:

interface GigabitEthernet0/0.901
 encapsulation dot1Q 901
 ip address 10.255.255.1 255.255.255.252
 ip policy route-map REINJECT-PBR

route-map REINJECT-PBR permit 10
 match ip address REINJECT-ACL
 set ip next-hop 198.51.100.1

ip access-list extended REINJECT-ACL
 permit ip 203.0.113.0 0.0.0.255 any

这套配置的精髓在于,回注流量在路由器入方向就被策略路由直接扔到互联网出口,根本不经过正常的路由表查找,从而绕过了引流策略。

监控与排错的关键指标

配置完成后,不能假设万事大吉。必须监控几个关键点:回注VLAN的接口流量速率,如果看到入方向和出方向流量严重不对称,很可能存在环路或黑洞。清洗设备回注口的丢包计数,如果持续增长,检查MTU和策略路由匹配情况。骨干路由器上策略路由的命中计数,用show route-map命令查看,确保匹配次数与回注报文数一致。还有一个容易被忽略的点:ARP表项。回注VLAN是点对点链路,ARP表应该只有清洗设备和路由器两个条目,如果出现第三个MAC地址,说明有设备误接入,必须立刻排查。

从单机到集群的回注架构演进

当清洗设备从单台扩展到集群,回注架构需要同步升级。多台清洗设备共享同一个回注VLAN时,必须启用VRRP或HSRP做网关冗余,但要注意虚拟IP不能与物理IP冲突。更稳健的做法是每台清洗设备独立一个回注VLAN,上游路由器用ECMP等价多路径分担回注流量,这样单台清洗设备故障不会影响整体回注。但ECMP要求回注流量的源IP分布均匀,否则哈希算法可能导致流量倾斜。可以在清洗设备侧对回注报文的源端口做随机化处理,让五元组更分散,提升ECMP的均衡度。

流量回注的VLAN隔离和精细化路由策略,本质上是在二层和三层同时建立一条单向的、防环的、可冗余的通道。很多人只关注清洗算法和检测精度,却忽视了回注通道的健壮性,结果清洗得再干净,流量送不回去等于零。把VLAN隔离做彻底,把策略路由写精细,再配合持续的监控,这套组合拳打下来,回注链路才能真正做到稳如磐石。