Cara Membuat IPSec VPN Banyak Raspberry Pi ke AWS dengan StrongSwan


IPSec adalah salah satu solusi VPN yang stabil dan aman untuk menghubungkan banyak perangkat ke server pusat. Pada artikel ini kita akan membuat koneksi IPSec IKEv2 antara banyak Raspberry Pi dan satu server AWS menggunakan StrongSwan.

Konfigurasi ini cocok untuk:

  • IoT
  • Remote monitoring
  • Akses jaringan private
  • Sensor dan device lapangan
  • Tunnel aman antar lokasi

Topologi yang digunakan:

[Raspberry Pi Banyak]
        │
        │ IPSec IKEv2
        ▼
[AWS Ubuntu 24.04]

Server AWS akan menjadi pusat VPN, sedangkan Raspberry Pi bertindak sebagai client.


Kenapa Menggunakan IPSec StrongSwan

StrongSwan cukup populer untuk implementasi IPSec di Linux karena:

  • Stabil untuk jangka panjang
  • Mendukung IKEv2
  • Support NAT Traversal
  • Cocok untuk device kecil seperti Raspberry Pi
  • Bisa digunakan untuk banyak client sekaligus

Pada tutorial ini:

  • AWS menggunakan ipsec.conf
  • Raspberry Pi menggunakan swanctl.conf
  • Autentikasi menggunakan PSK
  • Support banyak Raspberry Pi

Persiapan Server AWS

Gunakan Ubuntu 24.04 pada AWS.

Update package:

sudo apt update

Install StrongSwan:

sudo apt install \
    strongswan \
    strongswan-starter \
    strongswan-swanctl \
    libcharon-extra-plugins \
    libstrongswan-extra-plugins \
    -y

Enable IP Forwarding

Edit file:

sudo nano /etc/sysctl.conf

Tambahkan:

net.ipv4.ip_forward=1

Apply:

sudo sysctl -p

Konfigurasi IPSec di AWS

Buat file:

sudo nano /etc/ipsec.conf

Isi dengan:

config setup
    uniqueids=no

conn raspberry-clients
    auto=add
    type=tunnel
    keyexchange=ikev2
    authby=psk

    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

    left=%any
    leftid=AWS_VPN
    leftsubnet=10.10.0.0/24

    right=%any
    rightid=%any
    rightsubnet=0.0.0.0/0

    dpdaction=restart
    dpddelay=30s

    ikev2=insist

Konfigurasi Secret AWS

Edit file:

sudo nano /etc/ipsec.secrets

Isi:

AWS_VPN %any : PSK "VPN-SECRET-123"

Restart StrongSwan di AWS

sudo systemctl restart strongswan-starter
sudo systemctl enable strongswan-starter

Buka Port di AWS Security Group

Jangan lupa membuka port berikut:

UDP 500
UDP 4500

Port tersebut digunakan untuk IPSec dan NAT Traversal.


Install StrongSwan di Raspberry Pi

Masuk ke Raspberry Pi lalu install package:

sudo apt update

sudo apt install \
    strongswan \
    strongswan-swanctl \
    libcharon-extra-plugins \
    libstrongswan-extra-plugins \
    -y

Konfigurasi Raspberry Pi

Edit file:

sudo nano /etc/swanctl/swanctl.conf

Isi dengan:

connections {
    aws-vpn {
        version = 2

        proposals = aes256-sha256-modp2048

        local_addrs = %any
        remote_addrs = 16.78.26.164

        local {
            auth = psk
            id = rpi-01
        }

        remote {
            auth = psk
            id = AWS_VPN
        }

        children {
            net {
                local_ts = 0.0.0.0/0
                remote_ts = 10.10.0.0/24

                esp_proposals = aes256-sha256

                start_action = start
            }
        }

        dpd_delay = 30s
        dpd_timeout = 120s
    }
}

secrets {
    ike-psk {
        secret = VPN-SECRET-123
    }
}

Ganti:

16.78.26.164

menjadi IP public server AWS Anda.


Menjalankan VPN di Raspberry Pi

sudo systemctl enable strongswan
sudo systemctl restart strongswan

sudo swanctl --load-all
sudo swanctl --initiate --child net

Cek Status Tunnel IPSec

Gunakan perintah:

sudo swanctl --list-sas

Jika berhasil akan muncul status:

ESTABLISHED

Artinya Raspberry Pi sudah berhasil terhubung ke AWS menggunakan IPSec.


Test Koneksi

Coba ping subnet AWS:

ping 10.10.0.1

Lalu cek traffic IPSec:

sudo swanctl --list-sas

Counter packet akan mulai bertambah.


Auto Install Raspberry Pi

Jika Raspberry Pi yang digunakan cukup banyak, konfigurasi manual tentu akan memakan waktu. Solusinya adalah menggunakan script auto install.

Buat file:

nano install-vpn.sh

Isi script:

#!/bin/bash

AWS_IP=$1
DEVICE_ID=$2
PSK=$3

apt update

apt install \
    strongswan \
    strongswan-swanctl \
    libcharon-extra-plugins \
    libstrongswan-extra-plugins \
    -y

cat > /etc/swanctl/swanctl.conf <<EOF
connections {
    aws-vpn {
        version = 2

        proposals = aes256-sha256-modp2048

        local_addrs = %any
        remote_addrs = $AWS_IP

        local {
            auth = psk
            id = $DEVICE_ID
        }

        remote {
            auth = psk
            id = AWS_VPN
        }

        children {
            net {
                local_ts = 0.0.0.0/0
                remote_ts = 10.10.0.0/24

                esp_proposals = aes256-sha256

                start_action = start
            }
        }

        dpd_delay = 30s
        dpd_timeout = 120s
    }
}

secrets {
    ike-psk {
        secret = $PSK
    }
}
EOF

systemctl enable strongswan
systemctl restart strongswan

swanctl --load-all
swanctl --initiate --child net

echo "VPN INSTALLED"

Jalankan:

chmod +x install-vpn.sh

Contoh penggunaan:

sudo ./install-vpn.sh 16.78.26.164 rpi-01 VPN-SECRET-123

Untuk device lain:

sudo ./install-vpn.sh 16.78.26.164 rpi-02 VPN-SECRET-123

Auto Install AWS

Agar setup server AWS lebih cepat, gunakan script berikut.

Buat file:

nano install-aws-ipsec.sh

Isi:

#!/bin/bash

VPN_SUBNET=${1:-10.10.0.0/24}
PSK=${2:-VPN-SECRET-123}

apt update

apt install -y \
    strongswan \
    strongswan-starter \
    strongswan-swanctl \
    libcharon-extra-plugins \
    libstrongswan-extra-plugins \
    iptables-persistent \
    ufw

grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf || \
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

sysctl -p

DEFAULT_IF=$(ip route | grep default | awk '{print $5}' | head -n1)

cat > /etc/ipsec.conf <<EOF
config setup
    uniqueids=no

conn raspberry-clients
    auto=add
    type=tunnel
    keyexchange=ikev2
    authby=psk

    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!

    left=%any
    leftid=AWS_VPN
    leftsubnet=$VPN_SUBNET

    right=%any
    rightid=%any
    rightsubnet=0.0.0.0/0

    dpdaction=restart
    dpddelay=30s

    ikev2=insist
EOF

cat > /etc/ipsec.secrets <<EOF
AWS_VPN %any : PSK "$PSK"
EOF

ufw allow 500/udp
ufw allow 4500/udp

echo "y" | ufw enable

iptables -t nat -A POSTROUTING -o $DEFAULT_IF -j MASQUERADE

netfilter-persistent save

systemctl enable strongswan-starter
systemctl restart strongswan-starter

Jalankan:

chmod +x install-aws-ipsec.sh

Contoh:

sudo ./install-aws-ipsec.sh 10.10.0.0/24 VPN-SECRET-123

Tips untuk Banyak Raspberry Pi

Gunakan ID yang rapi seperti:

rpi-001
rpi-002
rpi-003

Dengan begitu proses monitoring dan maintenance akan lebih mudah.


Kesimpulan

Menghubungkan banyak Raspberry Pi ke AWS menggunakan IPSec IKEv2 dan StrongSwan ternyata cukup sederhana jika menggunakan konfigurasi yang tepat.

Setup ini cocok untuk:

  • IoT
  • Monitoring device
  • Akses private network
  • Remote site
  • Sensor lapangan
  • Gateway terenkripsi

Keunggulan utama konfigurasi ini adalah:

  • Stabil
  • Aman
  • Bisa auto reconnect
  • Support NAT
  • Mudah diperbanyak
  • Cocok untuk Raspberry Pi

Jika nanti jumlah device semakin besar, Anda bisa mempertimbangkan penggunaan certificate authentication agar pengelolaan VPN menjadi lebih aman dan lebih mudah.

Leave a Reply

Your email address will not be published. Required fields are marked *