Bagaimana saya menjalankan skrip setelah OpenVPN berhasil terhubung?

50

Bagaimana saya bisa mengaitkan skrip ke OpenVPN sehingga ia berjalan ketika VPN terhubung dengan sukses?

Oxwivi
sumber
Dalam kasus klien saya kira? Perangkat lunak apa yang Anda gunakan? OpenVPN, atau pembungkus (mis. NetworkManager)?
Lekensteyn
@Lekensteyn, pembungkus network-manger-openvpn.
Oxwivi

Jawaban:

62

network-manager-openvpntidak menyediakan fungsi seperti itu, Anda harus menggunakan openvpnsecara langsung.

Lewati --script-security 2 --up /path/to/your/scriptketika menghubungkan. Jika Anda menggunakan file konfigurasi yang terletak di /etc/openvpn/, tambahkan baris berikutnya ke file konfigurasi Anda:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Dari manual OpenVPN :

--script-security level [metode]
              Arahan ini menawarkan kontrol tingkat kebijakan atas penggunaan OpenVPN
              program dan skrip eksternal. Nilai level yang lebih rendah lebih banyak
              nilai restriktif dan lebih tinggi lebih permisif. Pengaturan untuk
              tingkat:

              0 - Benar-benar tidak ada panggilan program eksternal.
              1 - (Default) Hanya panggil executable bawaan seperti ifconfig,
              ip, rute, atau netsh.
              2 - Mengizinkan pemanggilan executable bawaan dan yang ditentukan pengguna
              skrip
              3 - Mengizinkan kata sandi diteruskan ke skrip melalui lingkungan
              variabel (berpotensi tidak aman).
       --up cmd
              Perintah Shell dijalankan setelah perangkat TUN / TAP yang berhasil dibuka (pra
              --Pengubah UID pengguna). Script atas berguna untuk menentukan
              perintah rute yang merutekan lalu lintas IP yang ditujukan untuk pribadi
              subnet yang ada di ujung koneksi VPN ke
              terowongan.
Perintah Eksekusi Skrip
       --up Dieksekusi setelah ikatan TCP / UDP mengikat dan TUN / TAP terbuka.
       --down Dieksekusi setelah TCP / UDP dan TUN / TAP ditutup.

Ada lebih banyak acara untuk eksekusi skrip, yang dapat ditemukan di halaman manual .

Buat /etc/openvpn/up.sh, dan berikan izin eksekusi (misalnya, 755 atau 700). Contoh konten untuk menambahkan alamat dan rute IPv6 (ditampilkan untuk tujuan pendidikan, jangan menyalinnya langsung):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Perhatikan bahwa upskrip ini dijalankan sebagai root. Jika Anda belum menentukan Userdan Groupmenetapkan, OpenVPN akan menjalankan skrip seperti downsebagai root juga.

Lekensteyn
sumber
Jika Anda tidak tahu bagaimana cara menggunakan openvpn secara langsung, tambahkan rincian konfigurasi Anda saat ini: Jenis koneksi (misalnya sertifikat X509), port Gateway, kompresi LZO, kekuatan TCP, penggunaan perangkat tap, cipher, HMAC, dan TLS. Sebutkan pengaturan IP Anda juga jika tidak otomatis. Untuk privasi Anda, tinggalkan alamat Anda yang sebenarnya.
Lekensteyn
Oke, saya memutuskan untuk menggunakan OpenVPN secara langsung (dan ya, saya punya file .conf), tetapi apakah itu akan secara otomatis menyambung kembali jika koneksi terputus? Dan bagaimana saya membuatnya terhubung secara otomatis setiap kali ada koneksi internet? Dan akhirnya, saya tidak mengerti di mana saya harus menambahkan baris yang Anda sebutkan dalam jawaban.
Oxwivi
Saya telah memperluas jawaban untuk digunakan openvpnsecara langsung. Ketika mengatur server, saya perhatikan bahwa OpenVPN akan mencoba untuk menyambung kembali ketika server turun. Tidak yakin apakah OpenVPN terus mencoba ketika antarmuka jaringan Anda turun.
Lekensteyn
Masalah saya bukan ketika antarmuka jaringan turun - ia mencoba menyambung kembali ketika koneksi internet terputus dan kembali. Saya hanya ingin terhubung ke VPN setiap kali saya mendapatkan koneksi internet.
Oxwivi
Oh, dan apakah skrip berlaku untuk semua koneksi VPN? Dan tolong beri tag @Oxwivi saat membalas, saya tidak akan diberi tahu sebaliknya.
Oxwivi
5

Untuk pertanyaan: "Bagaimana saya bisa mengaitkan skrip ke OpenVPN sehingga ia berjalan ketika VPN terhubung dengan sukses?" Saya ingin menunjukkan bahwa Lekensteyn memberikan jawaban yang sangat baik . Tetapi, pada saat jawabannya dikomposisikan, ia tidak memiliki sedikit kejelasan tentang bagaimana argumen baris perintah openvpn harus disediakan untuk memulai openvpn pada mesin ubuntu, terutama sehingga ia bekerja sama setelah reboot.


Argumen baris perintah Openvpn di Ubuntu:

Secara alami, seseorang dapat memulai openvpn dari baris perintah dengan opsi hukum apa pun yang tersedia. Tetapi, pada mesin Ubuntu, jika seseorang ingin memulai openvpn dengan argumen baris perintah yang sama setelah reboot, mereka harus mempertimbangkan untuk mengedit file /etc/default/openvpn. Periksa baris berikut:

# Optional arguments to openvpn's command line
OPTARGS="" 

Dari halaman manual komunitas openvpn pada--script-security

--script-tingkat keamanan
    Arahan ini menawarkan kontrol tingkat kebijakan atas penggunaan eksternal OpenVPN 
    program dan skrip. Nilai level yang lebih rendah lebih membatasi, lebih tinggi
    nilai lebih permisif. Pengaturan untuk level:
0 - Benar-benar tidak ada panggilan program eksternal. 
1 - (Default) Hanya panggil executable bawaan seperti ifconfig, ip, route,
atau netsh. 
2 - Mengizinkan pemanggilan executable bawaan dan skrip yang ditentukan pengguna. 
3 - Mengizinkan kata sandi diteruskan ke skrip melalui variabel lingkungan
(berpotensi tidak aman).

Rilis OpenVPN sebelum v2.3 juga mendukung flag metode yang menunjukkan caranya 
OpenVPN harus memanggil perintah dan skrip eksternal. Ini bisa berupa eksekusi
atau sistem. Pada OpenVPN v2.3, bendera ini tidak lagi diterima. Di sebagian besar * nix
lingkungan pendekatan execve () telah digunakan tanpa masalah.

Beberapa arahan seperti --up memungkinkan opsi untuk diteruskan ke skrip eksternal.
Dalam kasus ini pastikan nama skrip tidak mengandung spasi apa pun atau 
parser konfigurasi akan tersedak karena tidak dapat menentukan di mana skrip 
nama berakhir dan opsi skrip dimulai.

Digabung dengan bagian yang disingkat pada --up

--up cmd
    Jalankan perintah cmd setelah perangkat TUN / TAP berhasil terbuka (perubahan pra-pengguna UID).
    cmd terdiri dari path ke skrip (atau program yang dapat dieksekusi), secara opsional diikuti
    dengan argumen. Jalur dan argumen dapat dikutip secara tunggal atau ganda dan / atau
    melarikan diri menggunakan backslash, dan harus dipisahkan oleh satu ruang atau lebih.

Contoh:

Di komputer saya dengan server.conf openpvn, saya memiliki baris berikut di /etc/default/openvpnfile saya :

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Secara kebetulan, nat.sh mengatur terjemahan alamat jaringan untuk merutekan lalu lintas jaringan pribadi dari klien openvpn ke internet publik; yang bagus untuk ketika seseorang tidak mempercayai jalur akses WIFI publik.


Selain memungkinkan untuk memulai kembali seperti yang diharapkan setelah reboot, kapan /etc/openvpn/[client or server].confdan /etc/default/openvpnfile dikonfigurasikan dengan benar, openvpn dapat dimulai atau dihentikan dengan:

sudo service openvpn start
sudo service openvpn stop

Opsi berguna lainnya yang tersedia untuk service openvpndisertakan cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.

Keith Reynolds
sumber
3

Karena itu adalah utas yang cukup lama saya tidak yakin apakah masih menarik. Jika Anda masih ingin menggunakan NetworkManager untuk terhubung ke VPN, Anda dapat menambahkan aturan udev sederhana seperti itu:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

Ini harus menjalankan skrip apa pun setelah VPN dibuat.

Thomas
sumber
1

Saya menemukan jawaban dalam penelitian saya untuk memecahkan masalah ini dan saya menemukan bahwa solusi terbaik adalah (menggunakan server openvpn) sebagai berikut:

Buat skrip untuk dieksekusi:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Tambahkan baris berikut ke dalam konfigurasi openvpn (biasanya /etc/openvpn/server.conf). Dalam jawaban di atas digunakan atas dan ke bawah, yang digunakan ketika server mulai (restart). Directive client-connect (and client-disconnect) digunakan ketika klien terhubung (terputus).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
CozC
sumber
Bagaimana Anda memasukkan nama konfigurasi klien dalam file log?
callisto