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
danWants=network-online.target
buat layanan ini berjalan setelah jaringan menyala. Kami menginginkanopenconnect.service
mulai setelahsystemd-resolved.service
karena itu akan memastikan alamat server DNS yang disetel oleh OpenConnect tidak akan ditimpa olehsystemd-resolved.service
.- Pada kenyataannya, layanan ini masih dapat berjalan sebelum jaringan aktif. Kami menambahkan
Restart=always
danRestartSec=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 keopenconnect
perintah. KillSignal
direktif memberitahu Systemd untuk mengirimSIGINT
memberi sinyal saatsystemctl 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 digroup1
sambungkan ke server VPN ini, hanya lalu lintas ke10.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