manageawsvpn Code
AWS VPN Management from Cisco IOS EEM for dynamic public IPs
Status: Beta
Brought to you by:
clarkadamp
| File | Date | Author | Commit |
|---|---|---|---|
| LICENSE.txt | 2013-12-16 |
|
[94b7ba] Initial commit |
| ManageAWSVPN.tcl | 2013-12-16 |
|
[94b7ba] Initial commit |
| README.txt | 2013-12-16 |
|
[94b7ba] Initial commit |
Version Date Comments
0.1 12/12/2013 Initial Release
Many portions of this software was sourced from tclcloud orginally developed by Patrick Dunnigan
https://github.com/cloudsidekick/tclcloud/
This script is intended for those who have a dynamic IP address but would like to have the
connection to an AWS VPC to remain up when the Public IP Address Changes
The script maintains both Customer Gateways and VPN Connections that are linked to an existing
VPN Gateway.
It is designed to be run from IOS EEM triggered by a Dialer interface coming up or manually
triggered using "event manager run ManageAWSVPN.tcl"
The dialer coming up is identified by a syslog message that is like:
%DIALER-6-BIND: Interface Vi2 bound to profile Di0
It can also be run from a Linux environment where it will configure ASW for the VPN and provide
the nessasary configuration to apply to enable the services. To run it under Linux you will ned
to run (RHEL):
yum install tcl tcllib
The ::cisco register and namespace configuration line will also need to be commented out
It requires an existing VPN Gateway to be created and tagged under the key "ConnectedTo" with
either the hostname of the router or whatever is set by the _AWSHostname environment variable
The VPN Gateway will alse need to be setup to propogate routes from the gateway to a routing
table. This does not need to be re-created every time.
If debugging the script use termial length 0 and terminal monitor to allow the terminal window to keep up.
Script Psuedo Code
1. Initialise and gather relevant information from enviromnet variables or command line arguments
2. Identify VPN Gateways that are tagged with ConnectedTo:[hostname|_AWSHostname]
3. Identify VPN Connections linked to the discovered VPN Gateway
4. Identify Customer Gateways linked to the discovered VPN Connection
5 Destroy VPN Connections then Customer Gateways
6. Remove IOS Configuration related to any existing VPN Connections and clean up an other stale
configuration if the router has gotten out of sync with AWS for some reason.
7. Create a new Customer gateway and tag it for later verification
8. Create a new VPN Connection linking the new Customer Gateway and the discovered VPN Gateway
9 Configure the router for the crypto and BGP information.
The script relies on some external libraries that need to be copied to the router flash drives
All files must be located in the location identified by the event manager directory user library
configuration option. The configuration example below uses flash:/tcl/
All files can be copied from the tcllib sources at http://sourceforge.net/projects/tcllib/
or an example location for RHEL is /usr/share/tcl8.5/tcllib-1.11.1/
The following files need to be copied base64.tcl sha1.tcl sha256.tcl uri.tcl
Router#dir flash:/tcl/
Directory of flash:/tcl/
18 -rw- 11562 Dec 9 2014 14:33:58 +11:00 base64.tcl
19 -rw- 24228 Dec 9 2014 14:34:06 +11:00 sha1.tcl
20 -rw- 24722 Dec 9 2014 14:34:12 +11:00 sha256.tcl
21 -rw- 28896 Dec 9 2014 14:34:20 +11:00 uri.tcl
22 -rw- 792 Dec 9 2014 15:25:48 +11:00 pkgIndex.tcl
23 -rw- 6000 Dec 10 2014 11:30:12 +11:00 tls.tcl
This script itself needs to in the location set by event manager directory user policy. The example
below uses flash:/
The script has a number of environment variables that can be set to change the behaviour at runtime
They can be set with the event manager environment <Key> [<Value>]
The following is a list of environment variables:
Mandatory/
Recommended Name Default Value Description
M _AWSKey API Access Key; this user should only be
granted the priveliges needed
M _AWSSecretKey API Access Secret Key
R _AWSRegion default ec2.amazonaws.com
_AWSDebugLevel 0 0; Off 1; High Level Information; 2; More Verbose
3; The everything
_AWSPublicInterface Dialer0 The interface for which you want AWS to connect to
_AWSTunnel1Num 722401 AWS IPSec Tunnel 1 Number
_AWSTunnel2Num 722402 AWS IPSec Tunnel 2 Number
_AWSSleepBefore 0 Seconds to sleep before doing anything, allows for
Network convergence
* _AWSMaxRun 120 EEM kills off scripts if they run too long.
* Requires a reregister of the EEM policy, eg:
no event manager policy ManageAWSVPN.tcl
event manager policy ManageAWSVPN.tcl
This script only manages the configuration that is dynamic with each Customer Gateway configuration
Below is the configuration that should be applied prior to running this script
The crypto configuration is identical to that supplied by Amazon with the reduction of the ISAKMP
repeat for each tunnel.
All of the relevant BGP setting are applied to a peer-group. The script just manages members of the
peer-group.
crypto isakmp policy 7224
encryption aes 128
authentication pre-share
group 2
lifetime 28800
hash sha
crypto ipsec df-bit clear
crypto isakmp keepalive 10 10 on-demand
crypto ipsec security-association replay window-size 128
crypto ipsec fragmentation before-encryption
! Only advertise paths originating from local AS
ip as-path access-list 72 permit ^$
router bgp 65535
neighbor AWS peer-group
neighbor AWS remote-as 7224
neighbor AWS timers 10 30 30
!
address-family ipv4
! Place any network statements to populate the BGP table
network x.x.x.x mask y.y.y.y
neighbor AWS soft-reconfiguration inbound
neighbor AWS filter-list 72 out
exit-address-family
event manager environment _AWSKey <SecretKey>
event manager environment _AWSSecretKey <SecretKey>
event manager directory user policy flash:/
event manager directory user library flash:/tcl/
RECOMENDED SETTINGS
It is probably ideal to set the region that is closest for the best response times
http://docs.aws.amazon.com/general/latest/gr/rande.html#vpc_region
Description Region EC2 Hostname Preferred Protocol
US East (Northern Virginia) Region us-east-1 ec2.us-east-1.amazonaws.com HTTPS
US West (Oregon) Region us-west-2 ec2.us-west-2.amazonaws.com HTTPS
US West (Northern California) Region us-west-1 ec2.us-west-1.amazonaws.com HTTPS
EU (Ireland) Region eu-west-1 ec2.eu-west-1.amazonaws.com HTTPS
Asia Pacific (Singapore) Region ap-southeast-1 ec2.ap-southeast-1.amazonaws.com HTTPS
Asia Pacific (Sydney) Region ap-southeast-2 ec2.ap-southeast-2.amazonaws.com HTTPS
Asia Pacific (Tokyo) Region ap-northeast-1 ec2.ap-northeast-1.amazonaws.com HTTPS
South America (Sao Paulo) Region sa-east-1 ec2.sa-east-1.amazonaws.com HTTPS
event manager environment _AWSRegion <Region>