It is highly likely you will be required to
create a site to site VPN from your on-premises network to the Azure public
cloud. In order to do this you must have a compatible VPN peer that is capable
of terminating the IPsec VPN. All of the main network vendors have supported
devices such as Cisco, Juniper and Palo Alto etc. You can consult the following
website to see what devices are supported;
Windows Server 2012/2012 R2 is also a supported
configuration with the Routing and Remote Access (RRAS) role installed, this
however when I tried to do it behind my Cisco ASA I could not get it to work.
If you research around some forums etc most people only get RRAS to work with
Azure if it is directly connected to the internet without any kind of NAT in-between.
Most enterprises won’t be using RRAS anyway.
This example will cover setting up an Azure vNet
with an Azure Gateway that is connected to a Cisco ASA 5505 firewall. At the
time of writing Azure automatically generated configuration scripts for Cisco
and Juniper devices, although these sometimes need tweaking before they work
correctly, I cover this further down.
Define Local Network
The first stage is to define the Local Network,
which is the network space in which your on premise environment works with. It
is with the Local Network you also specify the outside global address that your
VPN device has on its outside (or public) interface.
Open the Azure Management console, click New
then Network Services, Virtual Network and then Custom Create.
Input a name for the local network, something
descriptive is best and then enter the VPN Device IP as stated above.
You must then specify the address space that
is being used within your on premise network, the address spaces used on
premise and the cloud cannot overlap. Therefore you cannot have 192.168.1.0/24
on site and in the cloud.
Define DNS Servers
The next step is to define the name resolution
servers, you require at least one on premise and in the cloud, click New
> Network Services > Virtual Network > Register DNS Server and
define the DNS servers.
Create Virtual Network
Now create a new Virtual Network click New
> Network Services > Virtual Network > Custom Create. The vNet is
the logical entity that the VM instances connect to.
Enter a descriptive name for the vNet and
set the location.
From the next pane click the DNS Servers that
were defined in the previous step. Tick Configure site-to-site VPN and
then select the Local Network object that was defined in a previous step.
Now configure the address spaces you intend to
use for your cloud based instances. Also click Add Gateway Subnet this
will provision a small subnet to be used for the inter-tunnel communications.
When the network is created the next step is to
create a Virtual Gateway, which is assigned a public address. This process can
take around 15-20 minutes to complete.
Click Create Gateway and select the Routing type, the
Cisco ASA actually only supports Static Routing. Consult the following document to check if dynamic routing is supported for your VPN device
Click Yes to confirm you want to create a
gateway.
The interface will appear like it is below, the
VPN cannot be formed until the VPN device is up dated with the configuration
script. Unfortunately if you do not have a Cisco or Juniper firewall device you
may have to do some manual configuration.
Click Download VPN Device Script from
under Quick Glance. You can then select what options suit your
environment, I hope Microsoft increase the number of devices and operating
systems. The current options do not come close to what Amazon Web Services
offers, they have pre-created scripts for almost all of the networking vendors
I can name, with multiple different operating system versions.
Something that is not obvious when you download
the configuration script for the Cisco ASA is that it assumes your firewall's
interfaces are called inside/outside, for example some environments use private/public,
this is not obvious if you are not a familiar with firewall scripts. I have
highlighted everything below that must be changed to reflect your exact
firewall configurations.
! Microsoft Corporation
! Windows Azure Virtual Network
! This configuration template applies to Cisco
ASA 5500 Series Adaptive Security Appliances running ASA Software 8.3.
! It configures an IPSec VPN tunnel connecting
your on-premise VPN device with the Azure gateway.
!
---------------------------------------------------------------------------------------------------------------------
! ACL and NAT rules
!
! Proper ACL and NAT rules are needed for
permitting cross-premise network traffic.
! You should also allow inbound UDP/ESP traffic
for the interface which will be used for the IPSec tunnel.
object-group network azure-networks
network-object 172.16.0.0 255.240.0.0
exit
object-group network onprem-networks
network-object 10.0.0.0 255.0.0.0
exit
access-list azure-vpn-acl extended permit ip
object-group onprem-networks object-group azure-networks
nat (inside,outside) source static
onprem-networks onprem-networks destination static azure-networks
azure-networks
!
---------------------------------------------------------------------------------------------------------------------
! Internet Key Exchange (IKE) configuration
!
! This section specifies the authentication,
encryption, hashing, Diffie-Hellman, and lifetime parameters for the Phase
! 1 negotiation and the main mode security
association. We have picked an arbitrary policy # "10" as an
example. If
! that happens to conflict with an existing
policy, you may choose to use a different policy #.
crypto isakmp enable outside
crypto isakmp policy 10
authentication pre-share
encryption aes-256
hash sha
group 2
lifetime
28800
exit
! ---------------------------------------------------------------------------------------------------------------------
! IPSec configuration
!
! This section specifies encryption,
authentication, and lifetime properties for the Phase 2 negotiation and the
quick
! mode security association.
crypto ipsec transform-set
azure-ipsec-proposal-set esp-aes-256 esp-sha-hmac
crypto ipsec security-association lifetime
seconds 3600
crypto ipsec security-association lifetime
kilobytes 102400000
! ---------------------------------------------------------------------------------------------------------------------
! Crypto map configuration
!
! This section defines a crypto map that binds
the cross-premise network traffic to the
! IPSec transform set and remote peer. We have
picked an arbitrary ID # "10" as an example. If
! that happens to conflict with an existing
crypto map, you may choose to use a different ID #.
crypto map azure-crypto-map 10 match address
azure-vpn-acl
crypto map azure-crypto-map 10 set peer x.x.x.x
crypto map azure-crypto-map 10 set
transform-set azure-ipsec-proposal-set
! Note that you can only bind one crypto map to
the "outside" interface. You can, however, define
! different peer/transform-set within a crypto
map and identify them with different IDs.
crypto map azure-crypto-map interface outside
!
---------------------------------------------------------------------------------------------------------------------
! Tunnel configuration
!
! This section defines an IPSec site-to-site
tunnel connecting to the Azure gateway and specifies the pre-shared key
! value used for Phase 1 authentication.
tunnel-group x.x.x.x type ipsec-l2l
tunnel-group x.x.x.x ipsec-attributes
pre-shared-key xxxxxxxxx
exit
! ---------------------------------------------------------------------------------------------------------------------
! TCPMSS clamping
!
! Adjust the TCPMSS value properly to avoid
fragmentation
sysopt connection tcpmss 1350
exit
|
For example if you see my interfaces on my home
ASA are inside/outside so the script is fine for me, but if your
interfaces are different you will have to edit the script. My ASA is also
running IOS 9.3 and the script is for 8.3, the difference is how the static NAT
statement is written.
You can use the ASDM or an SSH session to your
firewall to input the script, if you are using ASDM click Tools and Command
Line Interface...
Select Multiple Lines and copy and paste
the lines of code into the box, I have found the exit statements in the
script get returned by the ASA as none executable code, so I edit them out.
Return to the vNet page and click Connect.
If everything has been completed successfully your VPN should form correctly,
all of the routes etc should automatically be in place therefore when you ping
an on premise server it should get all the way to your Azure instances.