Product SiteDocumentation Site

10.3. Virtual Private Network

Sebuah Virtual Private Network (disingkat VPN) adalah suatu cara untuk menyambung dua jaringan lokal yang berbeda melalui Internet melalui suatu tunnel; tunnel biasanya dienkripsi untuk kerahasiaan data. VPN sering dipakai untuk mengintegrasikan suatu mesin di lokasi jauh ke dalam suatu jaringan lokal perusahaan.
Beberapa perkakas menyediakan fungsionalitas ini. OpenVPN adalah suatu solusi yang efisien, mudah digelar dan dipelihara, berbasis SSL/TLS. Kemungkinan lain adalah memakai IPsec untuk mengenkripsi lalu lintas IP antara dua mesin; enkripsi ini transparan, yang berarti bahwa aplikasi yang berjalan pada host-host ini tidak perlu dimodifikasi untuk melibatkan VPN. SSH juga bisa menyediakan suatu VPN, selain fitur-fitur konvensionalnya. Terakhir, suatu VPN dapat dijalin memakai protokol PPTP Microsoft. Solusi-solusi lain ada, tapi di luar fokus buku ini.

10.3.1. OpenVPN

OpenVPN adalah perangkat lunak yang didedikasikan untuk menciptakan virtual private network. Penyiapannya melibatkan menciptakan antarmuka jaringan virtual VPN server dan klien; tun (untuk tunnel level IP) dan antarmuka tap (tunnel level terowongan) yang didukung. Dalam prakteknya, antarmuka tun akan paling sering digunakan kecuali ketika klien VPN yang dimaksudkan untuk diintegrasikan ke dalam jaringan lokal server melalui bridge Ethernet.
OpenVPN mengandalkan OpenSSL untuk semua kriptografi SSL/TLS dan fitur terkait (kerahasiaan, otentikasi, integritas, non-repudiation). Hal ini dapat dikonfigurasi dengan kunci pribadi bersama atau menggunakan sertifikat X.509 berdasarkan infrastuktur kunci publik. Konfigurasi terakhir ini sangat disukai karena memungkinkan fleksibilitas yang lebih besar ketika dihadapkan dengan meningkatnya jumlah pengguna roaming yang mengakses VPN.

10.3.1.1. Mengkonfigurasi Server OpenVPN

Setelah semua sertifikat sudah dibuat (ikuti instruksi dari Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa), mereka perlu disalin bila diperlukan: kunci publik sertifikat root (pki/ca.crt) akan disimpan pada semua mesin (server dan klien) sebagai /etc/ssl/certs/Falcot_CA.crt. Sertifikat server hanya dipasang pada server (pki/issued/vpn.falcot.com.crt diletakkan di /etc/ssl/certs/vpn.falcot.com.crt, dan pki/private/vpn.falcot.com.key ke /etc/ssl/private/vpn.falcot.com.key dengan hak terbatas sehingga hanya administrator yang dapat membacanya), dengan parameter Diffie-Hellman terkait pki/dh.pem) dipasang ke /etc/openvpn/dh.pem. Sertifikat klien dipasang pada klien VPN terkait dengan cara serupa.
Secara baku, skrip inisialisasi OpenVPN mencoba memulai semua virtual private network yang didefinisikan di dalam /etc/openvpn/*.conf. Maka menyiapkan suatu server VPN cukup dengan menyimpan suatu berkas konfigurasi yang terkait dalam direktori ini. Satu titik awal yang baik adalah /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz, yang mengarahkan ke sebuah server agak standar. Tentu saja, beberapa parameter perlu diadaptasi: ca, cert, key, dan dh perlu menjelaskan lokasi yang dipilih (masing-masing, /etc/ssl/certs/Falcot_CA.crt, /etc/ssl/vpn.falcot.com.crt, /etc/ssl/private/vpn.falcot.com.key, dan /etc/openvpn/dh.pem). Direktif server 10.8.0.0 255.255.255.0 mendefinisikan subnet yang akan dipakai oleh VPN; server memakai alamat IP pertama dalam rentang tersebut (10.8.0.1) dan sisa alamat dialokasikan ke klien.
Dengan konfigurasi ini, memulai OpenVPN membuat antarmuka jaringan virtual, biasanya dengan nama tun0. Namun, firewall seringkali dikonfigurasi pada waktu yang sama dengan antarmuka jaringan nyata, yang terjadi sebelum OpenVPN dimulai. Praktik yang baik menyarankan membuat suatu antarmuka jaringan virtual yang persisten, dan menata OpenVPN untuk memakai antarmuka yang telah dibuat ini. Lebih jauh ini mengizinkan pemilihan nama antarmuka. Perintah openvpn —mktun —dev vpn —dev-type tun membuat suatu antarmuka jaringan virtual bernama vpn dengan tipe tun; perintah ini dapat dengan mudah diintegrasikan dalam skrip konfigurasi firewall, atau dalam suatu direktif up dari berkas /etc/network/interfaces, atau aturan udev dapat ditambahkan ke perangkat tersebut. Berkas konfigurasi OpenVPN juga mesti diperbarui, dengan direktif dev vpn dan dev-type tun.
Kecuali ada tindakan lebih lanjut, klien VPN hanya dapat mengakses server VPN itu sendiri melalui alamat 10.8.0.1. Memberi akses untuk klien ke jaringan lokal (192.168.0.0/24), memerlukan penambahan direktif push route 192.168.0.0 255.255.255.0 ke konfigurasi OpenVPN sehingga klien VPN secara otomatis mendapatkan route yang memberi tahu mereka bahwa jaringan ini dapat dicapai melalui VPN. Lebih jauh, mesin-mesin pada jaringan lokal juga perlu diberitahu bahwa route ke VPN adalah melalui server VPN (ini secara otomatis berjalan ketika server VPN dipasang pada gateway). Alternatifnya, server VPN dapat dikonfigurasi untuk melaksanakan masquerading IP sehingga koneksi yang datang dari klien-klien VPN tampak seperti datang dari server VPN (lihat Bagian 10.1, “Gateway”).

10.3.1.2. Mengkonfigurasi Klien OpenVPN

Menyiapkan suatu klien OpenVPN juga memerlukan pembuatan suatu berkas konfigurasi dalam /etc/openvpn/. Sebuah konfigurasi standar dapat diperoleh dengan memakai /usr/share/doc/openvpn/examples/sample-config-files/client.conf sebagai titik awal. Direktif remote vpn.falcot.com 1194 menjelaskan alamat dan port server OpenVPN; ca, cert, dan key juga perlu diadaptasi untuk menjelaskan lokasi berkas-berkas kunc.
Bila VPN tidak akan dijalankan secara otomatis saat boot, atur direktif AUTOSTART ke none dalam berkas /etc/default/openvpn. Memulai atau menghentikan suatu koneksi VPN tertentu selalu mungkin dengan perintah systemctl start openvpn@nama dan systemctl stop openvpn@nama (dimana nama koneksi cocok dengan yang didefinisikan dalam /etc/openvpn/nama.conf).
The network-manager-openvpn-gnome package contains an extension to Network Manager (see Bagian 8.2.5, “Konfigurasi Jaringan Otomatis untuk Pengguna Luar”) that allows managing OpenVPN virtual private networks. This allows every user to configure OpenVPN connections graphically and to control them from the network management icon.

10.3.2. Virtual Private Network dengan SSH

Sebenarnya ada dua cara membuat sebuah virtual private network dengan SSH. Yang bersejarah melibatkan menjalin lapisan PPP atas link SSH. Metode ini dijelaskan dalam dokumen HOWTO:
Metode kedua lebih baru, dan diperkenalkan dengan OpenSSH 4.3; sekarang mungkin bagi OpenSSH untuk membuat antarmuka jaringan virtual (tun*) pada kedua sisi dari koneksi SSH, dan antarmuka virtual ini dapat dikonfigurasi secara persis seolah mereka antarmuka fisik. Sistem tunnel pertama mesti difungsikan dengan menata PermitTunnel ke ”yes” dalam berkas konfigurasi server SSH (/etc/ssh/sshd_config). Ketika menjalin suatu koneksi SSH, pembuatan tunnel mesti diminta secara eksplisit dengan opsi -w any:any (any dapat digantikan dengan nomor peranti tun yang dikehendaki). Ini memerlukan pengguna memiliki hak administrator pada kedua sisi, sehingga dapat membuat peranti jaringan (dengan kata lain, koneksi mesti dijalin sebagai root).
Kedua metode untuk membuat sebuah virtual private network melalui SSH cukup sederhana. Namun, VPN yang mereka sediakan bukan yang paling efisien; khususnya, ia tidak menangani lalu lintas tingkat tinggi dengan sangat baik.
Penjelasannya adalah bahwa ketika suatu stack TCP/IP dienkapsulasi di dalam suatu koneksi TCP/IP (untuk SSH), protokol TCP dipakai dua kali, sekali untuk koneksi SSH dan sekali di dalam tunnel. Ini mengarah ke masalah, khususnya karena cara TCP menyesuaikan ke kondisi jaringan dengan mengubah tundaan waktu tunggu. Situs berikut menguraikan masalah tersebut secara lebih terrinci:
Oleh karena itu, VPN melalui SSH harus dibatasi pada tunnel satu kali tanpa kendala kinerja.

10.3.3. IPsec

IPsec, despite being the standard in IP VPNs, is rather more involved in its implementation. The IPsec engine itself is integrated in the Linux kernel; the required user-space parts, the control and configuration tools, are provided by the libreswan package or the strongswan package. Here we describe briefly the first of these options.
Pertama, kita menginstal paket libreswan. Secara konkret, /etc/ipsec.conf miliki setiap host berisi parameter untuk tunnel IPsec (atau Asosiasi Keamanan, dalam terminologi IPsec) yang diurus oleh host tersebut. Ada banyak contoh konfigurasi di /usr/share/doc/libreswan/, tetapi dokumentasi daring Libreswan memiliki lebih banyak contoh dengan penjelasan:
Layanan IPsec dapat dikontrol dengan systemctl; misalnya, systemctl start ipsec akan memulai layanan IPsec.
Meskipun statusnya sebagai referensi, kompleksitas menyiapkan IPsec membatasi penggunaannya dalam praktek. Solusi berbasis OpenVPN umumnya akan lebih disukai bila diperlukan tunnel yang tidak terlalu banyak atau dinamis.

10.3.4. PPTP

PPTP (untuk Point-to-Point Tunneling Protocol) menggunakan dua saluran komunikasi, satu untuk data kontrol dan satu untuk data muatan; yang terakhir menggunakan protokol GRE (Generik Routing enkapsulasi). Link PPP standar kemudian disiapkan di atas kanal pertukaran data.

10.3.4.1. Mengkonfigurasi Klien

Paket pptp-linux berisi klien PPTP yang mudah dikonfigurasi untuk Linux. Instruksi berikut mengambil inspirasi dari dokumentasi resmi:
Administrator Falcot membuat beberapa berkas: /etc/ppp/options.pptp, /etc/ppp/peers/falcot, /etc/ppp/ip-up.d/falcot, dan /etc/ppp/ip-down.d/falcot.

Contoh 10.2. Berkas /etc/ppp/options.pptp

# PPP options used for a PPTP connection
lock
noauth
nobsdcomp
nodeflate

Contoh 10.3. Berkas /etc/ppp/peers/falcot

# vpn.falcot.com is the PPTP server
pty "pptp vpn.falcot.com --nolaunchpppd"
# the connection will identify as the "vpn" user
user vpn
remotename pptp
# encryption is needed
require-mppe-128
file /etc/ppp/options.pptp
ipparam falcot

Contoh 10.4. Berkas /etc/ppp/ip-up.d/falcot

# Create the route to the Falcot network
if [ "$6" = "falcot" ]; then
  # 192.168.0.0/24 is the (remote) Falcot network
  ip route add 192.168.0.0/24 dev $1
fi

Contoh 10.5. Berkas /etc/ppp/ip-down.d/falcot

# Delete the route to the Falcot network
if [ "$6" = "falcot" ]; then
  # 192.168.0.0/24 is the (remote) Falcot network
  ip route del 192.168.0.0/24 dev $1
fi

10.3.4.2. Menata Server

pptpd adalah server PPTP untuk Linux. Berkas konfigurasi utamanya, /etc/pptpd.conf, memerlukan sangat sedikit perubahan: localip (alamat IP lokal) dan remoteip (alamat IP remote). Dalam contoh di bawah, server PPTP selalu memakai alamat 192.168.0.199dan klien PPTP menerima alamat IP dari 192.168.0.200 sampai 192.168.0.250.

Contoh 10.6. Berkas /etc/pptpd.conf

[..]
# TAG: localip
# TAG: remoteip
#       Specifies the local and remote IP address ranges.
#
#       These options are ignored if delegate option is set.
#
#       Any addresses work as long as the local machine takes care of the
#       routing.  But if you want to use MS-Windows networking, you should
#       use IP addresses out of the LAN address space and use the proxyarp
#       option in the pppd options file, or run bcrelay.
#
#       You can specify single IP addresses seperated by commas or you can
#       specify ranges, or both. For example:
#
#               192.168.0.234,192.168.0.245-249,192.168.0.254
#
#       IMPORTANT RESTRICTIONS:
#
#       1. No spaces are permitted between commas or within addresses.
#
#       2. If you give more IP addresses than the value of connections,
#          it will start at the beginning of the list and go until it
#          gets connections IPs.  Others will be ignored.
#
#       3. No shortcuts in ranges! ie. 234-8 does not mean 234 to 238,
#          you must type 234-238 if you mean this.
#
#       4. If you give a single localIP, that's ok - all local IPs will
#          be set to the given one. You MUST still give at least one remote
#          IP for each simultaneous client.
#
# (Recommended)
#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
# or
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245
localip 192.168.0.199
remoteip 192.168.0.200-250
Konfigurasi PPP yang digunakan oleh server PPTP juga memerlukan beberapa perubahan kecil di /etc/ppp/pptpd-options. Parameter penting adalah nama server (pptp), nama domain (falcot.com), dan alamat IP untuk server DNS dan WINS.

Contoh 10.7. Berkas /etc/ppp/pptpd-options

# Enable connection debugging facilities.
# (see your syslog configuration for where pppd sends to)
#debug

# Name of the local system for authentication purposes
# (must match the second field in /etc/ppp/chap-secrets entries)
name pptpd

# Optional: domain name to use for authentication
## change the domainname to your local domain
domain falcot.com

# Authentication
## these are reasonable defaults for WinXXXX clients
## for the security related settings
auth
refuse-pap
refuse-chap
refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
require-mppe-128

# Network and Routing
## Fill in your addresses
ms-dns 192.168.0.1
ms-wins 192.168.0.1

## Fill in your netmask
netmask 255.255.255.0

## some defaults
nodefaultroute
proxyarp
lock
Langkah terakhir melibatkan mendaftarkan pengguna vpn (dan kata sandi terkait) dalam berkas /etc/ppp/chap-secrets. Berbeda dengan instansi lain dimana bintang (*) akan bekerja, nama server harus diisi secara eksplisit di sini. Lebih jauh, klien-klien PPTP Windows mengidentifikasi diri mereka sendiri dalam bentuk DOMAIN\\USER, bukan sekedar menyediakan nama pengguna. Ini menjelaskan mengapa berkas juga menyinggung pengguna FALCOT\\vpn. Juga dimungkinkan untuk menyatakan alamat IP individu untuk para pengguna; bintang dalam ruas ini menyatakan bahwa pengalamat dinamis mesti dipakai.

Contoh 10.8. Berkas /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server  secret      IP addresses
vpn             pptp    f@Lc3au     *
FALCOT\\vpn     pptp    f@Lc3au     *