策略路由与DHCP共同使用时客户端不能获取地址的


一、       组网需求

在核心交换机S7506E-S的V5平台下(S7500E在R67XX版本之后,S10500在R12XX版本之后)的同一个三层虚接口下,既配置DHCP SERVER或者DHCP RELAY,同时又通过PBR或QoS做策略路由。希望下连PC能够通过DHCP获取到地址,之后再通过PBR或者QoS做策略路由。

二、       组网图

 

如图所示,两台S7506E-S和两台MSR36-40分别通过IRF2做堆叠,S7506E-SMSR36-40通过两条链路互联,保证两者直连的连通性。其中一条链路的互联地址采用2.2.2.0/24网段,另一条链路地址采用3.3.3.0/24网段。MSR36-40上创建一个Lookback 0接口,地址为100.0.0.1,同时配置默认路由指回S7506E-S

三、    配置步骤:

下文均以DHCP SERVER为例进行分析,实际情况中DHCP RELAY也是一样的。

1、在S7506E-S配置DHCP SERVER

S7506E-S终端1终端2的网关,终端1终端 2通过DHCP获取地址,S7506E-SDHCP SERVER。 (配置略)

此时终端正常获取到了地址,在S7506E-S上查看

[H3C]dis dhcp se ip al

Pool utilization: 0.39%

 IP address       Client-identifier/    Lease expiration          Type

                  Hardware address

 172.16.1.2          2c59-e501-a055        Jan  4 2015 12:41:40      Auto:COMMITTED

 172.16.2.33        2c59-e501-a01b        Jan  4 2015 12:42:20      Auto:COMMITTED

 

 --- total2 entry ---

 

2、在S7506E-S上配置PBR策略:

#

[H3C]dis acl 3000

Advanced ACL  3000, named -none-, 1 rule,

ACL's step is 5

 rule 0 permit ip source 172.16.1.0 0.0.0.255

rule5 permit ip source 172.16.2.0 0.0.0.255

#

[H3C]dis acl 3001

Advanced ACL  3001, named -none-, 1 rule,

ACL's step is 5

 rule 0 permit ip source 172.16.2.0 0.0.0.255

#

[H3C]dis policy-based-route test100

 policy-based-route : test

    Node 10 permit :

       if-match acl 3000

       apply ip-address next-hop 2.2.2.2         //通过PBR下一跳指向MSR3640-1

#

[H3C]dis policy-based-route test200

 policy-based-route : test

    Node 10 permit :

       if-match acl 3001

       apply ip-address next-hop 3.3.3.2         //通过PBR下一跳指向MSR3640-2

#

interface Vlan-interface100

 ip policy-based-route test100

#

interface Vlan-interface200

 ip policy-based-route test200

#

此时从终端1和终端2 ping 100.0.0.1。由于在S7506E-S上的路由表中没有到达100.0.0.1的路由,因此互PING能通证明流量匹配了PBR策略。

     此时终端1能够获取DHCP地址,且流量在S7506E-S上匹配了PBR策略。但是这是在先获取地址后,再配置PBR策略的情况,此时不涉及DHCP地址的获取。让终端重新获取地址,会发现此时无法正常获取地址。通过在终端上抓包查看,只有DHCP DISCOVER报文,而无任何的回应。

     3、修改PBR策略路由

由于PBR策略的下发,会导致172.16.1.0的流量重定向到MSR3640-1上,172.16.2.0的流量重定向到MSR3640-2上,从而S7506E-S无法处理DHCP报文,   因此通过修改PBR的策略,将DHCP 报文单独匹配出来。

#

[H3C]disacl 3002

Advanced ACL  3001, named -none-, 1 rule,

ACL's step is 5

 rule 0 permit udp destination-port eq bootps (22 times matched)

#

[H3C]dis policy-based-route test100

 policy-based-route : test

    Node 0 permit :

       if-match acl 3002

    Node 10 permit :

       if-matchacl 3000

       applyip-address next-hop 2.2.2.2

#

[H3C]dis policy-based-route test200

 policy-based-route : test

    Node 0 permit :

       if-match acl 3002

    Node 10 permit :

       if-match acl 3001

       apply ip-address next-hop 3.3.3.2

#

实现的重点是写一条ACL 3003,以匹配目的端口为bootpsDHCP协议报文。可以看到此时终端成功获取了地址,抓包查看报文交互完整。

当然相同的操作也可以通过QoS策略来实现需求,具体配置略。

四、     配置关键点:

1ACL中的DHCP协议端口号,如果没有bootps,则需要指定UDP端口号为67

2、由于PBR节点的匹配顺序是从小到大依次匹配,因此需要将匹配DHCP的节点号放在前面,以避免该报文被其他节点所匹配。

3QoS策略中有不同CB对时,是按照配置顺序,先下发先生效的,匹配一个就不再往下匹配,因此需要将匹配DHCP报文的ACLCB对放在最前面。

4DHCP RELAYDHCP SERVER的配置相同


2016年06月