Skrip hook dipicu, membaca ppp0, dan menerapkan rute ke antarmuka mana pun yang memiliki nama itu pada saat tersebut. Kadang itu tunnel yang Anda maksud; kadang itu sesi yang tersambung semenit sebelumnya. Penyambungan ulang berikutnya memindahkan nomornya, dan skrip yang sama diam-diam mengonfigurasi tautan yang salah. Perbaikannya adalah mengambil antarmuka dari pemanggilan yang baru saja berjalan, dan membawa profil yang dimaksud bersama antarmuka itu.

Ikuti satu sesi dari opsi hingga ke hook

Mulailah di tempat sesi dibuat. xl2tpd menjalankan pppd dengan berkas opsi yang dinamai oleh pppoptfile tunnel tersebut, jadi plugin, nomor unit, dan penanda profil apa pun ditentukan di sana, bukan di berkas global. Manajer koneksi dapat membuat opsinya sendiri, yang berarti menyunting /etc/ppp/options bukan bukti bahwa tunnel yang Anda pedulikan berubah. Saat tautan menyala, pppd menjalankan skrip pemberitahuan dari dispatcher distribusi. Skrip tersebut menerima nama antarmuka sebagai argumen pertama, dan penanda profil sebagai argumen keenam.

Lingkungan membawa fakta yang sama dengan nama seperti IFNAME dan PPP_IPPARAM, tetapi ketersediaannya bergantung pada dispatcher yang terpasang. Baca dispatcher sebelum mengandalkan variabel: sebagian distribusi mempertahankan urutan argumen upstream, sebagian lain menyaring lingkungan sebelum memanggil skrip Anda. Skrip yang hanya memakai $1 dan argumen keenam bekerja pada kedua pengaturan.

Baca antarmuka dari pemanggilan

Hook tradisional menerima antarmuka lebih dulu. Nilai posisional itu adalah pengenal antarmuka yang menjelaskan sesi yang memicu skrip. Simpan di variabel di bagian atas, lalu gunakan variabel itu untuk rute, aturan firewall, dan pembongkaran.

ipparam office-vpn

Lampirkan penanda profil di tempat opsi didefinisikan, bukan di skrip. Dengan baris itu di berkas opsi tunnel, setiap sesi yang dibuat dari berkas tersebut membawa office-vpn sebagai argumen keenamnya. Skrip dapat bercabang berdasarkan penanda sambil tetap bertindak pada antarmuka sebenarnya. Pisahkan keduanya di dalam kode, karena penanda bersifat stabil dan antarmuka dialokasikan per sesi.

Minta nama hanya bila penolakan memang benar

Nama tetap tampak lebih sederhana daripada membaca argumen, tetapi mengubah perilaku kegagalan. Opsi unit meminta nomor untuk koneksi keluar, dan pppd beralih ke alokasi dinamis ketika unit itu sudah terpakai. Tidak ada apa pun dalam hasil itu yang mencadangkan ppp0 untuk profil Anda.

ifname ppp-office

Opsi ifname berperilaku berbeda: bila nama yang diminta sudah dipakai atau tidak dapat diberikan, pppd keluar alih-alih memilih nama lain. Itu pilihan kebijakan, bukan penggantian nama kosmetik. Gunakan bila instans kedua dari profil yang sama secara bersamaan harus ditolak, dan pastikan pppd yang terpasang serta manajer koneksi Anda meneruskan opsi itu.

Apa pun caranya, nama yang dilihat skrip itulah yang harus ditangani. Nama yang dikonfigurasi tidak menghapus kebutuhan membaca pemanggilan, karena sesi yang dimulai ulang masih dapat menyodorkan nama berbeda dari sebelumnya.

Cocokkan pembongkaran dengan sesi yang Anda konfigurasi

Rute dan aturan firewall hidup lebih lama daripada skrip yang membuatnya, jadi pembongkaran harus menghapus tepat objek yang dimiliki sesi. Tandai aturan dengan penanda profil serta antarmuka, dan hapus berdasarkan tanda itu. Jika dua tunnel dapat menyala bersamaan, menghapus semua yang menyebut ppp adalah cara satu pemutusan merusak koneksi lainnya.

Uji kasus yang membocorkan bug: nyalakan sesi PPP kedua saat yang pertama masih tersambung, lalu sambungkan ulang yang pertama dan amati antarmuka mana yang dilaporkan hook. Jalan yang berhasil dengan satu sesi tidak membuktikan apa pun tentang alokasi nama. Ulangi dengan VPN dihentikan untuk memastikan pembongkaran tidak meninggalkan rute lama.

Simpan penanda, antarmuka, dan jalur hook di catatan penerapan. Bila nomor berubah setelah reboot, ketiga nilai itu menjelaskan mengapa skrip berperilaku berbeda tanpa penyuntingan konfigurasi apa pun.

Artikel terkait