Skip to main content

Membuat Koneksi VPN IPsec AWS Dengan pfSense

 

Umumnya, server atau instance di AWS diakses menggunakan IP Public (atau hostname yang dipointing ke IP public). Namun selain menggunakan IP Public, kita juga dapat mengakses melalui private IP, namun untuk mengakses instance menggunakan IP private kita harus membuat tunnel terlebih dahulu ke network VPC di AWS. Tunnel-nya bisa menggunakan jalur dedicated line (AWS Direct Connect) atau menggunakan VPN.

Tutorial kali ini akan menjelaskan langkah-langkah membuat koneksi site-to-site VPN antara VPC di AWS dengan network diluar AWS menggunakan pfSense.

Topologi di bawah ini adalah contoh implementasi yang akan dibuat.

Agar kedua network dapat berkomunikasi, subnet antara kedua network tersebut tidak boleh overlap. Jika network memiliki CIDR yang overlap maka kamu harus ubah salah satunya agar tidak overlap. Pada tutorial ini, di office network diasumsikan memiliki subnet 192.168.0.0/24 dibelakang pfSense yang akan dihubungkan dengan AWS VPC 172.31.0.0/16. Saya tidak akan menjelaskan pembuatan AWS VPC di tutorial ini, jadi diasumsikan bahwa kamu sudah memiliki VPC, dan biasanya di tiap region AWS sudah membuatkan default VPC. Untuk keperluan pengetesan, saya sudah siapkan masing-masing VM/instance baik di office network maupun di AWS. Nantinya kita akan coba ping dari masing-masing VM untuk mengetahui apakah koneksi VPN berhasil atau tidak.

Okeh langsung mulai aja yuk ikutin tutorialnya di bawah ini :

Step 1. Create AWS Customer Gateway

  1. Dari AWS Management Console, masuk ke menu VPC.
  2. Di bagian VPN Connection, klik Customer Gateway
  3. Pilih Create Customer Gateway
  4. Masukkan nama Customer Gateway, dan di kolom IP Address masukkan IP Public / WAN dari pfSense.

Step 2. Create Virtual Private Gateway (VPG)

  1. Dari console AWS VPC, klik menu Virtual Private Gateways.
  2. Pilih Create Virtual Private Gateway
  3. Ketikkan nama VPG-nya, dan di pilihan ASN, pilih Amazon default ASN.
  4. Pilih VPG yang baru dibuat, lalu pilih menu Actions > Attach to VPC
  5. Pilih VPC AWS Anda yang ingin dikoneksikan ke network luar.

Step 3. Tambahkan Routing Table

Agar VPC dapat berkomunikasi dengan network lain, maka perlu ditambahkan routing ke network tujuan. Sebenarnya saat VPN sudah established, biasanya network tujuan akan otomatis ditambahkan. Namun berdasarkan pengalaman saya, seringkali networknya tidak otomatis sehingga harus ditambah manual. Jadi agar amannya, lebih baik kita tambahkan saja routingnya dari awal secara manual.

  1. Dari console AWS VPC, klik menu Route Tables.
  2. Pilih VPC yang diinginkan, lalu klik tab Routes di bagian bawah.
  3. Klik menu Edit, lalu klik tombol Add another route
  4. Di bagian Destination, masukkan CIDR network office, dan dibagian Target pilih VPG yang sebelumnya dibuat. Jika sudah klik tombol Save.

Step 4. Create AWS VPN Connection

  1. Masih dari console AWS VPC, pilih menu VPN Connections
  2. Pilih Create VPN Connection
    • Name tag                         : Masukkan nama koneksi VPN
    • Virtual Private Gateway : Pilih VPG yang sebelumnya dibuat.
    • Customer Gateway : Existing
    • Customer Gateway ID : Pilih Customer Gateway yang sebelumnya dibuat
    • Routing Options             : Static
    • Static IP Prefixes             : Masukkan prefix network tujuanUntuk parameter lain biarkan default. Klik tombol Create VPN Connection di bagian bawah
  1. Tunggu beberpa saat sampai state profile VPN yang dibuat menjadi “Available
  2. Jika sudah available, Klik Download Configuration untuk mendownload konfigurasi VPN AWS tersebut.
    • Vendor : Pilih pfSense
    • Platform : pfSense
    • Software : pfSense

Berikut adalah contoh isi file konfigurasi VPN AWS.

File konfigurasi tersebut berisi beberapa informasi penting yang kita butuhkan untuk konfigurasi di sisi pfSense, seperti IP remote gateway AWS dan pre-shared key untuk Phase 1.

 

Step 5. Buat Konfigurasi IPsec di pfSense

  1. Pilih web GUI pfSense, pilih menu VPN > IPsec
  2. Klik menu Add P1. Masukkan parameter seperti gambar di bawah ini.
    Note : untuk kolom Remote Gateway dan Pre-Shared Key sesuaikan dengan yang ada di file konfigurasi yang sebelumnya didownload.


  • Setelah disimpan, klik menu Show Phase 2 > Add P2 di konfigurasi Phase 1 yang sudah dibuat.
  • Masukkan parameter Phase 2 seperti gambar di bawah ini.
    • Untuk pilihan Local Network, kamu juga bisa memilih “LAN Network”. Namun berdasarkan pengalaman, beberapa kali routing tidak tembus padahal status IPsec sudah established. Jadi saran saya sebaiknya pilih Network dan masukkan subnet LAN manual.
    • Untuk pilihan Remote Network, masukkan CIDR AWS VPC kamu.
    • Untuk bagian Automatically Ping Host, kamu bisa masukkan IP instance AWS kamu, namun bisa juga kamu kosongkan karena ini optional.
       

 

  1. Klik menu Apply Changes untuk menyimpan konfigurasi IPSec
  2. Tambahan : Berdasarkan beberapa dokumentasi yang saya baca, ada parameter tambahan yang dapat diubah untuk meningkatkan reliability IPsec, yaitu MSS. Untuk mengubah parameter MSS, klik tab Advanced Settings, lalu masukkan angka 1387 di kolom Maximum MSS.

Step 5. Start pfSense IPsec Service for AWS

  1. Dari web GUI pfSense, pilih menu Status > IPsec
  2. Pilih konfigurasi IPsec yang sebelumnya dibuat, lalu klik pilihan Connect VPN.
  3. Jika koneksi berhasil, maka status IPsec akan berubah menjadi ESTABLISHED seperti gambar di bawah ini.
  4. Status VPN di AWS juga akan berubah menjadi UP.

Note : Saya pernah beberapa mengalami kasus dimana status IPsec di pfSense sudah established namun di AWS masih DOWN. Jika hal ini terjadi, pastikan konfigurasi Phase 1 dan Phase 2 sudah benar terutama di bagian LOCAL dan REMOTE network.

Step 6. Create Firewall Rule

Meskipun network sudah terhubung, kita masih harus menambahkan rule firewall agar traffic yang diinginkan dapat lewat. Firewall rule ini harus dibuat baik disisi pfSense maupun di AWS Security Group. Di tutorial ini saya tidak akan menjelaskan cara konfigurasi AWS Security Group melainkan hanya firewall rule di pfSense saja.

  1. Pilih menu Firewall > Aliases.
    Disini saya menggunakan alias firewall agar memudahkan penamaan dan agar lebih mudah mengingat rule tersebut. Ketikkan nama serta Network VPC AWS seperti contoh di gambar berikut ini :

  • Tambahkan rule IPSec melalui menu Firewall > Rules > IPsec. Klik tombol Add
  • Silahkan atur firewall sesuai kebutuhan. Disini saya akan melewatkan (Pass) semua protocol baik dari network AWS ke subnet LAN, oleh karena itu Action kita pilih Pass dan Source ketikkan network VPC AWS atau masukkan nama alias yang sudah dibuat sebelumnya. Untuk Destination pilih LAN.

 

 

Step 6. Testing Connection

Untuk memastikan bahwa koneksi VPN sudah berhasil dan traffic sudah tembus, kita coba lakukan Ping dari server di Local LAN ke server di AWS dan sebaliknya menggunakan IP private masing-masing server.

  • Ping dari Office LAN ke AWS
  • Ping dari AWS ke Office LAN

Selamat!! Networknya sudah konek brooo…..

 

Note :  

Biar gak kaget kalau ada tagihan VPN yang besar, sedikit informasi saja kalau untuk koneksi VPN di AWS, customer akan dikenakan tarif sebagai berikut :

  • $0.05 per VPN Connection per hour
  • Standard AWS data transfer