Dump jadual penghalaan ialah diagnostik paling kurang berguna dalam penyelesaian masalah VPN dan yang paling kerap ditampal. Empat puluh baris awalan memberitahu anda apa yang mesin boleh lakukan, bukan apa yang dilakukannya untuk permintaan yang gagal. Mekanisme yang anda benar-benar mahu ialah carian: memandangkan sumber ini dan destinasi ini, peraturan mana yang sepadan, jadual mana yang dirujuk, dan antara muka serta hop seterusnya mana yang keluar. Mulakan dengan satu destinasi dan satu sumber, kemudian baca jadual dengan soalan itu di tangan, dan output yang sama menjadi bukti dan bukannya bunyi bising.

Jadual ialah satu set calon, bukan keputusan

Setiap entri menerangkan awalan dan apa yang perlu dilakukan dengan trafik yang sepadan dengannya: hantar ke antara muka, serahkan kepada hop seterusnya, atau buang. Tiada apa dalam senarai itu disusun mengikut niat, dan entri yang kelihatan paling khusus kepada manusia bukan selalu yang dipilih oleh kernel, kerana pemilihan mengikut padanan awalan terpanjang dan, antara awalan yang sama, metrik.

Jadi langkah pertama ialah bertanya kepada kernel dan bukannya membaca senarai. Perintah carian menjawab untuk satu destinasi, dan dengan argumen sumber ia menjawab untuk pasangan tepat yang akan digunakan oleh sambungan yang dimajukan atau diikat:

ip route get 198.51.100.10
ip route get 198.51.100.10 from 10.80.0.25
ip -6 route get 2001:db8:10::40

Setiap alamat di atas ialah contoh dokumentasi. Intinya ialah bentuk jawapan: antara muka, alamat sumber yang dipilih, get laluan, dan jadual dari mana entri itu datang. Jika output itu tidak sepadan dengan antara muka yang anda jangkakan, anda telah menyetempatkan masalah dengan satu perintah, dan tidak ada jumlah pembacaan jadual penuh yang akan memberitahu anda calon mana yang menang.

Carian melalui peraturan, kemudian jadual

Pada Linux keputusan itu dalam dua peringkat. Peraturan dasar dinilai mengikut urutan keutamaan, dan peraturan pertama yang sepadan menamakan jadual untuk dirujuk; jadual itu kemudian melakukan padanan awalan terpanjang. Peraturan boleh sepadan pada sumber, destinasi, tanda tembok api, antara muka atau gabungan, sebab itulah dump jadual utama boleh menjadi tepat sepenuhnya dan tidak relevan sama sekali untuk paket yang anda siasat.

ip rule show
ip route show table all | head -40
ip route show table 100

Jika sesuatu peraturan menghantar trafik dari kumpulan VPN anda ke jadual 100, maka jadual 100 itulah yang penting, dan jadual utama ialah umpan. Ini juga mekanisme di sebalik penghalaan berasaskan sumber pada penghala: destinasi yang sama boleh mempunyai dua jawapan berbeza bergantung pada dari mana paket itu datang, dan hanya carian dengan argumen sumber mendedahkan yang mana terpakai.

IPv6 mempunyai peraturan dan jadualnya sendiri. Reka bentuk yang menjalankan kedua-dua keluarga memerlukan kedua-dua carian, dan jawapan IPv4 yang berfungsi tidak mengatakan apa-apa tentang laluan v6 yang mungkin lebih disukai oleh klien dwi-tindanan.

Apa yang dipasang oleh klien VPN

Klien biasanya tidak menggantikan laluan lalai, kerana itu akan memecahkan laluan luar terowong itu sendiri. Mereka memasang sesuatu yang lebih khusus yang menang mengikut panjang awalan: sepasang separuh-lalai yang meliputi 0.0.0.0/1 dan 128.0.0.0/1 ialah helah klasik, kerana kedua-duanya awalan lebih panjang daripada 0.0.0.0/0 dan bersama-sama meliputi seluruh ruang. Yang lain memasang awalan peribadi tertentu serta peraturan dasar, dan sesetengah menambah tanda supaya hanya trafik terpilih ditangkap.

Sebab itulah "VPN tidak mengubah laluan lalai saya" bukan bukti kegagalan. Semak apa yang sebenarnya ditambahnya, dan sama ada destinasi berkenaan jatuh di dalam awalan itu:

ip route show | grep -E 'tun|wg|ppp|ipsec'
ip route get 10.20.30.40 from 10.80.0.25

Dua separuh-laluan mudah terlepas dalam dump kerana ia tidak kelihatan seperti laluan lalai. Konfigurasi terowong berpecah yang terlupa memasukkan awalan menghasilkan tepat gejala yang anda kejar: aplikasi yang sepatutnya menggunakan terowong itu sebaliknya menyelesaikan dan menyambung secara setempat. Bandingkan awalan yang dipasang dengan destinasi yang benar-benar diperlukan oleh pengguna, bukan dengan alamat yang kebetulan anda uji. Senarai terowong berpecah yang meliputi pelayan fail tetapi bukan penyelesainya menghasilkan sambungan yang menyelesaikan ke alamat awam dan kemudian gagal disahkan, yang kelihatan seperti masalah kata laluan dan sebenarnya masalah laluan.

Laluan luar juga mesti bertahan

Terowong itu sendiri ialah trafik. Paket yang membawa muatan terkapsul pergi ke alamat rakan melalui antara muka fizikal, dan laluan itu tidak boleh dihalakan semula ke dalam terowong. Apabila ia berlaku, anda mendapat kegagalan ciri di mana terowong terbentuk dan kemudian berhenti menyalurkan trafik, kerana pengangkutan untuk terowong itu kini berada di dalam terowong.

Semak alamat rakan seperti anda menyemak destinasi dalaman, dan sahkan ia menyelesaikan ke antara muka fizikal dan bukannya terowong:

ip route get 203.0.113.10
traceroute -n -m 5 203.0.113.10

Laluan rekursif, peraturan dasar yang menangkap rakan, atau laluan lalai yang digantikan oleh klien terowong penuh ialah tiga punca biasa. Ketiga-tiganya kelihatan dalam carian luar, dan tiada satu pun kelihatan dalam dump jadual utama yang diambil selepas kejadian.

Apa yang output penghalaan tidak dapat beritahu anda

Carian yang betul bermakna kernel akan menghantar paket ke tempat yang munasabah. Ia tidak bermakna tembok api membenarkannya, dasar IPsec meliputinya, peraturan NAT menterjemahkannya, atau pihak jauh mempunyai laluan balik. Setiap satu daripadanya ialah peringkat kemudian, dan nota pemajuan strongSwan menerangkan rantaian yang perlu dilalui oleh paket di kedua-dua hujung.

Ia juga tidak mengambil kira pengikatan pada peringkat aplikasi. Sesuatu proses boleh mengikat kepada antara muka, menetapkan tanda, atau menggunakan penyelesainya sendiri dan menyambung dengan nama yang menyelesaikan secara berbeza daripada yang anda uji. Apabila carian betul dan sambungan masih gagal, soalan seterusnya ialah proses mana yang melakukannya dan sama ada proses itu melihat jadual yang sama dengan anda.

Jadi pastikan diagnosis teratur: namakan destinasi dan sumber, jalankan carian, baca hanya jadual dan peraturan yang dinamakan oleh carian, kemudian uji peringkat seterusnya. Urutan itu mengekalkan siasatan penghalaan dalam beberapa minit dan meninggalkan rekod yang boleh diikuti orang lain, yang tidak pernah dilakukan oleh jadual yang ditampal.

Artikel berkaitan