拓扑结构
业务需求
某网络需在网络出口区部署Anti-DDoS设备,现需要将南北向业务流量(本案例使用PC1<—>PC2间流量模拟)进行静态引流至清洗设备(本案例使用Router型号模拟器模拟)。
方案规划
1.在出口路由器R1连接南北向业务流的任意一个接口上绑定一个VPN实例(本案在连接PC1的端口下绑定VPN实例),使得绑定了VPN实例的接口在接收到流量并做后续转发时,在VPN实例对应的VPF中查找目的路由对应的下一跳进行转发
2.使用静态路由将去往目的地(本案例PC2为目的地)的下一跳指向清洗设备,也就是R1设备查询VRF时,下一跳指向清洗设备
3.R1设备连接清洗设备的物理端口划分为两个逻辑子接口,并将其中一个子接口也绑定到之前创建的VPN实例下,做为引流接口,另外一个子接口作为流量回注口。
4.R1设备通过配置的静态路由经由引流接口将业务流量发送至清洗设备
5.交换机仅作为互联设备,两边互联接口的端口类型设置为Trunk,并将逻辑子接口上绑定的VLAN ID在接口下放行即可
6.作为清洗设备也需要将其连接业务设备的接口划分成两个逻辑子接口,按照R1设备的配置规划相应的引流接口和回注接口,之后再需要通过配置静态路由让其知晓去往PC1以及PC2的下一跳地址即可,需要注意的是此处要避免下一跳指错。
相比“静态路由+策略路由重定向”的方案,本方案在配置层面做了极大的精简和优化
配置实现
PC1:
PC2:
R1:
sysname r1
#
vlan batch 10 20
#
ip vpn-instance vpn1
ipv4-family
route-distinguisher 1:1
#
interface Ethernet0/0/0.1
dot1q termination vid 10
ip binding vpn-instance vpn1
ip address 1.1.1.1 255.255.255.0
arp broadcast enable
#
interface Ethernet0/0/0.2
dot1q termination vid 20
ip address 2.2.2.1 255.255.255.0
#
interface Ethernet0/0/1
ip binding vpn-instance vpn1
ip address 1.1.0.254 255.255.255.0
#
interface GigabitEthernet0/0/0
ip address 2.2.0.254 255.255.255.0
#
ip route-static 1.1.0.0 255.255.255.0 2.2.2.2
ip route-static vpn-instance vpn1 2.2.0.0 255.255.255.0 1.1.1.2
#
return
LSW1:
sysname Sw
#
vlan batch 10 20
#
interface Ethernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface Ethernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
#
return
清洗设备:
sysname CleanDevice
#
vlan batch 10 20
#
interface Ethernet0/0/0.1
dot1q termination vid 10
ip address 1.1.1.2 255.255.255.0
arp broadcast enable
#
interface Ethernet0/0/0.2
dot1q termination vid 20
ip address 2.2.2.2 255.255.255.0
arp broadcast enable
#
ip route-static 1.1.0.0 255.255.255.0 1.1.1.1
ip route-static 2.2.0.0 255.255.255.0 2.2.2.1
#
return
转发原理
以PC1访问PC2为例
- 因为不知道目的网段,把目的ip地址 2.2.0.1和自身掩码255.255.255.0做与运算。得出目的网段位2.2.0.0/24
- 把源IP地址与掩码做与运算,得出本机网段1.1.0.0/24
- 由于目的网段和本机网段不同,因此检查是否配置了网关。
- 若没有配置网关,会直接把数据包发送给目的地址2.2.0.1,进而在ARP缓存表中查找2.2.0.1的条目。
- 此图中PC1配置了网关1.1.0.254 ,PC1在发送数据给2.2.0.1时先把数据发送给网关处理。
- 在PC1的ARP缓存表中查找网关1.1.0.254的MAC地址,没有命中。
- 触发ARP miss报文上送CPU,CPU通知ARP模块进行ARP学习过程。
- PC1经过一次ARP过程学习到网关的1.1.0.254的MAC。
- PC1发送数据包目的地址2.2.0.1 ,源地址1.1.0.1 ,目的MAC 网关 ,源MAC PC1,从E0/0/1接口发送。
- R1路由器的E0/0/1接口收到一份目的MAC为自身接口的数据帧,接受并处理,自学习计入MAC表。同时由于接口绑定VPN实例,在VRF中查找,通过最长掩码匹配得到去往2.2.0.1路由可达,下一跳走1.1.1.2。
- 通过查找ARP缓存表和ARP学习过程,学习得1.1.1.2对应MAC为清洗设备的E0/0/0.1接口MAC。
根据VRF的转发表把报文从E0/0/0.1接口发出。其中源IP 1.1.0.1 ,目的IP 2.2.0.1 ,源MAC R1的E0/0/0.1接口MAC,目的MAC R2的E0/0/0.1接口MAC ,并携带vlan标签10 - SW1的E0/0/1为trunk接口收到带tag10的数据帧,源MAC学习加入vlan10的MAC表中,或刷新表项(ARP时已经学到),由于trunk接口放行列表中有vlan10,又因为pvid为1,因此接收报文但不剥离标签。
- SW1交换模块认为收到带vlan10的数据,在vlan10的MAC表中查找目的MAC,命中E0/0/02出接口,且E0/0/02接口作为trunk接口放行列表中允许vlan10通过。
- 由于E0/0/02接口PVID为1,因此交换机SW1从E0/0/2接口携带vlan10标签转发。 报文源目IP 源目MAC均不改变。
- R2设备从E0/0/0.1接口收到带tag10标记数据帧目的mac为自身,接收并处理 根据dot1q剥离tag10标签
- 在IP路由表中根据最长掩码匹配查找得去往2.2.0.1下一跳2.2.2.1
- 查找ARP缓存,经过ARP学习2.2.2.1对应MAC,查找转发表,指导数据从出接口E0/0/0.2转发。 dot1q封装携带标签20 ,源IP1.1.0.1 ,目的IP 2.2.0.1 ,源MAC R2 E/0/0.2的接口MAC ,目的MAC R1E0/0/0.2接口MAC
- SW1的E0/0/2为trunk接口收到带tag20的数据帧,源MAC学习加入vlan20的MAC表中,或刷新表项(ARP时已经学到)
- 由于trunk接口放行列表中有vlan20,又因为pvid为1,因此接收报文但不剥离标签。
- SW1交换模块认为收到带vlan20的数据,在vlan20的MAC表中查找目的MAC,命中E0/0/01出接口。 且E0/0/02接口作为trunk接口放行列表中允许vlan20通过。
- 由于E0/0/2接口PVID为1,因此交换机SW1从E0/0/2接口携带vlan20标签转发。 报文源目IP 源目MAC均不改变。
- R1设备从E0/0/0.2接口收到带tag20标签数据帧目的mac为自身,接收并处理 根据dot1q剥离tag20标签
- 在IP路由表中根据最长掩码匹配查找得去往2.2.0.1下一跳2.2.0.254,查找ARP缓存,经过ARP学习2.2.0.1对应MAC,查找转发表,指导数据从出接口G0/0/0转发。报文源IP1.1.0.1,目的IP 2.2.0.1,源MAC R1 G0/0/0的接口MAC,目的MAC PC2 MAC
回程类似。
结果测试
PC1访问PC2路径: