Mengapakah Terowong VPN Kedua Memecahkan Yang Pertama?
Klien VPN kedua memasang dua laluan separa lalai dan terowong pertama menjadi gelap: baca laluan mana yang menang, kemudian pisahkan ikut profil, jadual atau ruang nama.
Memasang klien VPN kedua untuk mencapai satu rangkaian pelanggan ialah cara biasa perkara ini bermula, dan terowong pertama menjadi gelap semasa kedua-dua klien melaporkan kejayaan. Setiap klien memasang laluan lalai, yang kedua lebih khusus, dan kernel kini mengikutinya untuk segala-galanya kecuali sambungan luar terowong pertama itu sendiri. Tiada apa-apa yang ranap dan tiada profil yang salah. Satu laluan menggantikan yang lain, dan penyelesaiannya ialah memutuskan terowong mana yang harus memiliki laluan lalai.
Gejalanya: klien kedua menang secara senyap
OpenVPN: pilihan redirect-gateway def1 tidak menulis ganti 0.0.0.0/0. Ia menambah 0.0.0.0/1 dan 128.0.0.0/1: bersama-sama kedua-duanya merangkumi setiap alamat IPv4, dan setiap awalan mengalahkan laluan lalai biasa dari segi panjang. Laluan lalai asal kekal dalam jadual dan tidak lagi digunakan untuk trafik biasa, dan laluan hos ke pelayan VPN menghalang terowong daripada menangkap paket luarnya sendiri. Kedua-dua klien melakukan ini, dan yang kedua hanya memasang pasangannya kemudian.
Sebab itulah terowong pertama kelihatan mati dan bukan terputus. Antara mukanya naik, saluran kawalannya hidup, dan tiada trafik aplikasi lagi mencapainya. Aduan sebaliknya mempunyai push yang sama hilang: telefon yang bersambung tetapi tidak menghantar apa-apa biasanya bercakap dengan pelayan yang tidak pernah mengumumkan redirect-gateway, jadi peranti itu menyimpan laluan lalainya sendiri dan hanya mencapai kolam.
Ambil syot routing sebelum dan selepas klien kedua bersambung. Dua separuh laluan yang muncul dalam jadual ialah keseluruhan perubahan, dan kedua-duanya menjelaskan kedua-dua aduan. Tiada apa-apa lagi dalam jadual perlu bergerak untuk gejala itu muncul. Sebab itulah membuang klien kedua memulihkan yang pertama serta-merta.
Baca terowong mana yang benar-benar menang
Jangan simpulkan pemenang daripada urutan klien dimulakan atau daripada ikon dalam dulang. Tanya kernel laluan mana yang akan digunakannya untuk destinasi di luar kedua-dua rangkaian peribadi, dan baca antara muka yang dikembalikan.
ip route show
ip route get 198.51.100.24
route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.24
Dua yang pertama ialah jawapan Linux dan dua yang terakhir ialah padanan Windows. Jalankan kedua-duanya semasa kedua-dua terowong naik, kemudian putuskan satu dan jalankan semula. Perbezaan antara kedua-dua output ialah fakta yang anda perlukan sebelum memilih penyelesaian, dan ia mengambil masa lebih singkat daripada membaca log mana-mana klien.
Catatkan hasilnya, termasuk nama antara muka dan awalan yang sepadan. Tiket yang mengatakan VPN kedua memecahkan yang pertama ialah penerangan gejala, bukan kenyataan penghalaan yang boleh diambil tindakan oleh sesiapa. Pencarian itu mengubahnya menjadi fakta yang boleh dihasilkan semula oleh jurutera seterusnya dengan satu arahan.
Windows: halang satu profil daripada memiliki laluan lalai
Windows menyimpan profil tersimpan, dan klien terbina dalam membenarkan satu bergantung pada yang lain supaya yang pertama naik secara automatik apabila yang kedua mendail. Profil yang paling baru bersambung cenderung mengekalkan laluan lalai, jadi pemilik praktikal ialah dail terakhir dan bukan yang pertama. Beri setiap profil laluan push-nya sendiri dan hidupkan split tunneling untuk profil yang tidak sepatutnya memiliki laluan lalai.
Set-VpnConnection -Name "Contoso" -SplitTunneling $true
rasdial Contoso
Split tunneling mengubahnya: hanya awalan yang ditolak pelayan masuk ke dalam jadual, yang membiarkan laluan lalai pada terowong pertama. Reka bentuk itu masih gagal jika kedua-dua pelayan menolak laluan lalai, kerana ketika itu sambungan terakhir menang dan tiada tetapan sebelah klien mengubahnya. Betulkan push sebelah pelayan atau terima satu pemilik.
Profil yang dicetuskan aplikasi ialah ciri lain dan wajar diketahui: profil Windows boleh bermula apabila fail boleh laku bernama dilancarkan, dengan penapis trafik menentukan apa yang dibawanya. Ini tetapan profil dan bukan peraturan firewall, dan ia menyelesaikan masalah yang berbeza daripada konflik laluan lalai.
Linux: jauhkan terowong kedua daripada jadual utama
Menjalankan dua contoh openvpn --config pada satu mesin meletakkan kedua-dua klien dalam jadual yang sama, dan tiga pilihan memisahkan mereka dengan pengasingan yang meningkat. Yang paling ringan ialah menghalang klien kedua daripada menyunting jadual sama sekali, dengan route-nopull dan laluan eksplisit, atau skrip route-up yang memasang hanya apa yang anda maksudkan. Kemudian terowong kedua membawa tepat awalan yang anda namakan dan tiada yang lain. Kemudian anda memutuskan awalan mana pergi ke mana dan bukannya menemukannya kemudian.
Penghalaan dasar ialah pilihan pertengahan. Satu peraturan memilih jadual berasingan untuk satu alamat sumber atau tanda firewall, dan jadual itu membawa laluan terowong kedua. Penapisan laluan songsang ialah perangkap di sini, kerana balasan yang tiba pada antara muka berbeza daripada yang akan dipilih jadual akan digugurkan, jadi semak tetapan rp_filter sebelum membuat kesimpulan terowong itu rosak.
ip rule add from 10.44.7.0/24 table 100
ip route add default dev tun1 table 100
sysctl net.ipv4.conf.all.rp_filter
Ruang nama rangkaian ialah pilihan paling berat dan paling bersih. Mulakan klien kedua di dalam ip netns, berikannya pasangan veth, dan masuk ke ruang nama itu untuk menggunakannya. Gangguan hilang kerana setiap ruang nama memiliki jadualnya sendiri dan bukannya berkongsi satu, yang berbaloi dengan persediaan tambahan apabila kedua-dua terowong mesti kekal naik selama berminggu-minggu.
Mengikut aplikasi, dan rantaian sebagai masalah berasingan
Kadangkala hanya satu program patut menggunakan terowong kedua. Pada Linux, penghalaan dasar mengikut pengguna, cgroup atau port mencapai hasil itu, dan satu destinasi boleh dipin pada antara muka tanpa menyentuh laluan lalai langsung. Aplikasi yang memin soketnya pada satu antara muka tidak pernah merujuk jadual penghalaan, jadi pelancar boleh terus menggunakan penyesuai fizikal sehingga satu alamat dipilih dalam tetapannya sendiri.
Rantaian ialah operasi berbeza daripada menjalankan dua terowong bersebelahan. Merantai A di atas B bermakna alamat pelayan dalam mesti boleh dicapai dari dalam terowong luar. Klien luar juga tidak boleh menyangka paket tersulit klien dalam sebagai kebocoran. Satu klien di dalam mesin maya ialah versi kasar tetapi boleh dipercayai; kedua-duanya pada satu hos memerlukan kerja penghalaan di atas serta laluan luar menuju pelayan dalam yang tidak pernah masuk ke terowong dalam.
Tuliskan pemilik laluan lalai, senarai awalan yang dibawa setiap terowong dan laluan DNS. Ketiga-tiga fakta itu mengubah insiden seterusnya menjadi pencarian dan bukannya penyiasatan.