Monday, August 8, 2022

Implement OCI IPSec Site to Site VPN

 

This post explains step by step the VPN IPSec tunnel configuration in Oracle Cloud Infrastructure and how we can leverage IPSec to establish the connectivity from On premises network to resources provisioned in Oracle Cloud Infrastructure. There are two types of modes supported by IPSec and this post, i have used Tunnel Mode and which is also supported by Oracle. The entire communication between the source and destination sites is encrypted, significantly lowering the chances of information theft.




My Source On premise addresses are as follows

Source CIDR:-10.0.0.0/29

Public Router Address:-140.238.226.118

Server IP Address:-10.0.0.0.146


OCI CIDR Range:-192.168.0.0/26



VCN Setup





Create DRG

Go to Networking>Customer Connectivity>Dynamic Routing gateways




Attach the DRG to VCN










Create Route Table




Destination is: On Premise CIDR


Create Security list and add the respective ingress/egress 






Create the Regional private Subnet









Create the CPE








Create an IPSec Connection to CPE














At this moment, the IPSec Status will be down.


Also, i have one compute instance running on private subnet. We can have Database or any services running on private subnet


Configuration on the On Premise host


Install libreswan in the on prem compute instance



[root@webserver opc]# yum install libreswan

[root@webserver opc]# ipsec version

Linux Libreswan 4.5 (XFRM) on 5.4.17-2136.307.3.1.el8uek.x86_64

[root@webserver opc]#


Turning Linux instance into a IP Router Now we will configure Libreswan and enable IP forwarding feature in order to turn our Linux Instance into a Router

[root@webserver opc]# cat /etc/sysctl.conf

# sysctl settings are defined through files in

# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.

#

# Vendors settings live in /usr/lib/sysctl.d/.

# To override a whole file, create a new file with the same in

# /etc/sysctl.d/ and put new settings there. To override

# only specific settings, add a file with a lexically later

# name in /etc/sysctl.d/ and put new settings there.

#

# For more information, see sysctl.conf(5) and sysctl.d(5).


# Enable Panic on VMs on NMI trigger

kernel.unknown_nmi_panic = 1

net.ipv4.ip_forward=1

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv4.conf.eth0.accept_redirects = 0

net.ipv4.conf.default.accept_source_route = 0

net.ipv6.conf.default.accept_source_route = 0

net.ipv4.conf.all.accept_redirects = 0

net.ipv6.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv6.conf.default.accept_redirects = 0


[root@webserver opc]# vi /etc/ipsec.d/oci-ipsec.conf

conn oracle-tunnel-1

 left=10.0.0.146

 leftid=140.238.226.118 # See preceding note about 1-1 NAT device

 right=193.122.171.48

 authby=secret

 leftsubnet=10.0.0.0/29

 rightsubnet=192.168.0.0/28----VPN Address for tunnel

 auto=start

 mark=5/0xffffffff # Needs to be unique across all tunnels

 vti-interface=${vti1}

 vti-routing=yes

 ikev2=no # To use IKEv2, change to ikev2=insist

 ike=aes_cbc256-sha2_384;modp1536

 phase2alg=aes_gcm256;modp1536

 encapsulation=yes

 ikelifetime=28800s

 salifetime=3600s

conn oracle-tunnel-2

 left=10.0.0.146

 leftid=140.238.226.118 # See preceding note about 1-1 NAT device

 right=129.213.168.243-----VPN Address for Tunnel

 authby=secret

 leftsubnet=10.0.0.0/29

 rightsubnet=192.168.0.0/28

 auto=start

 mark=6/0xffffffff # Needs to be unique across all tunnels

 vti-interface=${vti2}

 vti-routing=yes

 ikev2=no # To use IKEv2, change to ikev2=insist

 ike=aes_cbc256-sha2_384;modp1536

 phase2alg=aes_gcm256;modp1536

 encapsulation=yes

 ikelifetime=28800s

 salifetime=3600s



Create ipsec secrets file


[root@webserver opc]# cat /etc/ipsec.d/oci-ipsec.secrets

140.238.226.118 193.122.171.48: PSK "fpLnW7HwiuEf5Fzu1PzHMVEVeFIszSUoaB4x2zgWtZyaNnk4kUrKZ3z5NIVFcWET"

140.238.226.118 129.213.168.243: PSK "0XczQpGij8GPr3GwPnXt9FSvefgD1UC4wgpxUCDufeSX7QBh6Ern0nWBRwuTUa59"

[root@webserver opc]#


Note: We can get the secret value from the view details section of the respective tunnels.


Restart the IPSec services

[root@webserver opc]#

 service ipsec restart


Verify the IPSec services

[root@webserver opc]# ipsec verify

Verifying installed system and configuration files

 

Version check and ipsec on-path                         [OK]

Libreswan 4.5 (XFRM) on 5.4.17-2136.307.3.1.el8uek.x86_64

Checking for IPsec support in kernel                    [OK]

 NETKEY: Testing XFRM related proc values

         ICMP default/send_redirects                    [OK]

         ICMP default/accept_redirects                  [OK]

         XFRM larval drop                               [OK]

Pluto ipsec.conf syntax                                 [OK]

Checking rp_filter                                      [ENABLED]

 /proc/sys/net/ipv4/conf/all/rp_filter                  [ENABLED]

  rp_filter is not fully aware of IPsec and should be disabled

Checking that pluto is running                          [OK]

 Pluto listening for IKE on udp 500                     [OK]

 Pluto listening for IKE/NAT-T on udp 4500              [OK]

 Pluto ipsec.secret syntax                              [OK]

Checking 'ip' command                                   [OK]

Checking 'iptables' command                             [OK]

Checking 'prelink' command does not interfere with FIPS [OK]

Checking for obsolete ipsec.conf options                [OK]

 

ipsec verify: encountered 3 errors - see 'man ipsec_verify' for help


Update the firewall rules

 

 

[root@webserver opc]# firewall-cmd --add-port=500/udp

success

[root@webserver opc]# firewall-cmd --add-port=4500/udp

success

[root@webserver opc]# firewall-cmd --runtime-to-permanent

success

[root@webserver opc]#


Update the Firewalls

[root@webserver opc]# firewall-cmd --add-port=500/udp

success

[root@webserver opc]# firewall-cmd --add-port=4500/udp

success

[root@webserver opc]# firewall-cmd --runtime-to-permanent

success

[root@webserver opc]#



Verify the tunnel status from the OCI Console







Now, you will be in a position to Ping and SSH to the compute instance running on OCI Private subnet.



References:-

Libreswan configuration: https://docs.cloud.oracle.com/iaas/Content/Network/Reference/libreswanCPE.htm?Highlight=shared%20secret

Oracle Cloud Infrastructure VPN Connect:https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPsec.html