Показаны сообщения с ярлыком VRF. Показать все сообщения
Показаны сообщения с ярлыком VRF. Показать все сообщения

четверг, 1 октября 2015 г.

"IP VRF FORWARDING" vs "VRF FORWARDING"

Marco Rizzi Blog: "vrf definition" command, how to survive

"vrf definition" command, how to survive

Hi all,

as you may know, the old vrf definition commands are useful only for ipv4 vrfs.

for example:
ip vrf OLD-FORMAT
 description old format for vrf definition
 rd 1:1
 vpn id ABC:DEF
 route-target export 1:1
 route-target import 1:1
 route-target import 1:2


Will create a ipv4 vrf only, you can see it with:
Router(config-vrf)#do sh vrf detail
VRF OLD-FORMAT; default RD 1:1; default VPNID ABC:DEF
  Description: old format for vrf definition
  No interfaces
Address family ipv4 (Table ID = 0x1):
  Export VPN route-target communities
    RT:1:1
  Import VPN route-target communities
    RT:1:1                   RT:1:2
  No import route-map
  No export route-map
  VRF label distribution protocol: not configured
  VRF label allocation mode: per-prefix
Address family ipv6 not active.


If we try to add an interface to vrf, with both ipv4 and ipv6 addresses, we notice also:
Router(config)#do sh run int f 0/0 | b int
interface FastEthernet0/0
 ip vrf forwarding OLD-FORMAT
 ip address 10.0.0.1 255.255.255.0
 duplex auto
 speed auto
 ipv6 address FC00:1234:CC13::1/64


Router(config)#do sh ip route vrf OLD-FORMAT | b Gate
Gateway of last resort is not set

     10.0.0.0/24 is subnetted, 1 subnets
C       10.0.0.0 is directly connected, FastEthernet0/0
Router(config)#

Router(config)#do sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

Router(config)#do sh ipv6 route
IPv6 Routing Table - Default - 3 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, M - MIPv6, R - RIP, I1 - ISIS L1
       I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
       EX - EIGRP external
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
C   FC00:1234:CC13::/64 [0/0]
     via FastEthernet0/0, directly connected
L   FC00:1234:CC13::1/128 [0/0]
     via FastEthernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive


As expected, the vrf table is created only for ipv4 address-family, the ipv6 address still in the global table.

Starting from IOS 12.4(20)T (and 12.2(33)Sxx) the new command "vrf definition" was introduced.
According to the Doc-CD, the command creates both the virtual routing tables for ipv4 and ipv6 address-families, and can be used to specify global route-targets for both address-families and also specific route-targets.

So far so good, let's try this relatively new feature and see if it's working as documented:

Router(config)#vrf definition NEW-FORMAT
Router(config-vrf)#rd 2:2
Router(config-vrf)#?
VPN Routing/Forwarding instance configuration commands:
  address-family  Enter Address Family command mode
  context         Associate SNMP context with this vrf
  default         Set a command to its defaults
  description     VRF specific description
  exit            Exit from VRF configuration mode
  no              Negate a command or set its defaults
  rd              Specify Route Distinguisher
  route-target    Specify Target VPN Extended Communities
  vpn             Configure VPN ID as specified in rfc2685

Router(config-vrf)#route-target both 2:2
Router(config-vrf)#route-target import 100:100
Router(config-vrf)#do sh run vrf NEW-FORMAT
Building configuration...

Current configuration : 120 bytes
vrf definition NEW-FORMAT
 rd 2:2
 route-target export 2:2
 route-target import 2:2
 route-target import 100:100
!
end


Nice, as you can see, I have placed the route-targets globally, hoping that it will use for both address families.
In fact, this is not happening at all, because seems that the address-families aren't activated:
Router(config-vrf)#sh vrf detail NEW-FORMAT
VRF NEW-FORMAT; default RD 2:2; default VPNID 
  No interfaces
Address family ipv4 not active.
Address family ipv6 not active.


So if you try to add an interface to this vrf, the result is something strange:
Router(config)#int f 0/1
Router(config-if)#ip vrf forwarding NEW-FORMAT
% Use 'vrf forwarding' command for VRF 'NEW-FORMAT' !-- note that the old format command is rejected
Router(config-if)#vrf forwarding NEW-FORMAT
Router(config-if)#ip add 10.2.2.2 255.255.255.0
Router(config-if)#ipv6 address fc00:2222:2222::2/64
%FastEthernet0/1 is linked to a VRF. Enable IPv6 on that VRF first.  !-- IPv6 address is rejected too! 
Router(config-if)#do sh run int f 0/1
Building configuration...

Current configuration : 120 bytes
!
interface FastEthernet0/1
 vrf forwarding NEW-FORMAT
 ip address 10.2.2.2 255.255.255.0
 duplex auto
 speed auto
end


Seems that the ipv6 address was rejected due the missing address-family activation, but the ipv4 was accepted.

Surprise! The ipv4 still in global routing table, not in the vrf table!
Router(config-if)#do sh ip route | beg Gate
Gateway of last resort is not set

     10.0.0.0/24 is subnetted, 1 subnets
C       10.2.2.0 is directly connected, FastEthernet0/1

Router(config-if)#do sh ip route vrf NEW-FORMAT

Router(config-if)#


So let's activate the address families:
Router(config)#vrf definition NEW-FORMAT
Router(config-vrf)#address-family ipv4
Router(config-vrf-af)#route-target both 2:2
Router(config-vrf-af)#exit
Router(config-vrf)#address-family ipv6
Router(config-vrf-af)#route-target both 2:2
Router(config-vrf-af)#exit
Router(config-vrf)#do sh run vrf NEW-FORMAT
Building configuration...

Current configuration : 409 bytes
vrf definition NEW-FORMAT
 rd 2:2
 route-target export 2:2
 route-target import 2:2
 route-target import 100:100
 !
 address-family ipv4
 route-target export 2:2
 route-target import 2:2
 exit-address-family
 !
 address-family ipv6
 route-target export 2:2
 route-target import 2:2
 exit-address-family
!
!
interface FastEthernet0/1
 vrf forwarding NEW-FORMAT
 no ip address
 duplex auto
 speed auto
!
!
end

Router(config-vrf)#

Yup! the ip address disappeared without notice!

Let's re-add both ip and ipv6 addresses
Router(config-vrf)#int f 0/1
Router(config-if)#ip add 10.2.2.2 255.255.255.0
Router(config-if)#ipv add fc00:2222:2222::2/64
Router(config-if)#do sh run vrf NEW-FORMAT
Building configuration...

Current configuration : 464 bytes
vrf definition NEW-FORMAT
 rd 2:2
 route-target export 2:2
 route-target import 2:2
 route-target import 100:100
 !
 address-family ipv4
 route-target export 2:2
 route-target import 2:2
 exit-address-family
 !
 address-family ipv6
 route-target export 2:2
 route-target import 2:2
 exit-address-family
!
!
interface FastEthernet0/1
 vrf forwarding NEW-FORMAT
 ip address 10.2.2.2 255.255.255.0
 duplex auto
 speed auto
 ipv6 address FC00:2222:2222::2/64
!
!
end

Router(config-if)#do sh ip route | beg Gate
Gateway of last resort is not set

Router(config-if)#do sh ip route vrf NEW-FORMAT

Routing Table: NEW-FORMAT
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

     10.0.0.0/24 is subnetted, 1 subnets
C       10.2.2.0 is directly connected, FastEthernet0/1
Router(config-if)#do sh ipv6  route vrf NEW-FORMAT
IPv6 Routing Table - NEW-FORMAT - 3 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, M - MIPv6, R - RIP, I1 - ISIS L1
       I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary, D - EIGRP
       EX - EIGRP external
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
C   FC00:2222:2222::/64 [0/0]
     via FastEthernet0/1, directly connected
L   FC00:2222:2222::2/128 [0/0]
     via FastEthernet0/1, receive
L   FF00::/8 [0/0]
     via Null0, receive
Router(config-if)#


Finally it's all right, ip and ipv6 addresses are in the vrf routing table, I'm still asking myself what is the purpose of global route-targets...

:-)
Fortunately, seems that they have modified in the 15.0 IOS version. The above tests was on my 12.4T rack, when tryed with dynamips on 15.0...
RackVR1(config)#vrf definition TEST
RackVR1(config-vrf)#rd 1:1 
RackVR1(config-vrf)#route-target both 1:1

RackVR1(config)#int f 2/0
RackVR1(config-if)#vrf forwarding TEST
% Cannot configure VRF forwarding since no address family configuration exists in this VRF TEST; Please configure address family first
RackVR1(config-if)#do sh ver  
Cisco IOS Software, 7200 Software (C7200-ADVENTERPRISEK9-M), Version 15.0(1)M, RELEASE SOFTWARE (fc2)
...


четверг, 21 апреля 2011 г.

Использование NAT совместно с ZBF

Рассмотрим различные варианты:
  1. Традиционный NAT c ZBF
  2. Схема:
    При использовании традиционного NAT ZBF отрабатывается ПОСЛЕ NAT, причем ZBFне отслеживает преобразования NAT. Т.е. при прохождении пакета inside-to-outside будет сначала выполнено преобразование NAT, затем к нему применится политика ZBF INSIDE-OUTSIDE.
    Т.о. в политике INSIDE-OUTSIDE необходимо разрешить прохождение пакетов с source IP в диапазоне NAT pool. Инспектить эти пакеты смысла нет, т.к. ZBF не являетс я NAT-aware и не отслеживает преобразования NAT, и при этом применяется ПОСЛЕ  NAT. Т.е. при прохождении обратного пакета ZBF будет отрабатываться на destination IP из inside local диапазона, которые следует разрешить в режиме pass в политике OUTSIDE-INSIDE. Не очень  красивая ситуация. Stateful Inspection мы не получим и  входящий ACL на внешнем интерфейсе, прямо запрещающий обращение к адресам inside local, не помешает.
    class-map type inspect match-all NAT_cmap
     match access-group name NAT_cmap
    class-map type inspect match-all NAT-IN
     match access-group name NAT-IN
    policy-map type inspect INSIDE-OUTSIDE
     class type inspect NAT_cmap
      pass
     class class-default
      drop
    policy-map type inspect OUTSIDE-INSIDE
     class type inspect NAT-IN
      pass
     class class-default
      drop
    zone security INSIDE  
     description Head Office Internal Zone
    zone security OUTSIDE
     description ISP Links
    zone-pair security INSIDE-OUTSIDE source INSIDE destination OUTSIDE
     service-policy type inspect INSIDE-OUTSIDE
    zone-pair security OUTSIDE-INSIDE source UTSIDE destination INSIDE
     service-policy type inspect OUTSIDE-INSIDE  
    ip access-list extended NAT_cmap
     permit ip 1.1.1.0 0.0.0.255 any
    ip access-list extended NAT-IN
     permit ip any 192.168.0.0 0.0.0.255
    ip access-list extended NAT_LIST
     permit ip 192.168.0.0 0.0.0.255 any

  3. NVI с ZBF подружить не удалось.
  4. Создание отдельного  виртуального маршрутизатора для NVI, а ZBF применим на глобальном VRF.

  5. К сожалению,  в режиме inspect реализовать эту схему мне не удалось.

  6. Классический NAT на отдельном VRF плюс ZBF на глобальном. Также получилось только в режиме pass.