GNU/Linux >> Belajar Linux >  >> Ubuntu

Siapkan OpenConnect VPN Server (ocserv) di Ubuntu 18.04/16.04 dengan Let's Encrypt

Tutorial ini akan menunjukkan cara menginstal server OpenConnect VPN di Ubuntu 16.04/18.04 . Server VPN OpenConnect, alias ocserv , adalah implementasi sumber terbuka dari protokol VPN Cisco AnyConnnect, yang populer di kalangan bisnis dan universitas. AnyConnect adalah protokol VPN berbasis SSL yang memungkinkan pengguna individu terhubung ke jaringan jarak jauh.

Fitur server VPN OpenConnect:

  • Ringan dan cepat. Dalam pengujian saya, saya dapat menonton YouTube dalam 4k dengan OpenConnect VPN. YouTube diblokir di negara saya.
  • Kompatibel dengan klien Cisco AnyConnect
  • Mendukung otentikasi kata sandi dan otentikasi sertifikat
  • Mudah disiapkan

Saya sangat menyukai fakta bahwa dibandingkan dengan teknologi VPN lainnya, sangat mudah dan nyaman bagi pengguna akhir untuk menggunakan OpenConnect VPN. Setiap kali saya menginstal distro Linux berbasis Debian di komputer saya dan ingin segera membuka blokir situs web atau menyembunyikan alamat IP saya, saya menginstal klien OpenConnect dan terhubung ke server hanya dengan dua baris perintah:

sudo apt install openconnect

sudo openconnect -b vpn.mydomain.com

gnutls-bin paket perangkat lunak menyediakan alat untuk membuat sertifikat CA dan server Anda sendiri, tetapi kami akan memperoleh dan menginstal sertifikat Let's Encrypt. Keuntungan menggunakan sertifikat Let's Encrypt adalah gratis, lebih mudah disiapkan, dan dipercaya oleh perangkat lunak klien VPN.

Persyaratan

Untuk mengikuti tutorial ini, Anda memerlukan VPS (Virtual Private Server) yang dapat mengakses situs web yang diblokir secara bebas (Di luar negara Anda atau sistem penyaringan Internet). Saya merekomendasikan Kamatera VPS, yang memiliki fitur:

  • Uji coba gratis 30 hari.
  • Mulai dari $4/bulan (RAM 1 GB)
  • VPS berbasis KVM berperforma tinggi
  • 9 pusat data di seluruh dunia, termasuk Amerika Serikat, Kanada, Inggris Raya, Jerman, Belanda, Hong Kong, dan Israel.

Ikuti tutorial yang ditautkan di bawah ini untuk membuat server VPS Linux Anda di Kamatera.

  • Cara Membuat Server VPS Linux di Kamatera

Setelah Anda memiliki VPS yang menjalankan Ubuntu 18.04, ikuti petunjuk di bawah ini.

Anda juga memerlukan nama domain untuk mengaktifkan HTTPS untuk OpenConnect VPN. Saya mendaftarkan nama domain saya dari NameCheap karena harganya murah dan mereka memberikan perlindungan privasi whois gratis seumur hidup.

Langkah 1:Menginstal OpenConnect VPN Server di Ubuntu 16.04/18.04

Masuk ke server Ubuntu 16.04/18.04 Anda. Kemudian gunakan apt untuk menginstal ocserv paket, yang disertakan dalam repositori Ubuntu sejak 16.04.

sudo apt install ocserv

Setelah diinstal, server OpenConnect VPN secara otomatis dimulai. Anda dapat memeriksa statusnya dengan:

systemctl status ocserv

Contoh keluaran:

● ocserv.service - OpenConnect SSL VPN server
   Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled
   Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago
     Docs: man:ocserv(8)
 Main PID: 19235 (ocserv-main)
   CGroup: /system.slice/ocserv.service
           ├─19235 ocserv-main                                                  
           └─19242 ocserv-secm 

Jika tidak berjalan, Anda dapat memulainya dengan:

sudo systemctl start ocserv

Secara default, server VPN OpenConnect mendengarkan pada port TCP dan UDP 443. Jika sedang digunakan oleh server web, maka server VPN tidak dapat dimulai. Kita akan melihat cara mengubah port di file konfigurasi OpenConnect VPN nanti.

Langkah 2:Menginstal Let's Encrypt Client (Certbot) di Server Ubuntu 16.04/18.04

Jalankan perintah berikut untuk menginstal certbot versi terbaru dari PPA resmi. perangkat lunak-properti-umum diperlukan jika Anda ingin menginstal paket dari PPA. Mungkin tidak ada di server Ubuntu Anda.

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot

Untuk memeriksa nomor versi, jalankan

certbot --version

Contoh keluaran:

certbot 0.31.0

Langkah 3:Mendapatkan Sertifikat TLS dari Let's Encrypt

Plugin Mandiri

Jika tidak ada server web yang berjalan di server Ubuntu 16.04/18.04 Anda dan Anda ingin server OpenConnect VPN menggunakan port 443, maka Anda dapat menggunakan plugin mandiri untuk mendapatkan sertifikat TLS dari Let's Encrypt. Jalankan perintah berikut. Jangan lupa untuk menetapkan A record untuk nama domain Anda.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com

Penjelasan:

  • certonly :Dapatkan sertifikat tetapi jangan menginstalnya.
  • --standalone :Gunakan plugin mandiri untuk mendapatkan sertifikat
  • --preferred-challenges http :Lakukan tantangan http-01 untuk memvalidasi domain kita, yang akan menggunakan port 80. Secara default plugin standalone akan melakukan tantangan tls-sni, yang menggunakan port 443. Karena port 443 sudah digunakan oleh server VPN OpenConnect, kita perlu mengubah perilaku default.
  • --agree-tos :Setuju dengan persyaratan layanan Let's Encrypt.
  • --email :Alamat email digunakan untuk pendaftaran dan pemulihan akun.
  • -d :Tentukan nama domain Anda.

Seperti yang Anda lihat dari tangkapan layar berikut, saya berhasil mendapatkan sertifikat.

Menggunakan Plugin webroot

Jika server Ubuntu 16.04/18.04 Anda memiliki server web yang mendengarkan pada port 80 dan 443, dan Anda ingin server OpenConnect VPN menggunakan port yang berbeda, maka sebaiknya gunakan plugin webroot untuk mendapatkan sertifikat karena plugin webroot berfungsi dengan hampir semua server web dan kita tidak perlu memasang sertifikat di server web.

Pertama, Anda perlu membuat host virtual untuk vpn.example.com.

Apache

Jika Anda menggunakan Apache, maka

sudo nano /etc/apache2/sites-available/vpn.example.com.conf

Dan rekatkan baris berikut ke dalam file.

<VirtualHost *:80>        
        ServerName vpn.example.com

        DocumentRoot /var/www/vpn.example.com
</VirtualHost>

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir /var/www/vpn.example.com

Tetapkan www-data (pengguna Apache) sebagai pemilik root web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Aktifkan host virtual ini.

sudo a2ensite vpn.example.com

Muat ulang Apache agar perubahan diterapkan.

sudo systemctl reload apache2

Setelah virtual host dibuat dan diaktifkan, jalankan perintah berikut untuk mendapatkan sertifikat Let's Encrypt menggunakan plugin webroot.

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

Nginx

Jika Anda menggunakan Nginx, maka

sudo nano /etc/nginx/conf.d/vpn.example.com.conf

Rekatkan baris berikut ke dalam file.

server {
      listen 80;
      server_name vpn.example.com;

      root /var/www/vpn.example.com/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir -p /var/www/vpn.example.com

Tetapkan www-data (pengguna Nginx) sebagai pemilik root web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Muat ulang Nginx agar perubahan diterapkan.

sudo systemctl reload nginx

Setelah virtual host dibuat dan diaktifkan, jalankan perintah berikut untuk mendapatkan sertifikat Let's Encrypt menggunakan plugin webroot.

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

Langkah 4:Mengedit File Konfigurasi Server VPN OpenConnect

Edit file konfigurasi ocserv.

sudo nano /etc/ocserv/ocserv.conf

Pertama, konfigurasikan otentikasi kata sandi. Secara default, otentikasi kata sandi melalui PAM (Modul Otentikasi Pluggable) diaktifkan, yang memungkinkan Anda menggunakan akun sistem Ubuntu untuk masuk dari klien VPN. Perilaku ini dapat dinonaktifkan dengan mengomentari baris berikut.

auth = "pam[gid-min=1000]"

Jika kami ingin pengguna menggunakan akun VPN terpisah alih-alih akun sistem untuk masuk, kami perlu menambahkan baris berikut untuk mengaktifkan otentikasi kata sandi dengan file kata sandi.

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Setelah selesai mengedit file konfigurasi ini, kita akan melihat cara menggunakan ocpasswd alat untuk menghasilkan /etc/ocserv/ocpasswd file, yang berisi daftar nama pengguna dan sandi yang disandikan.

Catatan :Ocserv mendukung otentikasi sertifikat klien, tetapi Let's Encrypt tidak mengeluarkan sertifikat klien. Anda perlu menyiapkan CA Anda sendiri untuk menerbitkan sertifikat klien.

Selanjutnya, jika Anda tidak ingin ocserv menggunakan TCP dan UDP port 443, cari dua baris berikut dan ubah nomor port. Jika tidak, biarkan mereka sendiri.

tcp-port = 443
udp-port = 443

Kemudian temukan dua baris berikut. Kita perlu mengubahnya.

server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem
server-key = /etc/ssl/private/ssl-cert-snakeoil.key

Ganti pengaturan default dengan jalur Let's Encrypt server certificate dan server key file.

server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem

Kemudian, atur jumlah maksimal klien. Standarnya adalah 16. Setel ke nol untuk tidak terbatas.

max-clients = 16

Setel jumlah perangkat yang dapat digunakan pengguna untuk masuk secara bersamaan. Standarnya adalah 2. Setel ke nol untuk tidak terbatas.

max-same-clients = 2

Selanjutnya, cari baris berikut. Ubah false untuk true untuk mengaktifkan penemuan MTU, yang dapat mengoptimalkan kinerja VPN.

try-mtu-discovery = false

Setelah itu, setel domain default ke vpn.example.com.

default-domain = vpn.example.com

Konfigurasi jaringan IPv4 adalah sebagai berikut secara default. Ini akan menyebabkan masalah karena sebagian besar router rumah juga menyetel rentang jaringan IPv4 ke 192.168.1.0/24 .

ipv4-network = 192.168.1.0
ipv4-netmask = 255.255.255.0

Kita dapat menggunakan rentang alamat IP pribadi lain (10.10.10.0/24) untuk menghindari tabrakan alamat IP, jadi ubah nilai ipv4-network untuk

ipv4-network = 10.10.10.0

Sekarang batalkan komentar pada baris berikut untuk menyalurkan semua kueri DNS melalui VPN.

tunnel-all-dns = true

Ubah alamat penyelesai DNS. Anda dapat menggunakan server DNS publik Google.

dns = 8.8.8.8

Catatan :Ini adalah praktik yang baik untuk menjalankan penyelesai DNS Anda sendiri di server yang sama, terutama jika Anda adalah penyedia VPN. Jika ada resolver DNS yang berjalan di server yang sama, tentukan DNS sebagai

dns = 10.10.10.1

10.10.10.1 adalah alamat IP server OpenConnect VPN di LAN VPN. Ini akan sedikit mempercepat pencarian DNS untuk klien karena latensi jaringan antara server VPN dan resolver DNS dihilangkan.

Kemudian beri komentar semua parameter rute (tambahkan simbol # di awal empat baris berikut), yang akan menetapkan server sebagai gateway default untuk klien.

route = 10.10.10.0/255.255.255.0
route = 192.168.0.0/255.255.0.0
route = fef4:db8:1000:1001::/64

no-route = 192.168.5.0/255.255.255.0

Simpan dan tutup file  Kemudian mulai ulang server VPN agar perubahan diterapkan.

sudo systemctl restart ocserv

Langkah 5:Memperbaiki Kegagalan Handshake DTLS

Di Ubuntu 16.04 dan Ubuntu 18.04, ocserv daemon ocserv.socket tidak menghormati nilai "listen-host" dari file konfigurasi, yang akan menyebabkan kesalahan berikut saat klien terhubung ke server VPN.

DTLS handshake failed: Resource temporarily unavailable, try again.

Untuk memperbaiki kesalahan ini, kita perlu mengedit file ocserv.service. Pertama-tama kita salin file aslinya di /lib/systemd/system/ direktori ke /etc/systemd/system/ direktori, lalu edit, karena kami tidak ingin versi baru dari paket ocserv menimpa modifikasi kami. (Untuk mempelajari lebih lanjut tentang file unit systemd, jalankan man systemd.unit .)

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
sudo nano /etc/systemd/system/ocserv.service

Komentari dua baris berikut.

Requires=ocserv.socket

Also=ocserv.socket

Simpan dan tutup file. Kemudian muat ulang systemd

sudo systemctl daemon-reload

Hentikan ocserv.socket dan nonaktifkan.

sudo systemctl stop ocserv.socket

sudo systemctl disable ocserv.socket

Mulai ulang layanan ocserv.

sudo systemctl restart ocserv.service

Layanan ocserv systemd tidak akan menampilkan pesan apa pun jika gagal dimulai ulang, jadi kita perlu memeriksa statusnya untuk memastikannya benar-benar berjalan.

systemctl status ocserv

Langkah 6:Membuat Akun VPN

Sekarang gunakan alat ocpasswd untuk membuat akun VPN.

sudo ocpasswd -c /etc/ocserv/ocpasswd username

Anda akan diminta untuk mengatur kata sandi untuk pengguna dan informasinya akan disimpan ke /etc/ocserv/ocpasswd mengajukan. Untuk mengatur ulang kata sandi, jalankan kembali perintah di atas.

Langkah 7:Aktifkan Penerusan IP

Agar server VPN dapat merutekan paket antara klien VPN dan dunia luar, kita perlu mengaktifkan penerusan IP. Edit sysctl.conf berkas.

sudo nano /etc/sysctl.conf

Tambahkan baris berikut di akhir file ini.

net.ipv4.ip_forward = 1

Simpan dan tutup file. Kemudian terapkan perubahan dengan perintah di bawah ini. -p opsi akan memuat pengaturan sysctl dari /etc/sysctl.conf mengajukan. Perintah ini akan mempertahankan perubahan kami di seluruh reboot sistem.

sudo sysctl -p

Langkah 8:Konfigurasi Firewall untuk Penyamaran IP

Kita perlu mengatur penyamaran IP di firewall server, sehingga server menjadi router virtual untuk klien VPN. Saya akan menggunakan UFW, yang merupakan ujung depan dari firewall iptables. Instal UFW di Ubuntu dengan:

sudo apt install ufw

Pertama, Anda harus mengizinkan lalu lintas SSH.

sudo ufw allow 22/tcp

Selanjutnya, temukan nama antarmuka jaringan utama server Anda.

ip addr

Seperti yang Anda lihat, namanya ens3 di server Ubuntu saya.

Untuk mengkonfigurasi penyamaran IP, kita harus menambahkan perintah iptables dalam file konfigurasi UFW.

sudo nano /etc/ufw/before.rules

Secara default, ada beberapa aturan untuk filter meja. Tambahkan baris berikut di akhir file ini. Ganti ens3 dengan nama antarmuka jaringan Anda sendiri.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Di editor teks Nano, Anda dapat pergi ke akhir file dengan menekan Ctrl+W , lalu tekan Ctrl+V .

Baris di atas akan ditambahkan (-A ) aturan hingga akhir POSTROUTING rantai nat meja. Ini akan menghubungkan jaringan pribadi virtual Anda dengan Internet. Dan juga menyembunyikan jaringan Anda dari dunia luar. Jadi Internet hanya dapat melihat IP server VPN Anda, tetapi tidak dapat melihat IP klien VPN Anda, sama seperti router rumah Anda menyembunyikan jaringan rumah pribadi Anda.

Secara default, UFW melarang penerusan paket. Kami dapat mengizinkan penerusan untuk jaringan pribadi kami. Temukan ufw-before-forward rantai dalam file ini dan tambahkan 3 baris berikut, yang akan menerima penerusan paket jika IP sumber atau IP tujuan ada di 10.10.10.0/24 jangkauan.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Simpan dan tutup file. Kemudian aktifkan UFW.

sudo ufw enable

Jika Anda telah mengaktifkan UFW sebelumnya, Anda dapat menggunakan systemctl untuk memulai ulang UFW.

sudo systemctl restart ufw

Sekarang jika Anda membuat daftar aturan dalam rantai POSTROUTING tabel NAT dengan menggunakan perintah berikut:

sudo iptables -t nat -L POSTROUTING

Anda dapat melihat aturan Masquerade.

Langkah 9:Buka Port 443 di Firewall

Jalankan perintah berikut untuk membuka port TCP dan UDP 443. Jika Anda mengonfigurasi port yang berbeda untuk ocserv, ubah 443 ke port yang dikonfigurasi.

sudo ufw allow 443/tcp
sudo ufw allow 443/udp

Sekarang server VPN OpenConnect siap menerima koneksi klien.

Jika Anda menetapkan 10.10.10.1 sebagai server DNS untuk klien VPN, maka Anda harus mengizinkan klien VPN untuk terhubung ke port 53 dengan aturan UFW berikut.

sudo ufw insert 1 allow in from 10.10.10.0/24

Anda juga perlu mengedit konfigurasi server DNS BIND agar klien VPN dapat mengirim kueri DNS rekursif seperti di bawah ini.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Cara Menginstal dan Menggunakan klien VPN OpenConnect di Desktop Ubuntu 16.04/18.04

Jalankan perintah berikut untuk menginstal klien baris perintah OpenConnect VPN di desktop Ubuntu.

sudo apt install openconnect

Anda dapat Terhubung ke VPN dari baris perintah seperti di bawah ini. -b flag akan membuatnya berjalan di latar belakang setelah koneksi dibuat.

sudo openconnect -b vpn.example.com:port-number

Anda akan diminta untuk memasukkan nama pengguna dan kata sandi VPN. Jika koneksi berhasil dibuat, Anda akan melihat pesan berikut.

Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 32400
Connected tun0 as 192.168.1.139, using SSL
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).

Untuk menghentikan koneksi, jalankan:

sudo pkill openconnect

Untuk menjalankan klien secara non-interaktif, gunakan sintaks berikut.

echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin

Jika Anda ingin menggunakan Pengelola Jaringan untuk mengelola koneksi VPN, Anda juga perlu menginstal paket-paket ini.

sudo apt install network-manager-openconnect network-manager-openconnect-gnome

Jika Anda berhasil terhubung ke server VPN, tetapi alamat IP publik Anda tidak berubah, itu karena penerusan IP atau penyamaran IP tidak berfungsi. Saya pernah salah ketik pada perintah iptables saya, yang menyebabkan komputer saya tidak dapat menjelajah Internet.

Hubungkan Otomatis pada Startup Sistem

Agar klien OpenConnect VPN secara otomatis terhubung ke server saat boot, kita dapat membuat unit layanan systemd.

sudo nano /etc/systemd/system/openconnect.service

Letakkan baris berikut ke file. Ganti teks merah.

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target systemd-resolved.service
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
  ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78'
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Simpan dan tutup file. Kemudian aktifkan layanan ini sehingga akan dimulai saat boot.

sudo systemctl enable openconnect.service

Penjelasan isi file:

  • After=network-online.target systemd-resolved.service dan Wants=network-online.target buat layanan ini berjalan setelah jaringan menyala. Kami menginginkan openconnect.service mulai setelah systemd-resolved.service karena itu akan memastikan alamat server DNS yang disetel oleh OpenConnect tidak akan ditimpa oleh systemd-resolved.service .
  • Pada kenyataannya, layanan ini masih dapat berjalan sebelum jaringan aktif. Kami menambahkan Restart=always dan RestartSec=2 untuk memulai kembali layanan ini setelah 2 detik jika layanan ini gagal.
  • Systemd tidak mengenali pengalihan pipa, jadi di ExecStart direktif, kami membungkus perintah dalam tanda kutip tunggal dan menjalankannya dengan shell Bash.
  • Karena klien VPN OpenConnect akan berjalan sebagai layanan systemd, yang berjalan di latar belakang, tidak perlu menambahkan -b tandai ke openconnect perintah.
  • ExecStop direktif untuk menghentikan koneksi VPN. Pertama, kita menggunakan resolvconf perintah untuk mengembalikan pengaturan server DNS. tun0 adalah nama default untuk perangkat TUN, yang dapat Anda lihat dengan ip link memerintah. Kemudian kita menggunakan pkill perintah untuk menghentikan openconenct proses. Terakhir, kami mengembalikan tabel perutean kernel Linux dengan ip route flush memerintah. Ganti 12.34.56.78 dengan alamat IP server VPN Anda.

Untuk segera memulai layanan Systemd ini, jalankan

sudo systemctl start openconnect

Untuk menghentikan layanan Systemd ini, jalankan

sudo systemctl stop openconnect

Mulai Ulang Otomatis Saat Koneksi VPN Putus

Terkadang koneksi VPN terputus karena berbagai alasan. Untuk membuat klien VPN dimulai ulang secara otomatis, edit file crontab pengguna root.

sudo crontab -e

Tambahkan baris berikut di akhir file ini.

* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect

Pekerjaan Cron ini akan berjalan setiap menit untuk memeriksa apakah klien VPN dapat melakukan ping ke alamat IP pribadi server VPN (10.10.10.1). Jika ping tidak berhasil, maka perintah di sebelah kanan akan dijalankan untuk me-restart klien VPN. || adalah operator OR di Bash. Itu mengeksekusi perintah di sebelah kanan hanya jika perintah di sebelah kiri menghasilkan kesalahan.

Simpan dan tutup file.

OpenConnect GUI Client untuk Windows dan MacOS

Mereka dapat diunduh dari Halaman Github OpenConnect GUI.

Kecepatan

OpenConnect VPN cukup cepat. Saya dapat menggunakannya untuk menonton video 4k di YouTube. Seperti yang Anda lihat, kecepatan koneksi 63356 Kbps , yang diterjemahkan menjadi 61 Mbit/s .

Dan inilah hasil tesnya di speedtest.net.

Optimalisasi Kecepatan

OpenConnect secara default menggunakan protokol TLS over UDP (DTLS) untuk mencapai kecepatan yang lebih cepat, tetapi UDP tidak dapat menyediakan transmisi yang andal. TCP lebih lambat dari UDP tetapi dapat menyediakan transmisi yang andal. Satu tip pengoptimalan yang dapat saya berikan kepada Anda adalah menonaktifkan DTLS, gunakan TLS standar (melalui TCP), lalu aktifkan TCP BBR untuk meningkatkan kecepatan TCP.

Untuk menonaktifkan DTLS, beri komentar (tambahkan simbol # di awal) baris berikut di file konfigurasi ocserv.

udp-port = 443

Simpan dan tutup file. Kemudian restart layanan ocserv.

sudo systemctl restart ocserv.service

Untuk mengaktifkan TCP BBR, silakan lihat tutorial berikut.

  • Cara Mudah meningkatkan Kinerja Jaringan Ubuntu dengan mengaktifkan TCP BBR

Dalam pengujian saya, TLS standar dengan TCP BBR diaktifkan dua kali lebih cepat daripada DTLS.

Perpanjang Otomatis Let's Encrypt Certificate

Edit file crontab pengguna root.

sudo crontab -e

Tambahkan baris berikut di akhir file. Layanan ocserv perlu dimulai ulang agar server VPN dapat mengambil sertifikat dan file kunci baru.

@daily certbot renew --quiet && systemctl restart ocserv

Kiat Pemecahan Masalah

Perhatikan bahwa jika Anda menggunakan OpenVZ VPS, pastikan Anda mengaktifkan perangkat jaringan virtual TUN di panel kontrol VPS.

Jika Anda mengalami masalah, periksa log server OpenConnect VPN.

sudo journalctl -xe -u ocserv.service

Saya menemukan bahwa jika saya mengubah port 443 ke port lain, firewall hebat China akan memblokir koneksi VPN ini.

Jika ocserv memberi tahu Anda bahwa itu tidak dapat memuat /etc/ocserv/ocserv.conf file, Anda dapat menghentikan ocserv.

sudo systemctl stop ocserv

Kemudian jalankan di latar depan dengan debugging diaktifkan.

sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10

Kemudian output mungkin memberi Anda beberapa petunjuk mengapa ocserv tidak berfungsi.

Biarkan server VPN OpenConnect dan server web menggunakan port 443 secara bersamaan

Silakan baca artikel berikut:

  • Jalankan OpenConnect VPN Server &Apache/Nginx pada Kotak yang Sama dengan HAProxy

Cara Menonaktifkan TLS 1.0 dan TLS 1.1 di ocserv

Dewan PCI tidak lagi menggunakan TLS 1.0 pada 30 Juni 2018 dan browser web arus utama akan menonaktifkan TLS 1.0 dan TLS 1.1 pada tahun 2020. Kita harus melakukan hal yang sama dengan server VPN. Edit file konfigurasi utama.

sudo nano /etc/ocserv/ocserv.conf

Temukan baris berikut:

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"

Untuk menonaktifkan TLS 1.0 dan TLS 1.1 di server VPN OpenConnect, cukup tambahkan -VERS-TLS1.0 dan -VERS-TLS1.1 di baris.

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"

Simpan dan tutup file. Kemudian restart ocserv.

sudo systemctl restart ocserv

Sekarang ocserv hanya akan menerima TLS 1.2. Untuk informasi lebih lanjut tentang mengonfigurasi parameter TLS di ocserv, silakan lihat string prioritas GnuTLS.

Untuk memeriksa apakah TLS 1.0 didukung di server VPN OpenConnect Anda, jalankan perintah berikut.

openssl s_client -connect vpn.your-domain.com:443 -tls1

Dan periksa TLS 1.1

openssl s_client -connect vpn.your-domain.com:443 -tls1_1

Jika Anda melihat pesan berikut di output, itu berarti versi TLS tidak didukung.

New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported

Saya mencoba mengaktifkan TLS 1.3, tetapi belum didukung dalam paket ocserv di Ubuntu.

Konfigurasi Per Pengguna atau Per Grup

Ocserv memungkinkan konfigurasi per pengguna dan per grup. Untuk mengaktifkan fitur ini, batalkan komentar pada dua baris berikut di /etc/ocserv/ocserv.conf berkas.

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

Simpan dan tutup file. Kemudian buat direktori konfigurasi per pengguna dan per grup.

sudo mkdir /etc/ocserv/config-per-user/
sudo mkdir /etc/ocserv/config-per-group/

Selanjutnya, Anda dapat membuat file di bawah dua direktori ini. Misalnya, buat user1 file untuk mengizinkan konfigurasi khusus untuk user1 .

sudo nano /etc/ocserv/config-per-user/user1

Anda juga dapat membuat group1 file untuk mengizinkan konfigurasi khusus untuk grup bernama group1 .

sudo nano /etc/ocserv/config-per-group/group1

Anda dapat menambahkan sesuatu seperti di bawah ini ke dalam file.

route = 10.10.10.0/255.255.255.0

Artinya setelah user1 sambungkan ke server VPN ini, hanya lalu lintas ke 10.10.10.0/24 jaringan akan dirutekan melalui server VPN. Lalu lintas ke alamat IP lain dirutekan melalui gateway asli. Trik ini saya gunakan agar VPS (virtual private server) saya yang lain dapat terhubung ke server VPN ini tanpa mengganggu lalu lintas normal, sehingga perangkat tun (vpns0) dari server VPN saya selalu menyala, yang berarti server VPN saya akan selalu memiliki alamat IP pribadi 10.10.10.1.

Simpan dan tutup file. Mulai ulang ocserv agar perubahan diterapkan.

sudo systemctl restart ocserv

Hosting Virtual

Untuk menambahkan virtual host baru di ocserv, pertama Anda harus menggunakan metode di langkah 3 untuk mendapatkan sertifikat TLS untuk virtual host baru. Kemudian edit file konfigurasi ocserv.

sudo nano /etc/ocserv/ocserv.conf

Pergi ke bagian bawah file ini. Di editor teks Nano, Anda dapat menekan Ctrl+W , lalu Ctrl+V untuk melompat ke bagian bawah file. Tambahkan baris berikut. Ganti vpn2.example.com dengan nama host dari host virtual kedua.

[vhost:vpn2.example.com]
#Allow password authentication and certificate authentication
enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
auth = "certificate"

tcp-port = 443

#uncomment the two lines if ocserv runs behind HAProxy.
#listen-host = 127.0.0.1
#listen-proxy-proto = true

# SSL/TLS configuration
ca-cert = /etc/ocserv/ssl/ca-cert.pem
server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem
cert-user-oid = 0.9.2342.19200300.100.1.1

#Networking configuration. Use a different network range for this virtual host. 
device = vpns
ipv4-network = 10.10.20.0
ipv4-netmask = 255.255.255.0
route = default
dns = 8.8.8.8
tunnel-all-dns = true

compression = true
max-clients = 0
max-same-clients = 0
try-mtu-discovery = true
idle-timeout=1200
mobile-idle-timeout=2400

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

Simpan dan tutup file. Kemudian restart ocserv.

sudo systemctl restart ocserv

Edit file konfigurasi UFW.

sudo nano /etc/ufw/before.rules

Temukan ufw-before-forward rantai dalam file ini dan tambahkan 2 baris berikut, yang akan menerima penerusan paket jika IP sumber atau IP tujuan ada di 10.10.20.0/24 jangkauan.

-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT

Simpan dan tutup file. Kemudian mulai ulang UFW.

sudo systemctl restart ufw

Perhatikan bahwa daemon ocserv mungkin memberi tahu Anda bahwa beberapa parameter akan diabaikan untuk host virtual. Namun, saya menemukan bahwa beberapa parameter yang diabaikan sebenarnya diperlukan. Misalnya, jika Anda menghapus device = vpns baris dari virtual host, Anda mungkin mengalami kesalahan berikut saat membuat koneksi VPN ke virtual host.

VPN service unavailable; reason: Server configuration error

Dan server VPN akan menghasilkan pesan kesalahan berikut di log.

no networks are configured; rejecting client

Perhatikan Juga bahwa klien AnyConnect VPN di iOS tidak mendukung TLS SNI, sehingga pengguna iOS akan terhubung ke host virtual default.

Cara Menjalankan Beberapa Instance ocserv

Satu proses ocserv hanya dapat mengikat satu port TCP atau UDP di server Anda. Jika Anda ingin mengizinkan ocserv untuk mengikat ke beberapa port TCP atau UDP, maka Anda perlu menjalankan beberapa proses ocserv. Ini sangat sederhana. Salin /lib/systemd/system/ocserv.service ke file baru.

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service

Kemudian edit file baru.

sudo nano /etc/systemd/system/ocserv2.service

Ubah

/etc/ocserv/ocserv.conf

untuk

/etc/ocserv/ocserv2.conf

Simpan dan tutup file. Selanjutnya, Anda dapat mengedit /etc/ocserv/ocserv2.conf file dan tambahkan konfigurasi khusus Anda. Setelah selesai, mulai layanan ocserv kedua.

sudo systemctl start ocserv2

Ubuntu
  1. Cara Mengatur VPN WireGuard di Ubuntu (Panduan Langkah-demi-Langkah)

  2. Cara Mengatur Server VPN IKEv2 dengan StrongSwan di Ubuntu 22.04

  3. Amankan Nginx dengan Let's Encrypt di Ubuntu 18.04 - Bagaimana cara melakukannya?

  1. Siapkan OpenConnect VPN Server (ocserv) di Debian 11 Bullseye

  2. Siapkan OpenConnect VPN Server (ocserv) di Debian 10 Buster

  3. Siapkan Otentikasi Sertifikat di OpenConnect VPN Server (ocserv)

  1. Cara Mengatur Server Email dengan Plesk di Ubuntu 20.04

  2. Cara Mengatur Server FTP Aman dengan Pure-FTPd di Ubuntu

  3. Siapkan Server VPN WireGuard Anda Sendiri di Ubuntu 20.04/18.04