Secure BPN design

It’s not uncommon to have business partners that share network resources.  This is typically accommodated through the use of a site-to-site (or LAN-to-LAN (L2L) depending on your “phraseology” preference) VPN tunnel.  Sometimes dedicated, leased-line circuits (frame-relay, point-to-point circuits such as T1s, T3s or any fraction thereof) are used as well, although the additional cost of these kind of circuits are usually prohibitive, compared to the inexpensive VPN option.

Before continuing with this discussion, I need to give credit where credit is due.  One of the models presented (the legacy model as I refer to it), I have used and am quite familiar with.  The other model (I term it the “best-practices model”) I was not.  I learned about this model from my mentor, friend and colleague (my boss!) Scott Hogg.  Scott and I were discussing BPN design best-practices when he told me about the second model presented in this discussion.  As always, I enjoy the conversations that Scott and I have — this article wouldn’t have been written without his feedback and input.

There are two main schools of thought when it comes to a BPN.  I’ll call one school of thought the “legacy model”, with the other school (the model currently in use) being the “best practice model”.  This article discusses both models and shows a configuration example (Dynagen .net file included) of the best practice model.

Example Description

Both model examples utilize three customer sites (CE1, CE2 and CE3) and a head-end site (headquarters, main site).  To allow simulation of hosts within each customer network, there are the CE1LAN, CE2LAN and CE3LAN routers.

The HOST1, HOST2 and HOST3 routers simulate hosts/servers within the head-end site.  The HEAD router terminates the L2L IPSec tunnels at the head-end site, where each CEx router terminates the tunnel at the customer site.

The firewall at the main (head-end) site (HEADFWL) could (and probably should be) a dedicated firewall appliance such as an ASA or FWSM.  Although PIX firewalls can be easily emulated, it was easier for this example to use a router with the IOS Firewall (Advanced Security) feature set.  CE1 is allowed to access (ping) HOST1, but nothing else.  CE2 and CE3 are given virtually unrestricted access to the head-end site.

To mix things up a little, there are two customer sites that utilize L2L IPSec tunnels (CE1 and CE2), and a single customer site that utilizes a leased-line (CE3) to connect to the main site.  Now, without further ado, let’s examine the two models.

Legacy Model

This model uses a single LAN for terminating all Business Partners (BPs).  They could arrive via a L2L IPSec tunnel or via a leased-line circuit.  The main issue I’d like to examine here is that all BPs terminate on the same shared LAN.

Best practices in L2L design dictate the use of very specific ACLs to match what traffic is “interesting” to the tunnel (so only what’s needed is sent across the tunnel).  In following this, the possibility of one BP using the BPN as a transit network to attack (or access) another BP is next to nil (assuming of course that proper L3 spoofing precautions are taken).  It is possible to use a host within the BPN as a transit device, bridging the two BPs, but this is a different topic (host security) and can be an issue no matter which model is chosen.

Typically a firewall will guard the untrusted (BPN) network from the rest of the trusted (internal) network, providing stateful packet inspection.  Best practices dictate the use of a device offering deep-packet inspection (IPS, AntiVirus, content inspection, etc.) between the two networks as well.

The following diagram shows the legacy model design:
BPN Legacy Model

The focal point now is that all BPs technically are not isolated.  All the BPs terminate on the same shared LAN with no isolation between each BP.  While ACLs are used to determine the “interesting” traffic for each L2L IPSec tunnel, they are not separated (share a common LAN/VLAN).

This model was used (and still can be found in the wild) quite successfully for many years.  What could be better?  Hold on and let’s examine the…

Best Practice Model

The best practice model utilizes L2L IPSec tunnels as well.  The main difference here is that once a BP connects, each BP is completely isolated and firewalled off from the rest of the network (and BPs).  Take a look at the following diagram of the best-practice BPN model.

BPN Best-Practice Model

Three customer sites, two using L2L IPSec tunnels, the third connecting via a leased-line circuit.  This looks almost identical to the legacy model above.  What gives?!

The keywords that should be caught are almost identical.  There’s a very big difference in this design in that separation between BPs is maintained until a security device (the firewall – HEADFWL router) can inspect and manage the BP traffic.

Take a close look at the Public (untrusted) Network Segment.  Notice that this design utilizes VRFs on the the router where the VPN tunnels terminate at the head-end site.  The VRF configuration provides complete isolation between the different BP L2L tunnels on the router.  Each BP is assigned a unique VLAN ID used within the network segment, providing complete L2 separation.

Although the firewall (HEADFWL) doesn’t have any VRFs configured, it uses sub-interfaces, allowing it to keep the different BPs separated.  Within a real environment, it’d be best to use a dedicated firewall appliance (ASA, FWSM, etc.) for this role.  This design would make great use of the multiple-context abilities of the ASA and FWSM (make the BPN a separate context to provide further separation and isolation from the rest of the network).  As a side note, if an ASA or FWSM is used for the firewall role, it might be ideal to make each BP-facing interface (the VLAN sub-interfaces) the same security level and ensure that the same-security-traffic permit inter-interface command isn’t configured so that BPs can’t transit firewall to reach other BPs.

Each router is using a Static Virtual Tunnel Interface (SVTI) for the L2L IPSec tunnel.  An SVTI provides many benefits over a crypto map.  Unlike a crypto map, no ACL is applied that defines the “interesting traffic” for the tunnel.  Rather with an SVTI, any traffic that is sent over the SVTI is considered “interesting”.  It’s a matter of the routing table (ie. the IGP in most environments) to determine what traffic should be sent over the SVTI/tunnel.  In this example I didn’t configure an IGP at the customer sites.  This was partly due to time constraints, but also because I really couldn’t see the value in showing this.  It really doesn’t matter how traffic is routed to the SVTI as long as it gets to it.  Static routes can be used (as in this example), although in most real-world environments, I’d strongly recommend using a dynamic routing protocol (typically OSPF or EIGRP).

Another feature about SVTIs is that they’re simply another router interface — most of the features and protocols that are configured on any other interface can be configured on an SVTI.  This includes multicast (try doing multicast over a tunnel using a crypto map!), IGPs, etc.

To summarize: the VRFs provide separation within the VPN termination point (HEAD) and the leased-line termination point (HEAD-S).  A unique VLAN ID is used for each different BP to provide separation between the entry point (HEAD and HEAD-S) and the firewall protecting the internal/trusted network (HEADFWL).  SVTIs are used for the IPSec L2L tunnel, allowing for multicast support as well as easy IGP integration.

Dynagen .net File

Here’s the Dynagen file that I used for the best-practice model mock-up.  Note that this uses two hypervisor instances (see the Running two simultaneous instances of the Dynamips hypervisor post for more information).

# This is the secure BPN network file
#

autostart = false
model = 3640

[localhost:7200]
udp = 15000

[[3640]]
image = <your favorite 3640 image here>
ram = 128

[[ROUTER CE1LAN]]
fa0/0 = S1 2
console = 2010

[[ROUTER CE1]]
fa0/0 = S0 2    # outside (inet)
fa1/0 = S1 1    # inside
console = 2011

[[ROUTER CE2LAN]]
fa0/0 = S2 2
console = 2012

[[ROUTER CE2]]
fa0/0 = S0 3    # outside (inet)
fa1/0 = S2 1    # inside
console = 2013

[[ROUTER CE3LAN]]
fa0/0 = S3 2
console = 2014

[[ROUTER CE3]]
s0/0 = HEAD_S s0/0    # outside (direct T1)
fa1/0 = S3 1        # inside
console = 2015

# INET (simulated)
[[ETHSW S0]]
1 = access 1
2 = access 1
3 = access 1

# CUST1 LAN
[[ETHSW S1]]
1 = access 1
2 = access 1

# CUST2 LAN
[[ETHSW S2]]
1 = access 1
2 = access 1

# CUST3 LAN
[[ETHSW S3]]
1 = access 1
2 = access 1

# HEAD – UNTRUSTED LAN
[[ETHSW S4]]
1 = dot1q 1        # HEAD fa1/0
2 = dot1q 1     # HEAD_S fa1/0
3 = dot1q 1     # HEADFWL fa0/0

# HEAD – TRUSTED/PRIVATE LAN
[[ETHSW S5]]
1 = dot1q 1        # HEADFWL fa1/0
2 = access 10    # HOST1 fa0/0
3 = access 20    # HOST2 fa0/0
4 = access 1    # HOST3 fa0/0

[localhost:7201]
udp = 15050

[[3640]]
image = <your favorite 3640 image here>
ram = 128

[[7200]]
image = <your favorite 7200 image here>
npe = npe-200
midplane = std
ram = 256
nvram = 256

[[ROUTER HEAD]]
fa0/0 = S0 1    # outside (internet)
fa1/0 = S4 1    # inside (untrusted)
console = 2016

[[ROUTER HEAD_S]]
#s0/0 = CE3 s0/0
fa1/0 = S4 2    # inside (untrusted)
console = 2017

[[ROUTER HEADFWL]]
fa0/0 = S4 3    # outside (untrusted)
fa1/0 = S5 1    # inside (trusted/private LAN)
console = 2018
model = 7200

[[ROUTER HOST1]]
fa0/0 = S5 2
console = 2019

[[ROUTER HOST2]]
fa0/0 = S5 3
console = 2020

[[ROUTER HOST3]]
fa0/0 = S5 4
console = 2021

Router Configurations

Note that the following router configurations show just what I thought was necessary.  These are not complete configurations, as a lot of extraneous lines were removed for the sake of brevity.  Note also that the head-end (main) site is the only one that uses an IGP, the rest use static routes.  This isn’t ideal, but the idea of this lab is to show the BPN design as a whole, not focus on all other aspects of proper network architecture.

HEAD

!
hostname HEAD
!
ip cef
!
ip vrf CUST1
rd 0:1000
route-target export 0:1000
route-target import 0:1000
!
ip vrf CUST2
rd 0:1001
route-target export 0:1001
route-target import 0:1001
!
crypto isakmp policy 10
encr 3des
authentication pre-share
group 2
crypto isakmp key CUST1 address 1.1.1.2
crypto isakmp key CUST2 address 1.1.1.3
crypto isakmp nat keepalive 20
!
crypto ipsec transform-set 3DES-SHA esp-3des esp-sha-hmac
!
crypto ipsec profile CUST1
description CUST1 VPN
set transform-set 3DES-SHA
!
crypto ipsec profile CUST2
set transform-set 3DES-SHA
!
interface Loopback0
ip address 192.168.100.1 255.255.255.255
!
interface Tunnel0
ip vrf forwarding CUST1
ip address 192.168.0.1 255.255.255.252
tunnel source 1.1.1.1
tunnel destination 1.1.1.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile CUST1
!
interface Tunnel1
ip vrf forwarding CUST2
ip address 192.168.0.5 255.255.255.252
tunnel source 1.1.1.1
tunnel destination 1.1.1.3
tunnel mode ipsec ipv4
tunnel protection ipsec profile CUST2
!
interface FastEthernet0/0
ip address 1.1.1.1 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 7.0.0.1 255.255.255.0
speed auto
full-duplex
!
interface FastEthernet1/0.1000
encapsulation dot1Q 1000
ip vrf forwarding CUST1
ip address 7.7.7.6 255.255.255.252
!
interface FastEthernet1/0.1001
encapsulation dot1Q 1001
ip vrf forwarding CUST2
ip address 7.7.7.10 255.255.255.252
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet1/0
network 7.0.0.0
no auto-summary
!
ip route vrf CUST1 0.0.0.0 0.0.0.0 7.7.7.5
ip route vrf CUST1 10.1.0.0 255.255.255.0 192.168.0.2
ip route vrf CUST2 0.0.0.0 0.0.0.0 7.7.7.9
ip route vrf CUST2 10.2.0.0 255.255.255.0 192.168.0.6
!

HEAD_S

!
hostname HEAD_S
!
ip cef
!
ip vrf CUST3
rd 0:1003
route-target export 0:1003
route-target import 0:1003
!
interface Loopback0
ip address 192.168.0.6 255.255.255.255
!
interface Serial0/0
ip vrf forwarding CUST3
ip address 1.2.1.1 255.255.255.252
encapsulation frame-relay
no keepalive
serial restart-delay 0
clock rate 128000
no fair-queue
no arp frame-relay
frame-relay map ip 1.2.1.1 102
frame-relay map ip 1.2.1.2 102 broadcast
frame-relay interface-dlci 102
no frame-relay inverse-arp
!
interface FastEthernet1/0
ip address 7.0.0.3 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet1/0.1002
encapsulation dot1Q 1002
ip vrf forwarding CUST3
ip address 7.7.7.13 255.255.255.252
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet1/0
network 0.0.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 7.0.0.1
ip route vrf CUST3 0.0.0.0 0.0.0.0 7.7.7.14
ip route vrf CUST3 10.3.0.0 255.255.255.0 1.2.1.2
!

HEADFWL

!
hostname HEADFWL
!
ip cef
!
interface Loopback0
ip address 192.168.0.5 255.255.255.255
!
interface FastEthernet0/0
ip address 7.0.0.2 255.255.255.0
duplex full
!
interface FastEthernet0/0.1000
encapsulation dot1Q 1000
ip address 7.7.7.5 255.255.255.252
ip access-group CUST1_IN in
ip access-group CUST1_OUT out
!
interface FastEthernet0/0.1001
encapsulation dot1Q 1001
ip address 7.7.7.9 255.255.255.252
!
interface FastEthernet0/0.1002
description CUST3
encapsulation dot1Q 1002
ip address 7.7.7.14 255.255.255.252
!
interface FastEthernet1/0
ip address 4.0.1.1 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet1/0.10
encapsulation dot1Q 10
ip address 4.0.10.1 255.255.255.0
!
interface FastEthernet1/0.20
encapsulation dot1Q 20
ip address 4.0.20.1 255.255.255.0
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet0/0
no passive-interface FastEthernet1/0
no passive-interface FastEthernet1/0.10
no passive-interface FastEthernet1/0.20
network 4.0.0.0
network 7.0.0.0 0.0.0.255
network 192.168.0.5 0.0.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 7.0.0.1
ip route 10.1.0.0 255.255.255.0 7.7.7.6
ip route 10.2.0.0 255.255.255.0 7.7.7.10
ip route 10.3.0.0 255.255.255.0 7.7.7.13
!
ip access-list extended CUST1_IN
evaluate CUST1_REFLEX
permit ip 10.1.0.0 0.0.0.255 4.0.10.0 0.0.0.255 reflect CUST1_REFLEX timeout 300
deny ip any any log
ip access-list extended CUST1_OUT
evaluate CUST1_REFLEX
permit tcp any host 10.1.0.1 eq telnet reflect CUST1_REFLEX timeout 300
permit tcp any host 10.1.0.1 eq 22 reflect CUST1_REFLEX timeout 300
permit icmp any host 10.1.0.1 reflect CUST1_REFLEX timeout 300
deny ip any any log
!

HOST1

!
hostname HOST1
!
ip cef
!
interface Loopback0
ip address 192.168.0.2 255.255.255.255
!
interface FastEthernet0/0
ip address 4.0.10.10 255.255.255.0
duplex auto
speed auto
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet0/0
network 0.0.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 4.0.10.1
!

HOST2

!
hostname HOST2
!
ip cef
!
interface Loopback0
ip address 192.168.0.3 255.255.255.255
!
interface FastEthernet0/0
ip address 4.0.20.10 255.255.255.0
duplex auto
speed auto
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet0/0
network 0.0.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 4.0.20.1
!

HOST3

!
hostname HOST3
!
ip cef
!
interface Loopback0
ip address 192.168.0.4 255.255.255.255
!
interface FastEthernet0/0
ip address 4.0.1.10 255.255.255.0
duplex auto
speed auto
!
router eigrp 65535
passive-interface default
no passive-interface FastEthernet0/0
network 0.0.0.0
no auto-summary
!
ip route 0.0.0.0 0.0.0.0 4.0.1.1
!

CE1

!
hostname CE1
!
ip cef
!
crypto isakmp policy 10
encr 3des
authentication pre-share
group 2
crypto isakmp key CUST1 address 1.1.1.1
!
crypto ipsec transform-set 3DES-SHA esp-3des esp-sha-hmac
!
crypto ipsec profile CUST1
set transform-set 3DES-SHA
!
interface Loopback0
ip address 192.168.1.1 255.255.255.255
!
interface Tunnel0
ip address 192.168.0.2 255.255.255.252
tunnel source 1.1.1.2
tunnel destination 1.1.1.1
tunnel mode ipsec ipv4
tunnel protection ipsec profile CUST1
!
interface FastEthernet0/0
ip address 1.1.1.2 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 10.1.0.1 255.255.255.0
duplex auto
speed auto
!
ip route 4.0.10.0 255.255.255.0 192.168.0.1
!

CE1LAN

!
hostname CE1LAN
!
ip cef
!
interface Loopback0
ip address 192.168.1.2 255.255.255.255
!
interface FastEthernet0/0
ip address 10.1.0.10 255.255.255.0
duplex auto
speed auto
!
ip route 0.0.0.0 0.0.0.0 10.1.0.1
!

CE2

!
hostname CE2
!
ip cef
!
crypto isakmp policy 10
encr 3des
authentication pre-share
group 2
crypto isakmp key CUST2 address 1.1.1.1
!
crypto ipsec transform-set 3DES-SHA esp-3des esp-sha-hmac
!
crypto ipsec profile CUST2
set transform-set 3DES-SHA
!
interface Loopback0
ip address 192.168.2.1 255.255.255.255
!
interface Tunnel0
ip address 192.168.0.6 255.255.255.252
tunnel source 1.1.1.3
tunnel destination 1.1.1.1
tunnel mode ipsec ipv4
tunnel protection ipsec profile CUST2
!
interface FastEthernet0/0
ip address 1.1.1.3 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 10.2.0.1 255.255.255.0
duplex auto
speed auto
!
ip route 4.0.20.0 255.255.255.0 192.168.0.5
!

CE2LAN

!
hostname CE2LAN
!
ip cef
!
interface Loopback0
ip address 192.168.2.2 255.255.255.255
!
interface FastEthernet0/0
ip address 10.2.0.10 255.255.255.0
duplex auto
speed auto
!
ip route 0.0.0.0 0.0.0.0 10.2.0.1
!

CE3

!
hostname CE3
!
ip cef
!
interface Loopback0
ip address 192.168.3.1 255.255.255.255
!
interface Serial0/0
ip address 1.2.1.2 255.255.255.252
encapsulation frame-relay
no keepalive
serial restart-delay 0
clock rate 128000
no fair-queue
no arp frame-relay
frame-relay map ip 1.2.1.1 102 broadcast
frame-relay map ip 1.2.1.2 102
frame-relay interface-dlci 102
no frame-relay inverse-arp
!
interface FastEthernet1/0
ip address 10.3.0.1 255.255.255.0
duplex auto
speed auto
!
ip route 4.0.20.0 255.255.255.0 1.2.1.1
!

CE3LAN

!
hostname CE3LAN
!
ip cef
!
interface Loopback0
ip address 192.168.3.2 255.255.255.255
!
interface FastEthernet0/0
ip address 10.3.0.10 255.255.255.0
duplex auto
speed auto
!
ip route 0.0.0.0 0.0.0.0 10.3.0.1
!

Testing

Here’s where the rubber meets the road!  Since I’ve provided the configurations above, I’ll simply show some different aspects of the design, but leave all of the details up to you to try out.

First off, HEAD has VRFs configured — one VRF per BP:

HEAD#sh ip vrf
Name                             Default RD          Interfaces
CUST1                            0:1000              Tu0
Fa1/0.1000
CUST2                            0:1001              Tu1
Fa1/0.1001
HEAD#sh ip vrf int
Interface              IP-Address      VRF                              Protocol
Tu0                    192.168.0.1     CUST1                            up
Fa1/0.1000             7.7.7.6         CUST1                            up
Tu1                    192.168.0.5     CUST2                            up
Fa1/0.1001             7.7.7.10        CUST2                            up
HEAD#

Likewise, there’s one VLAN ID assigned per VRF:

HEAD#sh ip int br
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            1.1.1.1         YES NVRAM  up                    up
FastEthernet1/0            7.0.0.1         YES NVRAM  up                    up
FastEthernet1/0.1000       7.7.7.6         YES NVRAM  up                    up
FastEthernet1/0.1001       7.7.7.10        YES NVRAM  up                    up
Loopback0                  192.168.100.1   YES NVRAM  up                    up
Tunnel0                    192.168.0.1     YES NVRAM  up                    up
Tunnel1                    192.168.0.5     YES NVRAM  up                    up
HEAD#

If CE1LAN tries to ping HOST1 (4.0.10.10), the following is observed:

CE1LAN#ping 4.0.10.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.0.10.10, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 344/466/708 ms
CE1LAN#

Watch what happens when we try to ping HOST2 (4.0.20.10):

CE1LAN#ping 4.0.20.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.0.20.10, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
CE1LAN#

Some of this is from the fact that the routing isn’t pointing to the SVTI:

CE1LAN#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 10.1.0.1 to network 0.0.0.0

10.0.0.0/24 is subnetted, 1 subnets
C       10.1.0.0 is directly connected, FastEthernet0/0
192.168.1.0/32 is subnetted, 1 subnets
C       192.168.1.2 is directly connected, Loopback0
S*   0.0.0.0/0 [1/0] via 10.1.0.1
CE1LAN#

Notice that CE1 doesn’t have a route to the 4.0.20.0/24 prefix:

CE1#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

1.0.0.0/24 is subnetted, 1 subnets
C       1.1.1.0 is directly connected, FastEthernet0/0
4.0.0.0/24 is subnetted, 1 subnets
S       4.0.10.0 [1/0] via 192.168.0.1
10.0.0.0/24 is subnetted, 1 subnets
C       10.1.0.0 is directly connected, FastEthernet1/0
192.168.0.0/30 is subnetted, 1 subnets
C       192.168.0.0 is directly connected, Tunnel0
192.168.1.0/32 is subnetted, 1 subnets
C       192.168.1.1 is directly connected, Loopback0
CE1#

If we put one in:

CE1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
CE1(config)#ip route 4.0.20.0 255.255.255.0 192.168.0.1
CE1(config)#^Z
CE1#
*Mar  1 00:21:56.415: %SYS-5-CONFIG_I: Configured from console by console
CE1#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

1.0.0.0/24 is subnetted, 1 subnets
C       1.1.1.0 is directly connected, FastEthernet0/0
4.0.0.0/24 is subnetted, 2 subnets
S       4.0.10.0 [1/0] via 192.168.0.1
S       4.0.20.0 [1/0] via 192.168.0.1
10.0.0.0/24 is subnetted, 1 subnets
C       10.1.0.0 is directly connected, FastEthernet1/0
192.168.0.0/30 is subnetted, 1 subnets
C       192.168.0.0 is directly connected, Tunnel0
192.168.1.0/32 is subnetted, 1 subnets
C       192.168.1.1 is directly connected, Loopback0
CE1#

Let’s try it again from CE1LAN:

CE1LAN#ping 4.0.20.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.0.20.10, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
CE1LAN#

Same as before — this time, not for lack of a route.  Look at the HEADFWL console:

HEADFWL#
*Feb 18 21:28:36.547: %SEC-6-IPACCESSLOGDP: list CUST1_IN denied icmp 10.1.0.10 -> 4.0.20.10 (8/0), 1 packet
HEADFWL#

It’s seen that the ACL isn’t permitting this (it traversed the VPN tunnel, but was blocked by the firewall).  Look at the firewall ACL for customer 1:

HEADFWL#sh ip access-list CUST1_IN
Extended IP access list CUST1_IN
10 evaluate CUST1_REFLEX
20 permit ip 10.1.0.0 0.0.0.255 4.0.10.0 0.0.0.255 reflect CUST1_REFLEX (4 matches)
30 deny ip any any log (5 matches)
HEADFWL#

We see the matches.  The fact that there are only 4 matches can probably be attributed to the fact that the VPN tunnel had not yet been established when I attempted to ping HOST1 from CE1LAN.

Let’s try one more test and try pinging some different hosts from CE2LAN (no ACL is limiting this customer’s access to the head-end network).  Note that I put in a static route to 4.0.10.0/24 on CE2 for all of the following tests to work.

CE2LAN#ping 4.0.10.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.0.10.10, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 92/224/400 ms
CE2LAN#ping 4.0.20.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 4.0.20.10, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 128/213/352 ms
CE2LAN#

Conclusion

Hopefully this article has been of some help.  In today’s world, it’s critical to have a secure and solid infrastructure.  Through the use of IPSec L2L tunnels, most security requirements can be easily met.  By using SVTIs, dynamic routing protocols can be used, allowing for load-balancing of traffic across different tunnels (possibly going through different provider circuits, such as utilizing multiple carriers for redundancy) and fast failover of circuit failovers (assuming multiple circuits exist and different SVTIs are created through each individual circuit).

Until next time…

Leave a Reply

Your email address will not be published.

HTML tags are not allowed.

WordPress Themes