site to site VPN AWS
Kita bisa menghubungkan jaringan yang ada di on premise dengan cloud AWS menggunakan metode site to site VPN (Virtual Private Network).
Apa itu Site to Site VPN?
- Site to site = lokasi ke lokasi / jaringan ke jaringan
- VPN = koneksi private dan terenkripsi
Artinya, dengan site to site VPN kita bisa menghubungkan dua jaringan yang berbeda (lokasinya) dan antar jaringan tersebut akan saling berkomunikasi menggunakan jalur private (terenkripsi) melalui internet.
Sebagai contoh (lihat gambar diatas), Server P-1 bisa mengakses Server A (private IP 172.31.1.136). Saat server P-1 mengirim data (misal file.jpg) ke server A, koneksi akan melalui gateway server on premise dulu dan data akan dienkripsi, baru kemudian diteruskan ke internet (data dalam keadaan terenkripsi) dan diterima oleh virtual private gateway milik AWS, data didekripsi dan diteruskan ke server A yang berada di dalam VPC.
Jadi, agar on premise dan cloud AWS bisa saling terhubung, harus ada public gateway (penghubung) dimasing-masing jaringannya:
- Virtual Private Gateway -> yang ada di cloud AWS
- Gateway server -> yang ada di on premise
Berikut adalah konfigurasi di kedua jaringannya:
- Cloud AWS:
- VPC CIDR 172.31.0.0/16
- IP Public Virtual Private Gateway: 3.1.155.43
- OS Gateway Server: –
- On premise:
- CIDR 192.168.0.0/16
- IP Public Gateway Server: 43.218.202.43
- OS Gateway Server: Centos 7
Ada 3 step utama yang akan kita lakukan:
- Setup Virtual Private Gateway (AWS)
- Setup Gateway Server (On premise)
- Test koneksi dari On premise ke AWS dan sebaliknya
1. Setup Virtual Private Gateway (AWS)
Untuk mensetup virtual private gateway di AWS, ada 4 step yang harus kita lakukan:
- Setup Customer Gateway
- Setup Virtual Private Gateway
- Setup Site-to-site VPN connections
- Enable-kan Route propagation pada route table di VPC
1.1 Setup Customer Gateway
Kita harus mendaftarkan IP Public Gateway server yang ada di on premise, agar nantinya virtual private gateway bisa berkomunikasi dengan gateway server on premise.
Masuk ke service VPC, pada menu sebelah kiri, scroll kebawah, pilih Virtual Private Network (VPN) > Customer gateways
Lalu pada pojok kanan atas klik Create Customer Gateway, isikan seperti gambar dibawah ini, lalu klik Create Customer Gateway
Name tag: customer-gateway-onpremise
BGP ASN: 65000 (default)
IP address: 43.218.202.43
Setelah itu akan terbuat customer gateway-nya
1.2 Setup Virtual Private Gateway
Selanjutnya kita buat virtual private gateway. Virtual private gateway ini akan menjadi gerbang masuk ke dalam jaringan VPC AWS yang kita punya.
Masih di service VPC, pada menu Virtual private network (VPN), pilih Virtual private gateways > Create virtual private gateway.
Masukkan sesuai gambar dibawah, lalu klik Create Virtual Gateway.
- Name tag: virtual-private-gateway1
- Autonomouse System Number (ASN): Amazon default ASN
Setelah itu akan terbuat virtual private gatewaynya. Kemudian kita attachkan ke VPC.
Klik Actions > Attach to VPC
Pilih VPC nya (VPC saya: vpc-test), lalu klik attach to VPC
Kalau sudah statenya akan berubah menjadi Attached, artinya virtual private gateway sudah dikaitkan ke VPC.
1.3 Setup Site-to-site VPN connections
Selanjutnya kita buat site to site VPN connections untuk menghubungkan antara virtual private gateway dengan customer gateway (gateway server on premise).
Masih di service VPC, pilih menu Virtual Private Network (VPN) > pilih Site to site VPN connections > klik Create VPN Connection.
Masukkan konfigurasinya seperti dibawah dan klik Create VPN Connection
Name tag: VPN-01
Target gateway type: Virtual private gateway
Virtual private gateway: <pilih virtual private gateway yang sebelumnya sudah kita buat>
Customer gateway: Existing
Customer gateway ID: <pilih customer gateway yang sebelumnya sudah kita buat>
Routing options: Static
Static IP prefixes: 172.31.0.0/16 dan 192.168.0.0/16
Local IPv4 network CIDR: 192.168.0.0/16
Remote IPv4 network CIDR: 172.31.0.0./16
Setelah site to site VPN connection terbuat, bisa dilihat pada tab Tunnel details, Tunnel 1 dan Tunnel 2 statusnya masih Down karena belum ada yang terhubung ke Tunnel tersebut. Nantinya gateway server on premise akan connect ke Tunnel 1 (IP Public 3.1.155.43) dan statusnya akan berubah menjadi UP.
Untuk menghubungkan ke Tunnel 1, kita perlu Download konfigurasinya.
Caranya klik Download configuration > Pilih Vendor Openswan > Klik Download
Nantinya kita akan menginstall software Openswan pada gateway server on premise. (Openswan adalah sebuah software IPsec yang bisa digunakan untuk site to site VPN). Openswan ini akan nembak ke IP Tunnel 1 untuk membuat koneksi site to site VPN yang terenkripsi.
Cara install openswan akan kita bahas di nomor 2 nanti (Setup Gateway Server (On premise)).
1.4 Enable-kan Route propagation pada route table di VPC
Route propagation = enable
, akan meroute traffic dari virtual private gateway secara otomatis ke subnet route tables, jadi kita tidak perlu manual menambahkan / hapus VPN routesnya.
Cara mengenable-kannya, masuk ke service VPC > menu Virtual private cloud > Route tables > cari VPC: VPC-test > pilih route table yang public (public-route-table)
Pada tab Route propagation > Edit route propagation > centang Enable pada Propagation > Save.
2. Setup Gateway Server (On premise)
Sekarang pindah ke on premise. Disini kita akan setup server gateway dengan menginstall openswan. Tahapan lengkapnya adalah:
- Pastikan selinux sudah disabled
- Install openswan
- Setup konfigurasi openswan
2.1 Pastikan selinux sudah disabled
Karena menggunakan centos 7 di gateway server, pastikan selinux sudah di disabled. Jika belum ubah ke disabled dan restart servernya.
$ vi /etc/selinux/config
2.2 Install Openswan
Sudah dijelaskan tadi, jadi openswan akan membuat koneksi site to site VPN ke cloud AWS melalui Tunnel 1. Jadi kita harus install dulu openswan-nya:
$ yum update -y
$ yum install openswan -y
2.3 Setup konfigurasi openswan
Kita akan setup konfigurasi openswan menggunakan file yang sudah kita download tadi (step 1.3 Site-to-site VPN connections). Buka filenya, disitu akan ada step-step yang harus kita lakukan.
Pertama, setting sysctl.conf. Buka filenya:
vi /etc/sysctl.conf
Tambahkan script berikut:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
Lalu restart konfigurasinya:
systctl -p
Pastikan script #include /etc/ipsec.d/*.conf
di file /etc/ipsec.conf sudah diuncomment (hilangkan tanda # jika ada)
Selanjutnya kita akan konfigurasi openswannya:
vi /etc/ipsec.d/aws.conf
Masukkan konfigurasinya (Note: hilangkan parameter auth=esp dan setting leftsubnet dan rightsubnet)
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=43.218.202.43
right=3.1.155.43
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes128-sha1;modp1024
ike=aes128-sha1;modp1024
keyingtries=%forever
keyexchange=ike
leftsubnet=192.168.0.0/16
rightsubnet=172.31.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer
- leftsubnet diisi dengan CIDR onpremise (192.168.0.0/16)
- rightsubnet diisi dengan CIDR VPC AWS (172.31.0.0/16)
- leftid = IP Public gateway server onpremise
- right = IP Public Tunnel 1 AWS
- ike = Internet key exchange, enkripsi yang digunakan (aes128-sha1)
Konfigurasi terakhir adalah setup PSK (Pre Shared Key). Ini semacam token agar bisa connect ke virtual gateway AWS
$ vi /etc/ipsec.d/aws.secrets
Masukkan konfigurasi berikut (jangan sampai salah memasukkan keynya)
43.218.202.43 3.1.155.43: PSK "_PB7O91Fvo5u84.it19B81Gebnw5Aop5"
Kita cek status openswan menggunakan command berikut
$ systemctl status ipsec
Statusnya masih inactive, sekarang tinggal kita nyalakan saja
$ systemctl start ipsec
Jalankan kembali systemctl status ipsec
. Jika koneksi berhasil, outputnya akan seperti ini
Kita cek di AWS, Tunnel 1 seharusnya sudah UP statusnya.
Tunnel 2 masih Down, karena kita tidak melakukan setup untuk Tunnel 2. Fyi, disini kita hanya menggunakan Tunnel 1 saja (biar simple).
Note: Jika Status Tunnel 1 masih Down, silahkan cek konfigurasinya lagi (jangan sampai salah). Jika masih belum bisa silahkan cek firewall disisi on premise, apakah ada yang terblock difirewall?
3. Test koneksi dari On premise ke AWS dan sebaliknya
Berikut list private IP dari servernya:
- Onpremise
- Server P-1: 192.168.22.91
- Server P-2: 192.168.31.167
- Gateway server: 192.168.10.220
- Cloud AWS
- Server A: 172.31.1.136
- Server B: 172.31.0.6
Kita akan buat 3 skenario test koneksi (ping) ke AWS menggunakan private IP dan sebaliknya:
- Skenario 1 (gateway server -> public subnet)
- Skenario 2 (server P-1, P-2 -> public subnet dan sebaliknya)
- Skenario 3 (server P-1, P-2 -> private subnet dan sebaliknya)
Sebelum memulai, pastikan server P-1, server P-2, server A dan server B sudah diallow protokol ICMP nya pada inbound rule / incoming traffic pada firewall supaya ketika diping bisa reply
3.1 Skenario 1 (gateway server -> public subnet)
Ping dari gateway server ke server B (public subnet)
$ ping 172.31.0.6
Berhasil
3.2 Skenario 2 (server P-1, P-2 -> public subnet)
- Ping dari server P-1 ke server B
- Ping dari server P-2 ke server B
- Ping dari server B ke server P-1
- Ping dari server B ke server P-2
Untuk skenario ini pastikan traffic dari server P-1, P-2 sudah dirouting ke gateway server agar bisa mengakses server di AWS. Bisa ditambahkan di iptables atau di mikrotik/sejenisnya (tergantung kalian pakai hardware apa / software apa untuk routingnya)
– Ping dari server P-1 ke server B
$ ping 172.31.0.6
Berhasil.
– Ping dari server P-2 ke server B
$ ping 172.31.0.6
Berhasil
– Ping dari server B ke server P-1
$ ping 192.168.22.91
Berhasil
– Ping dari server B ke server P-2
$ ping 192.168.31.167
Berhasil
3.3 Skenario 3 (server P-1, P-2 -> private subnet dan sebaliknya)
- Ping dari server P-1 ke server A
- Ping dari server P-2 ke server A
- Ping dari server A ke server P-1
- Ping dari server A ke server P-2
Disini kita akan mengakses ke private subnet, jadi harus tambahkan virtual private gateway ke dalam route table si private subnet tersebut.
Buka server A di dashboard EC2, pada tab details klik Subnet ID-nya (subnet-0286xx)
Pilih tab Route Table, klik rtb-0a67xxx
Pada tab Routes klik Edit Routes, daftarkan virtual private gateway seperti dibawah, klik save changes
– Ping dari server P-1 ke server A
$ ping 172.31.1.136
Berhasil
– Ping dari server P-2 ke server A
$ ping 172.31.1.136
– Ping dari server A ke server P-1
$ ping 192.168.22.91
Berhasil
– Ping dari server A ke server P-2
$ ping 192.168.31.167
Sekian tutorialnya, semoga bermanfaat !