IPsec VTI - connect to Microsoft Azure
Microsoft Azure offers three VPN types:
policy-based (restricted to a single S2S connection)
route-based
route-based with BGP (not available in the virtual network gateway SKU “Basic”)
This how-to covers setting up a route-based S2S VPN.
Before you start
Before starting with the configuration of an IPsec tunnel you need to have a working OPNsense installation and an Azure virtual network setup with a unique LAN IP subnets for each side of your connection (your local networks need to be different from your remote networks).
For setting up a Microsoft Azure virtual network and virtual network gateway refer to the Microsoft Azure documentation:
Sample Setup
This sample configuration uses an OPNsense box and the basic Azure virtual network gateway, with the following configuration:
Azure
Hostname |
Azure |
Virtual Network Gateway Public IP |
4.3.2.1 |
Virtual Network Address Space |
192.168.2.0/24 |
Firewall Rules OPNsense
To allow IPsec tunnel connections, the following should be allowed on WAN for on sites (under
):Protocol ESP
UDP Traffic on port 500 (ISAKMP)
UDP Traffic on port 4500 (NAT-T)

Note
You can further limit the traffic by the source IP of the remote host.
Step 1 - Phase 1 OPNsense
(Under
Press +) We will use the following settings:General information
Connection method |
Respond only |
|
Key Exchange version |
V2 |
|
Internet Protocol |
IPv4 |
|
Interface |
WAN |
Choose the interface connected to the internet |
Remote gateway |
4.3.2.1 |
The public IP address of your Azure virtual network |
Description |
IPsec Azure |
Freely chosen description |
Phase 1 proposal (Authentication)
Authentication method |
Mutual PSK |
Using a Pre-shared Key |
My identifier |
My IP address |
Simple identification for fixed IP |
Peer identifier |
Peer IP address |
Simple identification for fixed IP |
Pre-Shared Key |
At4aDMOAOub2NwT6gMHA |
Random key. CREATE YOUR OWN! |
Phase 1 proposal (Algorithms)
Encryption algorithm |
AES 256 |
refer to Azure docs for details |
Hash algoritm |
SHA256 |
|
DH key group |
2 (1024 bit) |
|
Lifetime |
28800 sec |
Lifetime before renegotiation |
Note
Possible parameters are listed here: https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpn-devices
Advanced Options
Install Policy |
Unchecked |
This has to be unchecked since we want plain routing |
Disable Rekey |
Unchecked |
Renegotiate when connection is about to expire |
Disable Reauth |
Unchecked |
For IKEv2 only re-authenticate peer on rekeying |
NAT Traversal |
Disable |
For IKEv2 NAT traversal is always enabled |
Dead Peer Detection |
Unchecked |
Save your setting by pressing:

Step 2 - Phase 2 OPNsense
Press the button + in front of the phase 1 entry to add a new phase 2.
As we do not define a local and remote network, we just use tunnel addresses,
you might already know from OpenVPN. In this example we use 10.111.1.1
and
10.111.1.2
. These will be the gateway addresses used for routing
General information
Mode |
Route-based |
Select Route-based |
Description |
Azure VNET |
Freely chosen description |
Tunnel Network
Local Address |
Local Tunnel IP |
Set IP 10.111.1.1 |
Remote Address |
Remote Tunnel IP |
Set IP 10.111.1.2 |
Phase 2 proposal (SA/Key Exchange)
Protocol |
ESP |
Choose ESP for encryption |
Encryption algorithms |
AES / 256 |
refer to Azure docs for details |
Hash algortihms |
SHA256 |
|
PFS Key group |
off |
Not supported |
Lifetime |
27000 sec |
Save your settings by pressing:

Enable IPsec for OPNsense, select:

Save:

And apply changes:


Step 3 - Set MSS Clamping
(Under
) We will use the following settings:Setup
MSS |
1350 |
Required |
Leave the other settings as per default.
Save:

You are almost done configuring OPNsense (only some firewall settings remain, which will be addressed later). We will now proceed setting up Azure.
Step 4 - Azure: Setup local network gateway
(Under All resources press + Add, then search and Create Local network gateway) We will use the following settings:
Setup
Name |
lng.opnsense |
Freely chosen name |
IP address |
1.2.3.4 |
The public IP address of your remote OPNsense |
Address space |
192.168.1.0/24 |
LAN Network |
Address space |
10.111.1.1/32 |
Local Tunnel IP |
Press the button that says ‘Create’:

Step 5 - Azure: Setup VPN connection
(Under All resources –> Virtual network gateway –> Connections Press + Add) We will use the following settings:
General setup
Name |
vpn.opnsense |
Freely chosen name |
Connection type |
Site-to-site (IPsec) |
|
Virtual network gateway |
vpn.gw |
Select virtual network gateway |
Local network gateway |
lng.opnsense |
Select local network gateway |
Shared Key (PSK) |
At4aDMOAOub2NwT6gMHA |
Random key. CREATE YOUR OWN! |
Press the button that says ‘OK’:

Firewall Rules OPNsense
To allow traffic passing to your LAN subnet you need to add a rule to the IPsec interface (under
).
IPsec Tunnel Ready
The tunnel should now be up and routing the both networks. Go to
to see current status.Step 6 - Define Gateways
Now that you have the VPN up and running you have to set up a gateway. Go to
and add a new gateway.OPNsense
Name |
VPNGW |
Set a name for your gateway |
Interface |
IPSEC1000 |
Choose the IPsec interface |
IP Address |
10.111.1.2 |
Set the peer IP address |
Far Gateway |
Checked |
This has to be checked as it is a point-to-point connection |