Mengapa laluan berkos sama menjadikan kerosakan VPN sukar dilihat
Apabila beberapa terowong berkongsi kos yang sama, setiap aliran boleh memilih yang berbeza. Ping yang berjaya tidak memberitahu apa-apa tentang laluan yang sebenarnya digunakan aplikasi anda.
Seorang pengguna melaporkan bahawa aplikasi dalaman berfungsi dari satu mesin dan gagal dari mesin lain, sedangkan ping yang anda jalankan dari gateway berjaya dalam kedua-dua kes. Dengan beberapa terowong berkos sama, itu bukan percanggahan. Setiap aliran diletakkan pada hop seterusnya sendiri, jadi siasatan anda dan sesi pengguna mungkin hanya menggunakan laluan yang berbeza. Panduan di bawah menghasilkan semula pilihan itu sebelum apa-apa diubah.
Satu ping, beberapa laluan mungkin
Apabila sesuatu laluan mempunyai lebih daripada satu hop seterusnya pada kos yang sama, penghala mesti memilih satu bagi setiap paket. Kebanyakan pelaksanaan melakukan hash pada medan paket, biasanya alamat sumber dan destinasi bersama protokol dan port, supaya respons kekal pada laluan yang sama. Aplikasi berbeza, atau pun sambungan berbeza daripada satu aplikasi, menghasilkan hash yang berbeza.
Itulah sebabnya diagnostik dari gateway membuktikan begitu sedikit. Siasatan gateway sendiri mempunyai alamat dan port sendiri, dan oleh itu hash sendiri. Ia mungkin mendarat pada terowong yang sihat sementara pengguna terus mendarat pada yang rosak.
Bagaimana platform memilih hop seterusnya
Hasilkan semula pilihan itu daripada menekanya. Tanya kernel laluan mana yang akan digunakan untuk sumber dan destinasi yang sama seperti sesi yang gagal. Carian itu merangkumi medan yang diabaikan oleh carian destinasi biasa. Jalankannya juga dari klien yang berfungsi dan bandingkan kedua-dua jawapan:
ip route get 10.20.5.7 from 10.20.0.14
Keluaran iproute2 yang lebih baharu juga menerima protokol dan port destinasi, yang penting apabila hash merangkuminya. Bandingkan keluaran itu dengan carian yang sama dari klien yang berfungsi, dan perbezaannya ialah bukti yang anda hilang.
| Observation | Likely cause | First check |
|---|---|---|
| Ping works, application fails | A different flow hash selects another tunnel | Per-flow lookup from the client's address |
| Some users fail, others do not | One tunnel lacks a prefix or selector | Compare both tunnels' installed routes |
| Fails only at larger sizes | Tunnels have different effective MTU | Probe the same size over each path |
| Fails after a reconnect | Stateful asymmetry between paths | Session state on both gateways |
Ikut aliran yang gagal, bukan jadual laluan
Jadual laluan menyenaraikan kedua-dua terowong dan kelihatan betul mengikut takrifan. Persoalannya ialah apa yang setiap terowong lakukan dengan paket setelah dipilih. Sahkan kedua-duanya membawa awalan terlindung yang sama, kebenaran pemajuan yang sama dan laluan balik yang sampai ke klien yang sama.
Perhatikan peranti berkeadaan di tengah. Jika permintaan keluar melalui satu terowong dan balasan kembali melalui yang lain, firewall atau NAT yang tidak pernah melihat aliran asal akan menggugurkannya. Kedua-dua terowong memajukan trafik dengan betul, dan sambungan masih gagal.
Periksa juga MTU bagi setiap laluan. Laluan dengan penkapsulan tambahan mengecilkan saiz yang boleh digunakan, dan pemindahan yang berjaya pada satu terowong tersekat pada yang lain tepat pada saiz di mana yang lebih kecil patah.
Bandingkan satu laluan pada satu masa
Di mana reka bentuk membenarkan penyelenggaraan, keluarkan satu terowong daripada perkhidmatan dan ulangi tugas pengguna. Jika kegagalan hilang, masalah itu milik laluan yang anda keluarkan, dan langkah seterusnya ialah membandingkan konfigurasinya dengan jirannya dan bukannya memeriksa semula jadual laluan.
Bandingkan aplikasi sebenar, bukan ping berulang. Catat sama ada kegagalan mengikut hop seterusnya tertentu, saiz paket atau peralihan selepas menyambung semula, kerana ketiga-tiga corak itu menunjuk kepada pembaikan yang berbeza.
Akhir sekali, catat mengapa laluan dianggap setara dan bagaimana kegagalan sepatutnya mengeluarkan salah satunya daripada perkhidmatan. Multipath hanya selamat apabila laluan benar-benar boleh ditukar ganti, dan itu ialah pernyataan reka bentuk yang wajar diperiksa dan bukan diandaikan.