{"id":18037,"date":"2024-04-09T13:16:09","date_gmt":"2024-04-09T07:46:09","guid":{"rendered":"https:\/\/blog.opstree.com\/?p=17992"},"modified":"2026-01-03T13:25:15","modified_gmt":"2026-01-03T07:55:15","slug":"simplifying-site-to-site-vpn-connectivity-with-strongswan","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2024\/04\/09\/simplifying-site-to-site-vpn-connectivity-with-strongswan\/","title":{"rendered":"Simplifying Site-to-Site VPN Connectivity with StrongSwan\u00a0"},"content":{"rendered":"\r\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\r\n\r\n\r\n\r\n<p>As a new member of the team, I was tasked for establishing site-to-site VPN connectivity using a third-party tool. After exploring numerous blogs in search of the perfect solution, I stumbled upon StrongSwan. Excited to put it to the test, I followed the provided guides carefully. However, upon implementation, I encountered a frustrating roadblock: while the tunnel was successfully created, communication between the virtual networks remained elusive.<!--more--><\/p>\r\n\r\n\r\n\r\n<p>This blog aims to tackle that very challenge head-on. I&#8217;ll be sharing a comprehensive, step-by-step guide to achieve seamless site-to-site VPN connectivity between two <a href=\"https:\/\/opstree.com\/services\/cloud-engineering-modernisation-migrations\/\"><strong>cloud environments<\/strong><\/a>. Guess, what&#8217;s the best part? The same principles can be effortlessly applied to on-premise infrastructure setups as well.<\/p>\r\n\r\n\r\n\r\n<p>But, what if your cloud provider doesn&#8217;t offer managed services for site-to-site VPN connectivity? Or if the process for establishing site-to-site VPN connectivity using <a href=\"https:\/\/opstree.com\/services\/devsecops-transformation-and-automation\/\"><strong>managed services<\/strong><\/a> requires different configurations and setup steps? Don&#8217;t worry, we&#8217;ll address those scenarios too.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p>So, if you&#8217;ve ever had trouble with site-to-site VPN connections or making sure your networks connect properly, you&#8217;re in the right place. Let&#8217;s get started and understand site-to-site VPNs together!<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Why Use StrongSwan?<\/strong><\/h2>\r\n\r\n\r\n\r\n<p>Using StrongSwan for site-to-site VPN connectivity offers several advantages:<\/p>\r\n\r\n\r\n\r\n<p>1.Flexibility: StrongSwan is highly configurable, allowing you to tailor the VPN setup to your specific requirements and network environments.<\/p>\r\n\r\n\r\n\r\n<p>2. Open Source: Being an <a href=\"https:\/\/opstree.com\/opstree-open-source\/\"><strong>open-source solution<\/strong><\/a>, <strong>StrongSwan<\/strong> is cost-effective and offers transparency, enabling you to inspect and modify the code as needed.<\/p>\r\n\r\n\r\n\r\n<p>3. Compatibility: StrongSwan supports various VPN protocols, including IKEv1 and IKEv2, ensuring compatibility with a wide range of devices and platforms.<\/p>\r\n\r\n\r\n\r\n<p>4. Security: StrongSwan prioritizes security, offering robust encryption and authentication mechanisms to protect your data during transit.<\/p>\r\n\r\n\r\n\r\n<p>5. Ease of use: The ease of use is another significant benefit of using StrongSwan for site-to-site VPN connectivity. Whether you&#8217;re a seasoned network administrator or a novice user, StrongSwan provides a user-friendly experience, ensuring that you can efficiently establish and maintain secure site-to-site VPN connections between various <strong>cloud platforms<\/strong> and <a href=\"https:\/\/opstree.com\/blog\/2024\/04\/25\/cloud-or-on-premise-it-infrastructure-whats-right-for-you\/\"><strong>on-premise infrastructure<\/strong><\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Steps To Create Site to Site VPN Connection Using StrongSwan<\/h2>\r\n\r\n\r\n\r\n<p>I will demonstrate how to establish a site-to-site VPN connection between <strong>Azure<\/strong> and <strong>AWS<\/strong>. This method can be applied to any cloud platform or on-premise infrastructure.<img decoding=\"async\" class=\"wp-image-18036\" src=\"https:\/\/blog.opstree.com\/wp-content\/uploads\/2024\/03\/image-19-1024x341.png\" alt=\"\" \/><\/p>\r\n\r\n\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Configuration on AWS side<\/strong><\/h2>\r\n\r\n\r\n\r\n<p><strong>Step 1: Configure VPC, Subnet and Internet Gateway<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Create a <a href=\"https:\/\/opstree.com\/blog\/2024\/01\/16\/demystifying-ocis-virtual-cloud-network-a-deep-dive-into-vcn-architecture\/\">Virtual Private Cloud<\/a> (VPC) with a non-overlapping CIDR block compared to the Azure VNet. Within the VPC, establish a public subnet and attach an Internet Gateway to enable connectivity to the internet. Create a public route table and configure a route allowing internet traffic flow through it. Associate the public subnet with the route table to facilitate proper routing. Finally, launch an <a href=\"https:\/\/opstree.com\/blog\/2021\/11\/30\/ec2-store-overview-difference-b-w-aws-ebs-and-instance-store\/\">EC2 instance<\/a> in the public subnet.<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><strong>VPC Name:<\/strong> VPC-s2s<\/li>\r\n\r\n\r\n\r\n<li><strong>VPC Cidr: <\/strong>172.0.0.0\/16<\/li>\r\n\r\n\r\n\r\n<li><strong>Subnet Name:<\/strong> subnet-01<\/li>\r\n\r\n\r\n\r\n<li><strong>Subnet Cidr:<\/strong> 172.0.1.0\/24<\/li>\r\n\r\n\r\n\r\n<li><strong>Route Table Name:<\/strong> rt-s2s<\/li>\r\n\r\n\r\n\r\n<li><strong>Internet Gateway Name:<\/strong> igw-s2s<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Step 2: Connect Securely to the EC2 Instance and Perform the Configuration<\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>A:<\/strong> <strong>Update the package repository and upgrade existing packages and install StrongSwan<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\r\n<pre class=\"wp-block-code\"><code>\u00a0\u00a0\u00a0sudo apt update &amp;&amp; sudo apt upgrade -y<br \/>   sudo apt install strongswan -y<\/code><\/pre>\r\n\r\n\r\n<\/div><\/div>\r\n\r\n\r\n\r\n<p><strong>B<\/strong>. <strong>Generate a Pre-Shared Key (PSK) for authentication purposes on both endpoints of the VPN tunnel, execute the following command<\/strong>.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>openssl rand -base64 64<\/code><\/pre>\r\n\r\n\r\n\r\n\r\n\r\n<p>Copy the generated key and paste it into a secure location after removing any extra spaces.<\/p>\r\n\r\n\r\n\r\n<p><strong>C<\/strong>. <strong>Open the &#8220;ipsec.secrets&#8221; file and add text with below format:<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/ipsec.secrets<br \/><br \/>&lt;public ip of aws VM (site a)&gt; &lt;public ip of azure VM (site b)&gt;: &lt;encryption method&gt; &lt;key&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n\r\n\r\n<p><strong>D. Access the &#8220;ipsec.conf&#8221; file and append the provided configuration to the end of the file. Save the changes and exit.<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo\u00a0nano \/etc\/ipsec.conf<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>config setup<br \/>       charondebug=\"all\"<br \/>       uniqueids=yes<br \/>       strictcrlpolicy=no<br \/><br \/><strong># connection to siteA datacenter<br \/><\/strong>conn siteA-to-siteB<br \/> authby=secret<br \/> left=%defaultroute<br \/> leftid=&lt;public ip of site A&gt;<br \/> leftsubnet=&lt;vpc range of strongswan instance at site A&gt;<br \/> right=&lt;public ip of site B&gt;<br \/> rightsubnet=&lt;vpc range of strongswan instance at site B&gt;<br \/> ike=aes256-sha2_256-modp1024!<br \/> esp=aes256-sha2_256!<br \/> keyingtries=0<br \/> ikelifetime=1h<br \/> lifetime=8h<br \/> dpddelay=30<br \/> dpdtimeout=120<br \/> dpdaction=restart<br \/> auto=start<\/code><\/pre>\r\n\r\n\r\n\r\n\r\n\r\n<p><strong>E. Enable ip forwarding<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Enabling `<strong>net.ipv4.ip_forward=1<\/strong>` allows the instance to function as a router. With IP forwarding enabled on a Linux system, it gains the ability to forward packets between different network interfaces, similar to a router. StrongSwan relies on IP forwarding to efficiently route encrypted VPN traffic between the local and remote networks. Without IP forwarding enabled, the instance would not be able to effectively handle and route VPN traffic, leading to connectivity issues and potential VPN tunnel failures effectively.<\/p>\r\n\r\n\r\n\r\n<p>To enable IP forwarding:<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>Open the <code>\/etc\/sysctl.conf<\/code> file for editing.<\/li>\r\n\r\n\r\n\r\n<li>Locate the line <code>#net.ipv4.ip_forward=1<\/code> and remove the <code>#<\/code> at the beginning.<\/li>\r\n\r\n\r\n\r\n<li>Save the changes and exit the editor.<\/li>\r\n\r\n\r\n\r\n<li>Apply the changes immediately without rebooting by running <code>sudo sysctl -p<\/code>.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/fiSvSFbDCPShpfyq3cMwQdfBxioQlWGwJu8qxrAMXpr7cVPqmPFpAgSZNkLTyZqAiE2tZIBU5PAGfS6BdRAaHdDQskYKzdvwot9wIsiwSUDnrUyJmTyDCIKfMBDGkejSsARXZk2HeWoU04_jr9J7FH4\" width=\"525\" height=\"86\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>F. Source and destination check off<\/strong><\/p>\r\n\r\n\r\n\r\n<p>By default, EC2 instances in AWS have a feature called &#8220;source\/destination check&#8221; enabled. This feature ensures that an instance only accepts traffic that is either destined for or originates from itself. This behavior is suitable for most instances that function as servers. However, when an instance acts as a router, such as when running StrongSwan for VPN connectivity, it needs to be able to forward traffic between different network interfaces, even if the traffic is not specifically destined for the instance itself. Disabling source and destination checks allows the instance to process and forward packets intended for other destinations. This can be done through the AWS Management Console by selecting the instance, navigating to its networking settings and disabling the source\/destination.<\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/pz8US4MytP7JG-JItO51Q_5YxMls7QsjC2rA1hhCdeOLhegNuDZ-NiZ2AywzAyt7haQH24sUG2FVt0X4cYWQ1okc62OnrG5FEGfIT15Zzsy85dSdfWmahcW9FcbTOrwpatCdNAPOqfVSuEUYpKgFsHg\" width=\"1189\" height=\"392\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/n8Twu0qCc4jDNxZWcXXZ8WyJzuiXlOKw4Au7G1YNq_7C48w-mFCvC6FbB_yzWndAxZIrKAukOZXqJlz-VErLen4mZ4JyZplAnQcBeL_jxat_rU_cg9yiBBMeVSTIXksGsHTh2F7sdWIlZuSKO4BKlx4\" width=\"764\" height=\"368\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>G.<\/strong> <strong>Configuring Route in the Public Route Table for Azure VNet:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>The purpose of adding this route is to ensure proper routing of traffic between the EC2 instance where StrongSwan is installed and the Azure Virtual Network (VNet). This step is essential for establishing a VPN connection between the two networks and facilitating the exchange of data securely.<\/p>\r\n\r\n\r\n\r\n<p><strong>To add the route, follow these steps:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>1. In the &#8220;<strong>Destination<\/strong>&#8221; field, enter the CIDR block for the Azure VNet. This CIDR block specifies the range of IP addresses assigned to the Azure VNet.<\/p>\r\n\r\n\r\n\r\n<p>2. In the &#8220;<strong>Target<\/strong>&#8221; field, select &#8220;<strong>Instance<\/strong>&#8221; and then choose the <strong>EC2 instance ID<\/strong> of the server where StrongSwan is installed. This indicates that the specified destination CIDR block should be reachable via the selected EC2 instance.<\/p>\r\n\r\n\r\n\r\n<p><strong>Routing VPN Traffic:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Once the route is added, the EC2 instance hosting StrongSwan effectively handles the VPN connection and forwards the traffic through the VPN tunnel to the Azure VNet. This ensures seamless communication between the two networks and enables secure data exchange over the VPN connection.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Configuration on Azure side<\/strong><\/h2>\r\n\r\n\r\n\r\n<p><strong>Step 1: <\/strong><strong>Configure Azure Environment for StrongSwan Deployment<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Now, for Azure, create a resource group and within it, deploy a Virtual Network (VNet) with associated subnets. Ensure proper internet connectivity by configuring the subnet where the virtual machine (VM) hosting StrongSwan will be launched. This includes setting up appropriate routes to allow necessary traffic flow. Finally, launch the virtual machine within the specified subnet.<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><strong>Resource group name : <\/strong>s2s<\/li>\r\n\r\n\r\n\r\n<li><strong>Vnet Name: <\/strong>vnet<strong>&#8211;<\/strong>s2s<\/li>\r\n\r\n\r\n\r\n<li><strong>Region: <\/strong>East US<\/li>\r\n\r\n\r\n\r\n<li><strong>Vnet cidr:<\/strong> 10.0.0.0\/16<\/li>\r\n\r\n\r\n\r\n<li><strong>Subnet name: <\/strong>subnet-s2s<\/li>\r\n\r\n\r\n\r\n<li><strong>Subnet cidr: <\/strong>10.0.0.0\/24<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Step 2: Connect Securely to the Virtual Machine and Perform the Configuration<\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>A:<\/strong> <strong>Update the package repository and upgrade existing packages and install StrongSwan<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\r\n<pre class=\"wp-block-code\"><code>\u00a0\u00a0\u00a0sudo apt update &amp;&amp; sudo apt upgrade -y<br \/>   sudo apt install strongswan -y<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong>B<\/strong>. <strong>Open the &#8220;ipsec.secrets&#8221; file and add text with below format:<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/ipsec.secrets<br \/><br \/>&lt;public ip of azure VM (site b)&gt; &lt;public ip of aws VM(site a)&gt; : &lt;encryption method&gt; &lt;key&gt;<\/code><\/pre>\r\n<\/div><\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-coblocks-highlight\"><mark class=\"wp-block-coblocks-highlight__content\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/6u2i53h30RfvfapD0COI8VaD-LAdfqWfraZWabNtU7NRCAJ1FBXY10SWFl7h5NjjJlghcTYcdlOsdMry9HKbw_5ylM7vuxqvbfyECGQQnc3z9ym0yUp1Z7iRKCofoosoK5dXlPF7Zg8oQLvjdY9p2bA\" width=\"1337\" height=\"230\" \/><\/mark><\/p>\r\n\r\n\r\n\r\n<p><br \/><strong>C<\/strong>. <strong>Access the &#8220;ipsec.conf<\/strong>&#8220;<strong> file and append the provided configuration to the end of the file. Save the changes and exit.<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>config setup<br \/>       charondebug=\"all\"<br \/>       uniqueids=yes<br \/>       strictcrlpolicy=no<br \/><br \/><strong># connection to siteB datacenter<br \/><\/strong>conn siteA-to-siteB<br \/> authby=secret<br \/> left=%defaultroute<br \/> leftid=&lt;public ip of site B&gt;<br \/> leftsubnet=&lt;vpc range of strongswan instance at site B&gt;<br \/> right=&lt;public ip of site A&gt;<br \/> rightsubnet=&lt;vpc range of strongswan instance at site A&gt;<br \/> ike=aes256-sha2_256-modp1024!<br \/> esp=aes256-sha2_256!<br \/> keyingtries=0<br \/> ikelifetime=1h<br \/> lifetime=8h<br \/> dpddelay=30<br \/> dpdtimeout=120<br \/> dpdaction=restart<br \/> auto=start<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Ensure that you replace the placeholders with the correct IP addresses and VPC CIDRs.<\/p>\r\n\r\n\r\n\r\n<p><strong>D. Enable IP forwarding<\/strong><\/p>\r\n\r\n\r\n\r\n<p>As mentioned previously, navigate to <code><strong>\/etc\/sysctl.conf<\/strong><\/code> and uncomment the line <code><strong>net.ipv4.ip_forward=1<\/strong><\/code>. Save the changes. To apply the modifications without rebooting, execute the <code><strong>sudo sysctl -p<\/strong> <\/code>command on azure VM.<\/p>\r\n\r\n\r\n\r\n<p>To enable IP forwarding, access the network settings of the launched StrongSwan virtual machine. Navigate to the IP configuration section and enable the option for IP forwarding by checking the corresponding box.<\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/4NPzNUmXBhoHCBDjh7UZF1ElHLhhgWflRziZ80KzvOJP1ZiFuNM-OLBgSssE8KH2TX-uhnMluAgh-AysZWop4zKbtQGz_9PKVbk7B8uADwkSsTOebgMdZKapwLqjcRiJ23OVKUZb1sFsZntezTjGYHU\" width=\"1362\" height=\"503\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/cKBfsHhpj3-KsVVLBT-Kb0TcwaCh8QiRNoDNpwh0YDattc8f7i4qi7QUSABH3D3lasSDa2SdSGxQ9niPnyh-TgDMZ7yUZdNlR5fGkrkXiEEyYD-jT3aThNNBipZ3qKqzpWD44qG-ySsZRwnSeunTd_A\" width=\"1302\" height=\"487\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>E. Add route<\/strong><\/p>\r\n\r\n\r\n\r\n<p>To add a route in the default routes of an Azure VM, first, create a route table. Then, navigate to the routes section within the route table. Create a new route, selecting &#8220;IP address&#8221; as the destination type. Specify the CIDR range of the AWS VPC previously created as the destination CIDR range. Choose &#8220;Virtual Appliance&#8221; as the next hop type and provide the private IP address of the StrongSwan Azure VM as the next hop address. Lastly, make sure to associate the subnet to the route table.<\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/SEzy8Q1kc9yBJMaFmudiSpTmjsH8OD4LqI0CtNpoKXjFxlgiflTgx6YMpA2t8NzlZjeHf1JUcSBmyR54uw0HURmdZgY6d4U2RlRt7wdErbcpiejSvj2Trof7prYmCfk4T_Gv0EaGutJRtPOzyquwNNc\" width=\"1348\" height=\"665\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/SEzy8Q1kc9yBJMaFmudiSpTmjsH8OD4LqI0CtNpoKXjFxlgiflTgx6YMpA2t8NzlZjeHf1JUcSBmyR54uw0HURmdZgY6d4U2RlRt7wdErbcpiejSvj2Trof7prYmCfk4T_Gv0EaGutJRtPOzyquwNNc\" width=\"1348\" height=\"665\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p>By specifying the destination as the AWS VPC&#8217;s CIDR range and setting the next hop as the StrongSwan Azure VM&#8217;s private IP address, we ensure that traffic intended for the AWS VPC is routed through the VPN tunnel established by StrongSwan.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>That&#8217;s It ! Restart the Strongswan Service<\/strong><\/h2>\r\n\r\n\r\n\r\n<p>\u00a0You are all set, now go to your AWS and Azure VM and run the below command on by one.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ipsec restart\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<br \/>ipsec status\u00a0<\/code><\/pre>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Gg6-XejJYmU3M5wx45ichm9UWTlIreYjG1ROVZ909G4lb9nc7B0kUps7UCi4VwfEQ_597Gwr8D5DA0yoWkOREwYLLcPgP1YYqqo6tz2mE99wXYU0M066jtqyYKUkD4f8Co4FOa3qUUHfjHyMJwKlY44\" width=\"1060\" height=\"174\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/IO9etdP1TZPv0dmFlbSvBDxk5tPxDblz5aDBpE4MXq2D1SC1jst4QRvbV6PtMaMKpFSg8vVqn86AimuqTyI-4_KGftxxaxGj07bVu43Wxx-YcnZEftCgug6hbMfoTA_IOogB0WU6PcYYWcWqCRygl8Q\" width=\"1012\" height=\"169\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Verification<\/strong><\/h2>\r\n\r\n\r\n\r\n<p>Once the VPN tunnel has been successfully established, all resources within your Virtual Network (VNet) will become capable of communicating with each other. To verify connectivity, you can create instances in both virtual private networks, each within different subnets. These instances should be able to communicate via their private IP addresses.<\/p>\r\n\r\n\r\n\r\n<p>To verify connectivity, execute the following commands:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ping &lt;private IP of Site A&gt;<br \/><br \/>ping &lt;private IP of Site B&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Replace `&lt;private IP of Site A&gt;` and `&lt;private IP of Site B&gt;` with the actual private IP addresses of the servers in Site A (AWS) and Site B (Azure), respectively. These commands will test connectivity between the servers in both sites.<\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/m6fq5cY_tV1eZZgA2Egft1cBxdIWLaTSY9Id7sMXh6mvNhegBSbHwQR5wsSIsvmozu2cRzk2lcDQazAA9cDmVXpZryl6OEWRAciFfpV6OCCwI3KgJg843hZFW0U9wmtLbPGaODETsLeVLW4Tbu1EnDA\" width=\"661\" height=\"211\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/shBybRPX_dQ9N0a9hfEIs9KUFeMLU7bjuyz5nKZJeoYNOhzuaYTijeAodmkzsdE1LaV2-FA168xdpcoeyZeBCGx6msOGojHj1IqaXoy7FyRk5tIfhC2vRz_rVGH-NyKAs_HeRwpKLwFZOCG3fnFfnQk\" width=\"630\" height=\"170\" \/><\/strong><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\r\n\r\n\r\n\r\n<p>In conclusion, we have successfully set up a site-to-site IPsec VPN connection between Azure and AWS using the open-source tool StrongSwan. By leveraging StrongSwan instead of managed services provided by cloud providers, we were able to save costs while maintaining a high level of security and flexibility.<\/p>\r\n\r\n\r\n\r\n<p>The ease of setup and configuration provided by StrongSwan allowed us to establish the VPN connection in a relatively short amount of time, ensuring minimal disruption to our operations. Additionally, the compatibility of StrongSwan with various VPN protocols and platforms made it a versatile choice for our deployment needs.<\/p>\r\n\r\n\r\n\r\n<p>By implementing IP forwarding and configuring route tables on both cloud platforms, we ensured proper routing of traffic through the VPN tunnel, facilitating seamless communication between the networks. This setup not only met our security requirements but also provided a reliable and efficient means of data exchange between our cloud environments.<\/p>\r\n\r\n\r\n\r\n<p>Moreover, it&#8217;s worth noting that StrongSwan is not limited to specific cloud platforms; it can be deployed on any cloud platform or even on-premise infrastructure, making it a universally applicable solution for establishing secure VPN connections.<\/p>\r\n\r\n\r\n\r\n<p>In summary, by opting for an open-source solution like <a href=\"https:\/\/strongswan.org\/\" target=\"_blank\" rel=\"noopener\"><strong>StrongSwan,<\/strong><\/a> we achieved a cost-effective, secure and easily manageable site-to-site VPN connectivity solution tailored to our specific needs. This experience underscores the importance of exploring alternative tools and approaches to meet infrastructure requirements effectively in any environment.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/opstreedevops\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\r\n\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Introduction As a new member of the team, I was tasked for establishing site-to-site VPN connectivity using a third-party tool. After exploring numerous blogs in search of the perfect solution, I stumbled upon StrongSwan. Excited to put it to the test, I followed the provided guides carefully. However, upon implementation, I encountered a frustrating roadblock: &hellip; <a href=\"https:\/\/opstree.com\/blog\/2024\/04\/09\/simplifying-site-to-site-vpn-connectivity-with-strongswan\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Simplifying Site-to-Site VPN Connectivity with StrongSwan\u00a0&#8220;<\/span><\/a><\/p>\n","protected":false},"author":244582673,"featured_media":18260,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"Arial,Georgia","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[144203,28070474,315451],"tags":[768739294,335778,768739298,768739409],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/04\/Simplifying-Site-to-Site-VPN-Connectivity-with-StrongSwan-3.png","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-4GV","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/18037"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/244582673"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=18037"}],"version-history":[{"count":4,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/18037\/revisions"}],"predecessor-version":[{"id":30266,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/18037\/revisions\/30266"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/18260"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=18037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=18037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=18037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}