GNU/Linux >> Belajar Linux >  >> Ubuntu

Siapkan OpenConnect VPN Server (ocserv) di Ubuntu 20.04 dengan Let's Encrypt

Tutorial ini akan menunjukkan kepada Anda bagaimana menjalankan server VPN Anda sendiri dengan menginstal server OpenConnect VPN di Ubuntu 20.04. Server VPN OpenConnect, alias ocserv , adalah implementasi sumber terbuka dari protokol VPN Cisco AnyConnnect, yang banyak digunakan di bisnis dan universitas. AnyConnect adalah protokol VPN berbasis SSL yang memungkinkan pengguna individu terhubung ke jaringan jarak jauh.

Catatan :Tutorial ini juga berfungsi di Ubuntu 20.10 dan Ubuntu 21.04.

Mengapa Mengatur Server VPN Anda Sendiri?

  • Mungkin Anda adalah penyedia layanan VPN atau administrator sistem, yang mengharuskan Anda untuk menyiapkan server VPN kami sendiri.
  • Anda tidak memercayai kebijakan larangan masuk dari penyedia layanan VPN, jadi Anda memilih rute hosting sendiri.
  • Anda dapat menggunakan VPN untuk menerapkan kebijakan keamanan jaringan. Misalnya, jika Anda menjalankan server email Anda sendiri, Anda dapat meminta pengguna untuk masuk hanya dari alamat IP server VPN dengan membuat daftar putih alamat IP di firewall. Dengan demikian, server email Anda dikeraskan untuk mencegah aktivitas peretasan.
  • Mungkin Anda hanya ingin tahu cara kerja server VPN.

Fitur Server VPN OpenConnect

  • Ringan dan cepat. Dalam pengujian saya, saya dapat menonton video YouTube 4K dengan OpenConnect VPN. YouTube diblokir di negara saya (China).
  • Berjalan di Linux dan sebagian besar server BSD.
  • Kompatibel dengan klien Cisco AnyConnect
  • Ada perangkat lunak klien OpenConnect untuk Linux, MacOS, Windows dan OpenWRT. Untuk Android dan iOS, Anda dapat menggunakan Cisco AnyConnect Client.
  • Mendukung otentikasi kata sandi dan otentikasi sertifikat
  • Mendukung akuntansi RADIUS.
  • Mendukung hosting virtual (banyak domain).
  • 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 di komputer saya dan ingin membuka blokir situs web atau menyembunyikan alamat IP saya dengan cepat, saya menginstal klien OpenConnect dan terhubung ke server hanya dengan dua baris perintah:

sudo apt install openconnect

sudo openconnect -b vpn.mydomain.com

Ada juga klien VPN OpenConnect untuk Fedora, RHEL, CentOS, Arch Linux dan OpenSUSE. Anda dapat menginstalnya dengan mudah dengan manajer paket Anda.

sudo dnf install openconnect
sudo yum install openconnect
sudo pacman -S openconnect

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 20.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:Instal OpenConnect VPN Server di Ubuntu 20.04

Masuk ke server Ubuntu 20.04 Anda. Kemudian gunakan apt untuk menginstal ocserv paket dari repositori default Ubuntu.

sudo apt update
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 Sun 2020-04-12 19:57:08 HKT; 12s ago
       Docs: man:ocserv(8)
   Main PID: 216409 (ocserv-main)
      Tasks: 2 (limit: 9451)
     Memory: 1.6M
     CGroup: /system.slice/ocserv.service
             ├─216409 ocserv-main
             └─216429 ocserv-sm

Petunjuk:Jika perintah di atas tidak segera berhenti, Anda dapat menekan tombol Q untuk mendapatkan kembali kendali terminal.

Jika tidak berjalan, Anda dapat memulainya dengan:

sudo systemctl start ocserv

Secara default, server VPN OpenConnect mendengarkan pada port TCP dan UDP 443. Jika digunakan oleh server web, maka server VPN mungkin akan gagal untuk memulai. Kita akan melihat cara mengubah port di file konfigurasi OpenConnect VPN nanti.

Jika ada firewall yang berjalan di server Anda, maka Anda harus membuka port 80 dan 443. Misalnya, jika Anda menggunakan UFW, jalankan perintah berikut.

sudo ufw allow 80,443/tcp

Langkah 2:Instal Let's Encrypt Client (Certbot) di Server Ubuntu 20.04

gnutls-bin paket diinstal bersama dengan ocserv 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.

Jalankan perintah berikut untuk menginstal klien Let's Encrypt (certbot) dari repositori default Ubuntu.

sudo apt install certbot

Untuk memeriksa nomor versi, jalankan

certbot --version

Contoh keluaran:

certbot 0.40.0

Langkah 3:Dapatkan Sertifikat TLS Tepercaya dari Let's Encrypt

Saya sarankan menggunakan standalone atau webroot plugin untuk mendapatkan sertifikat TLS untuk ocserv.

Plugin Mandiri

Jika tidak ada server web yang berjalan di server Ubuntu 20.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 [email protected] -d vpn.example.com

Dimana:

  • certonly :Dapatkan sertifikat tetapi jangan menginstalnya.
  • --standalone :Gunakan plugin mandiri untuk mendapatkan sertifikat
  • --preferred-challenges http :Lakukan tantangan http-01 untuk memvalidasi domain kami, yang akan menggunakan port 80.
  • --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 20.04 Anda memiliki server web yang mendengarkan pada port 80 dan 443, maka sebaiknya gunakan plugin webroot untuk mendapatkan sertifikat karena plugin webroot berfungsi dengan hampir semua server web dan kami tidak perlu menginstal 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/ocserv
</VirtualHost>

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir /var/www/ocserv

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

sudo chown www-data:www-data /var/www/ocserv -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 [email protected] -d vpn.example.com -w /var/www/ocserv

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/ocserv/;

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

Simpan dan tutup file. Kemudian buat direktori root web.

sudo mkdir -p /var/www/ocserv

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

sudo chown www-data:www-data /var/www/ocserv -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 [email protected] -d vpn.example.com -w /var/www/ocserv

Langkah 4:Edit File Konfigurasi Server VPN OpenConnect

Edit file konfigurasi utama ocserv.

sudo nano /etc/ocserv/ocserv.conf

Pertama, kita perlu mengkonfigurasi 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 128. Setel ke nol untuk tidak terbatas.

max-clients = 128

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

max-same-clients = 2

Secara default, paket keepalive dikirim setiap 300 detik (5 menit). Saya lebih suka menggunakan waktu yang singkat (30 detik) untuk mengurangi kemungkinan putusnya koneksi VPN.

keepalive = 30

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

try-mtu-discovery = false

Anda dapat mengatur waktu klien diizinkan untuk tetap diam sebelum diputuskan melalui dua parameter berikut. Jika Anda lebih suka klien tetap terhubung tanpa batas, beri komentar pada dua parameter ini.

idle-timeout=1200
mobile-idle-timeout=1800

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 banyak 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

Alamat DNS resolver default adalah sebagai berikut, tidak masalah.

dns = 8.8.8.8
dns = 1.1.1.1

Catatan :Jika Anda adalah penyedia layanan VPN, maka menjalankan resolver DNS Anda sendiri di server yang sama adalah praktik yang baik. 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 komentari semua parameter rute (tambahkan simbol # di awal baris berikut), yang akan menetapkan server sebagai gateway default untuk klien.

#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16
#route = fd00::/8
#route = default

#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:Buat 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 6:Aktifkan Penerusan IP

Agar server VPN dapat merutekan paket antara klien VPN dan Internet, 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 7:Konfigurasi Penyamaran IP di Firewall

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

Kemudian 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.

UFW memerlukan waktu untuk memproses aturan firewall. Jika aturan penyamaran tidak muncul, maka mulai ulang UFW lagi (sudo systemctl restart ufw ).

Langkah 8: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 menjalankan Penyelesai DNS lokal

Bagi Anda yang menjalankan resolver DNS lokal, 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 file konfigurasi server DNS BIND (/etc/bind/named.conf.options ) untuk mengizinkan klien VPN mengirim kueri DNS rekursif seperti di bawah ini.

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

Kemudian mulai ulang BIND.

sudo systemctl restart named

Cara Menginstal dan Menggunakan klien VPN OpenConnect di Desktop Ubuntu 20.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 (menggunakan rentang alamat IP yang salah), yang menyebabkan komputer saya tidak dapat menjelajahi Internet.

Jika Anda menemukan kesalahan berikut, maka Anda harus menonaktifkan port UDP di ocserv, yang akan dijelaskan nanti di optimasi kecepatan bagian.

DTLS handshake failed: Resource temporarily unavailable, try again

Jika Anda mengalami kesalahan berikut, kemungkinan kata sandi akun VPN Anda salah.

fgets (stdin): Inappropriate ioctl for device

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'
  KillSignal=SIGINT
  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.
  • KillSignal direktif memberitahu Systemd untuk mengirim SIGINT memberi sinyal saat systemctl stop openconnect perintah dikeluarkan. Ini akan melakukan shutdown bersih dengan log sesi, dan memulihkan pengaturan server DNS dan tabel perutean kernel Linux.

Untuk segera memulai layanan Systemd ini, jalankan

sudo systemctl start openconnect

Untuk menghentikan layanan Systemd ini, jalankan

sudo systemctl stop openconnect

Cara Memulai Ulang Klien OpenConnect Secara Otomatis Saat Melanjutkan dari Penangguhan

Jika desktop Ubuntu Anda masuk ke status ditangguhkan, klien OpenConnect akan kehilangan koneksi ke server VPN. Untuk membuatnya otomatis restart saat melanjutkan dari penangguhan, kita perlu membuat unit layanan systemd lain.

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

Tambahkan baris berikut dalam file.

[Unit]
Description=Restart OpenConnect client when resuming from suspend
After=suspend.target

[Service]
Type=simple
ExecStart=/bin/systemctl --no-block restart openconnect.service

[Install]
WantedBy=suspend.target

Simpan dan tutup file. Kemudian aktifkan layanan ini.

sudo systemctl enable openconnect-restart.service

Mulai Ulang Otomatis Saat Koneksi VPN Putus

Terkadang koneksi VPN terputus karena alasan lain. Anda dapat menjalankan perintah berikut 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.

ping -c9 10.10.10.1 || systemctl restart openconnect

Ping akan dilakukan 9 kali, yaitu 9 detik. Anda dapat menggunakan loop tak terbatas di shell Bash untuk membuat seluruh perintah berjalan selamanya. Tekan Ctrl+C untuk menghentikannya.

for ((; ; )) do (ping -c9 10.10.10.1 || systemctl restart openconnect) done

Sekarang kita dapat membuat layanan systemd untuk tugas ini.

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

Tambahkan baris berikut ke file ini. Kami menetapkan bahwa layanan ini harus dijalankan setelah openconnect.service .

[Unit]
Description=OpenConnect VPN Connectivity Checker
After=openconnect.service

[Service]
Type=simple
ExecStart=/bin/bash -c 'for ((; ; )) do (ping -c9 10.10.10.1 || systemctl restart openconnect) done'

[Install]
WantedBy=multi-user.target

Simpan dan tutup file. Kemudian mulai layanan ini.

sudo systemctl start openconnect-check

Aktifkan mulai otomatis saat boot.

sudo systemctl enable openconnect-check

Setelah layanan ini dimulai, perintah ping akan berjalan selamanya. Jika koneksi VPN terputus, maka secara otomatis akan memulai ulang openconnect.service .

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 saya 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 dalam 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. Perhatikan bahwa Anda perlu menonaktifkan DTLS di ocserv, atau TCP BBR tidak akan berfungsi.

  • 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.

Faktor lain yang sangat penting yang mempengaruhi kecepatan adalah seberapa baik koneksi antara komputer lokal Anda dan server VPN. Jika Anda tinggal di timur tengah dan server VPN berlokasi di AS, kecepatannya akan lambat. Pilih pusat data yang dekat dengan tempat tinggal Anda.

Juga, periksa rata-rata beban CPU Anda. (htop dapat diinstal dengan sudo apt install htop ).

htop

Pastikan rata-rata beban CPU di bawah 1 . Saya pernah memiliki rata-rata beban CPU 3 , yang menyebabkan latensi tinggi antara klien VPN dan server VPN.

Perpanjang Otomatis Let's Encrypt Certificate

Edit file crontab pengguna root.

sudo crontab -e

Tambahkan baris berikut di akhir file. Perlu memuat ulang layanan ocserv untuk server VPN guna mengambil sertifikat dan file kunci baru.

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

Kiat Pemecahan Masalah

OpenVZ

Perhatikan bahwa jika Anda menggunakan OpenVZ VPS, pastikan Anda mengaktifkan perangkat jaringan virtual TUN di panel kontrol VPS. (Jika Anda menggunakan Vultr VPS, maka Anda memiliki VPS berbasis KVM, jadi Anda tidak perlu khawatir tentang hal ini.)

Berkas Log

Jika Anda mengalami masalah, periksa log server OpenConnect VPN.

sudo journalctl -eu ocserv.service

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

Mode Debug

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.

Tidak dapat menjelajahi Internet

Jika Anda berhasil terhubung ke server VPN, tetapi Anda tidak dapat menjelajahi Internet, itu karena penerusan IP atau penyamaran IP tidak berfungsi. Saya ingat penyedia VPS saya pernah melakukan upgrade platform, yang mengubah nama antarmuka jaringan utama dari ens3 ke enp3s0 , jadi saya harus memperbarui nama di file UFW (/etc/ufw/before.rules ).

Kesalahan Sintaks

Jika Anda melihat kesalahan berikut saat mencoba membuat koneksi VPN, itu mungkin karena ada kesalahan sintaks pada file konfigurasi ocserv Anda. Periksa jurnal (sudo journalctl -eu ocserv ) untuk mencari tahu.

Got inappropriate HTTP CONNECT response: HTTP/1.1 401 Cookie is not acceptable

Restart Komputer Anda

Jika Anda melihat kesalahan berikut saat mencoba membuat koneksi VPN, kemungkinan itu masalah komputer lokal. Coba mulai ulang komputer Anda.

Server 'vpn.your-domain.com' requested Basic authentication which is disabled by default

Koneksi TLS tidak dihentikan dengan benar

Jika Anda melihat kesalahan berikut pada klien saat mencoba membuat koneksi VPN,

SSL connection failure: The TLS connection was non-properly terminated.

Anda mungkin harus memulai ulang ocserv layanan di server VPN.

sudo systemctl restart ocserv

Anda dapat membuat tugas cron untuk memulai ulang ocserv secara otomatis sekali sehari pada jam 4 pagi.

sudo crontab -e

Tambahkan baris berikut.

0 4 * * * systemctl restart ocserv

Simpan dan tutup file.

Buat 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:-RSA:-VERS-SSL3.0:-ARCFOUR-128"

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

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

Simpan dan tutup file. Kemudian restart ocserv.

sudo systemctl restart ocserv

Sekarang ocserv hanya akan menerima TLS 1.3 dan 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

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 dalam file untuk mengaktifkan tunneling terpisah.

route = 10.10.10.0/255.255.255.0
tunnel-all-dns = false
dns = 8.8.8.8
dns = 1.1.1.1

Dimana:

  • Baris pertama berarti setelah user1 atau pengguna di group1 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.
  • Baris kedua menonaktifkan permintaan DNS tunneling.
  • Baris ketiga dan keempat mengatur server DNS untuk klien VPN.

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

Perhatikan bahwa jika Anda mengaktifkan IPv6 di ocserv, Anda juga perlu menambahkan rentang jaringan IPv6 untuk menggunakan tunneling terpisah.

route = 10.10.10.0/255.255.255.0
route = fda9:4efe:7e3b:03ea::/48
tunnel-all-dns = false
dns = 8.8.8.8
dns = 1.1.1.1

Jika Anda ingin mengecualikan alamat IP dari rute default, gunakan no-route .

no-route = 12.34.56.78/32

Ini berarti semua lalu lintas lainnya akan melalui terowongan VPN kecuali lalu lintas ke IP 12.34.56.78. paramater route dan no-route menerima notasi netmask (10.10.10.0/255.255.255.0) dan notasi CIDR (12.34.56.78/32)

Jika Anda melihat kesalahan berikut setelah mengaktifkan split tunneling, mungkin karena Anda tidak menggunakan netmask atau notasi CIDR.

could not parse proxy protocol header; discarding connection

Terowongan Terpisah menurut Negara

Katakanlah Anda hanya ingin lalu lintas ke negara asing disalurkan oleh VPN. Lalu lintas ke negara Anda sendiri harus menggunakan rute normal. Anda dapat menggunakan no-route arahan dalam file konfigurasi ocserv untuk mencapai ini.

Pertama, Anda perlu mengunduh rentang IP untuk negara Anda dengan membuka halaman web ini:https://www.ip2location.com/free/visitor-blocker, yang memungkinkan Anda mengunduh rentang alamat IP dalam format CIDR.

Simpan rentang IP dalam file teks ip2location.txt , dan jalankan perintah berikut di terminal Linux Anda untuk menambahkan no-route = direktif ke awal setiap baris.

sed 's/^/no-route = /' -i ip2localtion.txt

Sekarang buka file dalam editor teks dan salin semua baris di dalamnya. Kita perlu menambahkan baris ini di file konfigurasi ocserv. Jika ada terlalu banyak baris, Anda dapat menambahkan baris ini ke file konfigurasi per pengguna.

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

Anda juga dapat menambahkannya ke file konfigurasi per grup, lalu menambahkan pengguna ke grup.

Mulai ulang ocserv agar perubahan diterapkan.

sudo systemctl restart ocserv

Cara Mengaktifkan IPv6 di OpenConnect VPN

Jika server VPN Anda memiliki alamat IPv6 publik, Anda dapat mengaktifkan IPv6 di OpenConnect VPN. Edit file konfigurasi ocserv.

sudo nano /etc/ocserv/ocserv.conf

Temukan dua baris berikut dan batalkan komentarnya.

ipv6-network = fda9:4efe:7e3b:03ea::/48
ipv6-subnet-prefix = 64

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

sudo systemctl restart ocserv

Kemudian kita perlu mengaktifkan penerusan IP untuk IPv6. Edit sysctl.conf berkas.

sudo nano /etc/sysctl.conf

Tambahkan baris berikut di akhir file ini.

net.ipv6.conf.all.forwarding=1

Simpan dan tutup file. Kemudian terapkan perubahan dengan perintah di bawah ini.

sudo sysctl -p

Selanjutnya, kita perlu mengatur penyamaran IPv6 di firewall server, sehingga server menjadi router virtual untuk klien VPN.

sudo nano /etc/ufw/before6.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 -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 .

Secara default, UFW melarang penerusan paket. Kami dapat mengizinkan penerusan untuk jaringan IPv6 pribadi kami. Temukan ufw6-before-forward rantai dalam file ini dan tambahkan 3 baris berikut, yang akan menerima penerusan paket jika IP sumber atau IP tujuan ada di fda9:4efe:7e3b:03ea::/48 jangkauan.

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

sudo systemctl restart ufw

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

sudo ip6tables -t nat -L POSTROUTING

Anda dapat melihat aturan Masquerade.

Putuskan sambungan VPN saat ini, tambahkan data AAAA untuk vpn.example.com dan membangun kembali koneksi VPN. Lalu buka https://test-ipv6.com/ untuk memeriksa konektivitas IPv6 Anda.

Jika Anda menjalankan penyelesai DNS BIND Anda sendiri di server VPN, Anda dapat menambahkan baris berikut di /etc/ocserv/ocserv.conf file untuk mengatur server VPN sebagai resolver DNS untuk klien VPN.

dns = fda9:4efe:7e3b::1

Simpan dan tutup file. Untuk menanyakan nama DNS di IPv6, kita perlu mengonfigurasi BIND untuk mengizinkan klien VPN IPv6.

sudo nano /etc/bind/named.conf.options

Temukan parameter allow-recursion dan ubah ke:

allow-recursion { 127.0.0.1; 10.10.10.0/24; fda9:4efe:7e3b:03ea::/48; };

Simpan dan tutup file. Mulai ulang BIND9.

sudo systemctl restart named

Kami juga perlu mengizinkan klien VPN IPv6 di firewall.

sudo ufw allow in from fda9:4efe:7e3b:03ea::/48

Hosting Virtual

Catatan :Jika Anda hanya ingin memiliki kemampuan untuk menggunakan beberapa nama host untuk server VPN, Anda dapat menggunakan certbot untuk mendapatkan sertifikat multi-domain. Kemudian restart ocserv dan selesai.

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. Cara Menginstal Let's Encrypt SSL di Ubuntu 18.04 dengan Nginx

  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 OpenConnect VPN Server (ocserv) di Ubuntu 18.04/16.04 dengan Let's Encrypt