Jaga beberapa tunnel vpnc tetap hidup dengan probe per profil
Skrip sambung ulang bawaan mengasumsikan satu tunnel. Beri setiap profil vpnc portnya sendiri, uji layanan sungguhan, dan rangkai probe dalam satu urutan tetap.
Satu profil vpnc tersambung ulang dengan bersih setelah roaming; tiga di antaranya bergiliran merusak soket, rute, dan keadaan resolver satu sama lain. Skrip sambung ulang bawaan paket ditulis untuk satu tunnel, jadi ia memulai ulang setiap profil setiap kali salah satunya mati. Memperbaikinya perlu tiga hal: port lokal terpisah, probe yang menguji layanan sungguhan per profil, dan satu rantai terurut yang tidak pernah menjalankan dua koneksi sekaligus.
Beri setiap profil port lokalnya sendiri
Profil vpnc yang dibiarkan di port lokal bawaan bersaing dengan profil yang sudah berjalan. Koneksi kedua gagal selagi yang pertama memegang port, dan baris log tampak seperti masalah gateway bukan konflik lokal. Sebagai gantinya, setel satu baris per berkas profil:
Local Port 0Angka nol membiarkan kernel memilih port sementara, sehingga dua profil dapat dibangun bersamaan. Beri nama setiap berkas menurut gateway dan grup yang dilayaninya, jaga agar hanya root yang bisa membacanya, dan selalu tersambung dengan profil yang cocok, bukan default bersama. Berkas default bersama adalah cara sebuah skrip menyambung ulang tunnel yang salah setelah seseorang mengganti nama profil.
Berkas profil membawa kredensial, jadi izin adalah bagian dari rancangan, bukan urusan kerapian. Berkas di bawah /etc/vpnc yang bisa dibaca semua orang menyerahkan rahasia grup ke setiap pengguna lokal. Pertahankan mode 0600 dengan root sebagai pemilik, dan biarkan skrip membaca berkas itu sebagai root alih-alih menyalin rahasia ke argumen. Itu juga sebabnya skrip probe tidak boleh pernah menuliskan isi berkas ke log.
Uji satu layanan per profil, bukan alamat tunnel
Permintaan echo ke alamat tunnel itu sendiri sebagian besar hanya membuktikan antarmuka ada. Itu tidak mengatakan apa pun tentang apakah host di belakangnya masih menjangkau aplikasi yang membenarkan tunnel itu. Antarmuka bisa hidup sementara rute di baliknya sudah hilang.
Uji satu layanan per profil dengan timeout TCP singkat dan sambung ulang hanya profil yang probe-nya gagal. Dua detik memisahkan jalur mati dari jalur lambat, dan probe TCP tidak bergantung pada ICMP diizinkan di suatu titik di sepanjang jalur. Ubah hanya target dan nama konfigurasi antar profil:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiSimpan itu sebagai /usr/local/bin/ensure-vpn-ops.sh, jadikan dapat dieksekusi, dan ulangi untuk setiap profil dengan hanya target probe dan nama konfigurasi yang diubah. Probe yang menjawab pertanyaan protokol bertahan melewati gateway yang membuang echo tetapi tetap meneruskan layanan yang penting bagi pengguna.
Rangkai probe agar tidak pernah berlomba
Skrip sambung ulang bawaan paket dapat memanggil probe Anda secara berurutan, dan urutan itulah intinya. Dua panggilan vpnc-connect yang berjalan bersamaan menulis ulang tabel rute dalam urutan yang tidak dikendalikan siapa pun, dan begitulah profil yang sehat kehilangan rutenya.
Jaga panggilan tetap di depan, tambahkan jeda diam singkat untuk antarmuka di bawahnya, dan jadwalkan rantai dari tabel cron root, karena hanya root yang dapat menulis ulang rute tunnel:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shJaga urutan tetap sama antara skrip boot dan entri cron, karena rantai yang berjalan dengan urutan berbeda saat boot pada dasarnya adalah program lain. Ketika satu profil bergantung pada rute profil lain, letakkan ketergantungan itu lebih dulu dan biarkan probe berikutnya gagal tanpa bahaya selagi tunnel sebelumnya masih naik.
Pantau log, lalu rusak satu dengan sengaja
Catat satu baris per jalan dengan profil, target probe, hasil, dan tindakan yang diambil. Tanpa itu, tunnel yang berkedip tiap menit tampak persis seperti yang tidak pernah putus, dan bug probe tidak bisa dibedakan dari gangguan gateway. Log juga membuktikan bahwa rantai hanya menyentuh profil yang gagal. Tulis di tempat yang bertahan setelah reboot, atau buktinya ikut hilang bersama proses.
Lalu rusak satu tunnel dengan sengaja dan lihat apa yang terjadi. Hentikan satu profil dan pastikan proses serta rute mana yang masih ada:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logHanya profil yang dihentikan yang boleh tersambung ulang, dan sesi lain harus mempertahankan baik proses maupun rutenya. Jika dua profil dimulai ulang, rantai Anda berjalan paralel di suatu tempat yang tidak Anda duga.
Apa yang tidak boleh dilakukan pengawas
Pengawas yang memulai ulang semuanya setiap kali ada yang gagal terlihat sehat saat pengujian dan menyebabkan gangguan di jendela pemeliharaan. Mulai ulang per profil, jangan pernah global.
Utamakan klien yang terpelihara ketika gateway menawarkan satu untuk protokol yang sama, dan jangan pernah menuliskan kata sandi di skrip atau memberikannya di baris perintah, karena berkas profil sudah menyimpan rahasianya. Jika sebuah tugas harus berjalan sebagai pengguna biasa setelah tunnel naik, turunkan hak istimewa dari dalam skrip alih-alih menjalankan seluruh rantai di bawah akun itu. Terakhir, baca ulang rute setelah sambung ulang, karena profil bisa kembali dengan alamat yang ditetapkan berbeda dan meninggalkan rute usang yang tidak akan pernah dilihat probe mana pun yang diarahkan ke alamat tunnel.