Skip to main content
  1. Posts/

Setup Openvpn Server

·4 mins·
openvpn vpn openvpn
Table of Contents

OpenVPN adalah salah satu layanan VPN (selain PPTP dan L2TP) yang paling fleksibel, aman, dan terpercaya untuk mengamankan komunikasi data, menyediakan akses jarak jauh terenkripsi, serta melindungi resource jaringan.

Berikut adalah cara menginstal dan mengonfigurasi server OpenVPN menggunakan skrip openvpn-install dari Nyr.

Setup
#

Jalankan skrip instalasi OpenVPN Server:

wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

Setelah skrip dijalankan, proses setup interaktif akan dimulai. Anda dapat menggunakan nilai default yang disarankan atau memasukkan nilai sesuai kebutuhan.

Contoh tampilan setup:

Welcome to this OpenVPN road warrior installer!

This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [xx.xx.xx.xx]:

Which protocol should OpenVPN use?
   1) UDP (recommended)
   2) TCP
Protocol [1]:

What port should OpenVPN listen on?
Port [1194]:

Select a DNS server for the clients:
   1) Default system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) Gcore
   7) AdGuard
   8) Specify custom resolvers
DNS server [1]: 3

Enter a name for the first client:
Name [client]:

Pertanyaan yang akan diajukan oleh skrip meliputi:

  • Alamat IP Publik — biasanya terdeteksi otomatis.
  • Protocol — pilih antara UDP (disarankan, lebih cepat) atau TCP.
  • Port — default OpenVPN adalah 1194, tetapi dapat diganti.
  • DNS Server — Anda dapat memilih DNS sistem, Google, Cloudflare (1.1.1.1, direkomendasikan), dan lainnya.
  • Nama client pertama — digunakan untuk menghasilkan file konfigurasi klien (.ovpn).

Setelah nilai-nilai tersebut dimasukkan, skrip akan otomatis melakukan instalasi OpenVPN Server, termasuk:

  • Menginstal paket-paket yang diperlukan
  • Menghasilkan kunci enkripsi dan sertifikat
  • Mengonfigurasi server OpenVPN
  • Menyiapkan aturan firewall dasar

Untuk meningkatkan performa jaringan, Anda dapat mengaktifkan TCP BBR:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
echo "net.ipv4.tcp_notsent_lowat=16384" >> /etc/sysctl.conf
sysctl -p

Enable User dan Password
#

Terdapat dua metode untuk menambahkan autentikasi username & password pada OpenVPN:

  1. via PAM (menggunakan sistem user Linux)
  2. via File (menggunakan database user sendiri)

1. Autentikasi via PAM
#

Tambahkan baris berikut pada file /etc/openvpn/server/server.conf:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login

Edit file /etc/openvpn/server/client-common.txt untuk mengaktifkan authentikasi di sisi klien.

auth-user-pass

Restart service OpenVPN.

systemctl restart openvpn-server@server openvpn-iptables

Buat user autentikasi Linux.

adduser --disabled-login client

Generate File .ovpn untuk User

  • Jalankan script openvpn-install.sh
  • Pilih Add a new client
  • Masukkan nama, misalnya client

2. Autentikasi via File
#

Tambahkan baris berikut ke /etc/openvpn/server/server.conf:

auth-user-pass-verify /etc/openvpn/check_user.sh via-file
script-security 3

Buat script verifikasi user/password. File: /etc/openvpn/check_user.sh

#!/bin/bash

USER_FILE="/etc/openvpn/users.txt"

USERNAME=$(head -n1 "$1")
PASSWORD=$(tail -n1 "$1")

# Ambil hash untuk user
STORED_HASH=$(grep "^${USERNAME}:" "$USER_FILE" | cut -d':' -f2)

if [ -z "$STORED_HASH" ]; then
    echo "User $USERNAME not found"
    exit 1
fi

# Verifikasi password dengan bcrypt
RESULT=$(python3 - <<EOF
import bcrypt, sys
password = "$PASSWORD".encode("utf-8")
stored = "$STORED_HASH".encode("utf-8")
if bcrypt.checkpw(password, stored):
    sys.exit(0)
else:
    sys.exit(1)
EOF
)

if [ $? -eq 0 ]; then
    echo "User $USERNAME authenticated successfully"
    exit 0
else
    echo "Authentication failed for $USERNAME"
    exit 1
fi

Set permission script.

chmod 755 /etc/openvpn/check_user.sh

Edit file /etc/openvpn/server/client-common.txt untuk mengaktifkan authentikasi di sisi klien.

auth-user-pass

Restart service OpenVPN.

systemctl restart openvpn-server@server openvpn-iptables

Buat file manage_users.sh untuk menambah, menghapus, dan melihat daftar user:

#!/bin/bash

USER_FILE="/etc/openvpn/users.txt"

# Pastikan file ada
touch "$USER_FILE"

add_user() {
    local username="$1"
    local password="$2"

    # Generate bcrypt hash
    local hash=$(python3 - <<EOF
import bcrypt
print(bcrypt.hashpw("$password".encode("utf-8"), bcrypt.gensalt()).decode())
EOF
)

    if grep -q "^${username}:" "$USER_FILE"; then
        echo "User $username already exists!"
        exit 1
    fi

    echo "${username}:${hash}" >> "$USER_FILE"
    echo "User $username added successfully."
}

delete_user() {
    local username="$1"

    if ! grep -q "^${username}:" "$USER_FILE"; then
        echo "User $username not found!"
        exit 1
    fi

    sed -i "/^${username}:/d" "$USER_FILE"
    echo "User $username deleted successfully."
}

list_users() {
    cut -d':' -f1 "$USER_FILE"
}

usage() {
    echo "Usage: $0 add <username> <password>"
    echo "       $0 del <username>"
    echo "       $0 list"
    exit 1
}

case "$1" in
    add)
        [ $# -eq 3 ] || usage
        add_user "$2" "$3"
        ;;
    del)
        [ $# -eq 2 ] || usage
        delete_user "$2"
        ;;
    list)
        list_users
        ;;
    *)
        usage
        ;;
esac

Tambah User Autentikasi.

bash manage_users.sh add client securepass

Generate File .ovpn untuk User

  • Jalankan script openvpn-install.sh
  • Pilih Add a new client
  • Masukkan nama, misalnya client

Download File .ovpn
#

Pada direktori yang sama saat Anda menjalankan script instalasi, Anda akan menemukan file konfigurasi klien .ovpn, misalnya:

# ls -l
total 40
-rw-r--r-- 1 root root  8256 Nov 21 15:06 client.ovpn
-rw-r--r-- 1 root root 24962 Nov 21 15:02 openvpn-install.sh

Download file .ovpn menggunakan SCP dari komputer lokal Anda.

scp root@YOUR_SERVER_IP:/root/client.ovpn ~/

Connect OpenVPN via nmcli (NetworkManager)
#

Import file .ovpn.

nmcli connection import type openvpn file client.ovpn

Tambahkan kredensial login.

nmcli connection modify client +vpn.data username=client

Aktifkan koneksi VPN.

nmcli connection up client --ask

Related

Setup WireGuard VPN
·5 mins
wireguard wireguard vpn
OpenVPN 2.4.5 cannot connect because of weak algorithm
·2 mins
vpn vpn linux
Git Commands Cheat Sheet
·5 mins
git git
Setup GPT Researcher dengan Docker
·2 mins
docker docker
Auto Shutdown Azure Container Apps
·4 mins
azure azure
Implementasi Traefik dengan CrowdSec
·3 mins
traefik traefik crowdsec