Penghalaan dasar menjawab soalan yang berbeza daripada yang diajukan oleh kebanyakan nota penyelesaian masalah. Jadual utama menyatakan ke mana sesuatu destinasi pergi; peraturan dasar menyatakan jadual mana yang dirujuk sama sekali, dan ia boleh memutuskannya daripada alamat sumber, tanda paket, atau antara muka tempat sesuatu paket tiba. Apabila terowong berkelakuan tidak konsisten, set peraturan selalunya menjadi punca dan jadual penghalaan selalunya bukan.

Peraturan memilih jadual, kemudian jadual memilih laluan

Setiap peraturan membawa keutamaan, syarat padanan dan jadual sasaran. Kernel menelusuri peraturan mengikut urutan keutamaan dan berhenti pada padanan pertama, kemudian melakukan carian awalan terpanjang biasa dalam jadual itu. Peraturan yang menunjuk kepada jadual kosong jatuh kepada apa yang dipilih peraturan seterusnya, dan begitulah peraturan yang ditulis dengan teliti boleh kelihatan tidak melakukan apa-apa.

Itulah sebabnya membuang jadual utama jarang menjelaskan klien VPN yang berfungsi. Klien biasanya menyisipkan peraturan pada nombor keutamaan rendah, jauh sebelum peraturan lalai jadual utama, jadi paket itu tidak pernah sampai ke laluan yang anda renung. Menurunkan metrik dalam jadual utama tidak mengubah apa-apa bagi trafik yang sudah dialihkan.

Peraturan juga boleh menjadikan awalan lubang hitam atau tidak dapat dicapai dengan sengaja. Sesetengah klien menambah peraturan sedemikian sebagai suis keselamatan, dan ketika itu penurunan kelihatan seperti terowong rosak dan bukan terowong yang dikonfigurasikan.

Baca set peraturan sebagai jujukan, bukan sebagai senarai

Cetak peraturan dengan keutamaan mereka dan jadual yang mereka rujuk, kemudian cetak setiap jadual yang membawa laluan lalai atau laluan terowong. Urutan ialah bahagian yang penting, dan itulah bahagian yang biasanya ditinggalkan oleh tangkapan skrin:

ip rule show
ip route show table all | sed -n '1,60p'
ip route get 198.51.100.20 from 10.8.0.2
ip route get 198.51.100.20 from 10.8.0.2 mark 0x1

Dua arahan terakhir ialah yang mengubah teori menjadi pemerhatian, kerana ia bertanya apa yang kernel akan lakukan untuk sumber dan tanda itu. Jika jawapan berubah apabila tanda berubah, peraturan berasaskan tanda sedang berkuat kuasa dan mana-mana ujian yang meninggalkan tanda sedang menguji paket yang berbeza. Sambungan luar wajar mendapat peraturan sendiri. Terowong yang menyalurkan semua trafik melalui dirinya sendiri mesti mengecualikan alamat titik akhir yang disambungnya, jika tidak paket yang disulitkan dihantar kembali ke terowong yang baru ditinggalkannya. Kebanyakan klien menyisipkan pengecualian itu secara automatik, dan set peraturan yang diedit dengan tangan ialah tempat ia hilang.

Tanda dan soket: dua cara klien membahagikan trafik

Sesetengah klien menanda paket dalam firewall dan menambah peraturan yang sepadan dengan tanda itu. Yang lain menggunakan penghalaan di peringkat soket, meletakkan laluan pada soket sebelum ia bersambung. Yang pertama kelihatan dalam ip rule; yang kedua tidak, dan ia tidak akan muncul dalam carian umum.

Jika program ujian berkelakuan berbeza daripada aplikasi yang sepatutnya diwakilinya, semak sama ada aplikasi meletakkan tanda atau mengikat kepada peranti. Perbezaan itu bukan misteri setelah mekanisme dinamakan, dan ia menjelaskan mengapa curl dari shell dan tab pelayar boleh mengambil laluan berbeza pada mesin yang sama. Kedua-dua teknik ialah penghalaan dasar dalam erti kata luas: ia memilih laluan dengan sesuatu selain destinasi. Kedua-duanya tidak membenarkan trafik, dan kedua-duanya tidak menggantikan peraturan firewall atau kelayakan yang dijangka oleh rakan setara.

Jejaki pemilikan sebelum menambah peraturan lain

Peraturan dipasang oleh sesuatu. Klien VPN, pengurus rangkaian dan skrip yang ditulis dengan tangan masing-masing boleh menambah peraturan semasa permulaan, dan logik sambung semula boleh meninggalkan set sebelumnya. Dua peraturan lapuk daripada profil terdahulu akan terus mengarahkan trafik lama selepas profil itu dipadamkan.

Cari proses mana yang memiliki peraturan itu daripada keutamaan dan bentuknya, dan semak sama ada pemilik itu menulis semula set pada setiap sambungan. Jika ya, peraturan manual yang ditambah hari ini hilang esok, dan pembetulan itu terletak dalam konfigurasi klien dan bukan dalam fail sejarah shell. Mengosongkan seluruh set peraturan untuk ujian ialah jalan pintas yang menggodakan dengan kos yang boleh dijangka: ia turut membuang peraturan yang diperlukan klien untuk memastikan terowongnya sendiri berfungsi. Padam satu peraturan pada satu masa, atau uji pada mesin yang boleh anda but semula.

Buktikan skop dengan dua aliran, bukan satu

Pembetulan hanya disahkan oleh aliran yang sepatutnya terjejas dan aliran yang tidak sepatutnya. Pilih destinasi yang dihala oleh dasar ke dalam terowong, dan satu yang mesti kekal di luar, kemudian bandingkan carian dan tangkapan untuk kedua-duanya:

ip route get 198.51.100.20 from 192.0.2.44
ip route get 198.51.100.21 from 192.0.2.44
tcpdump -ni any host 198.51.100.21 and port 443

Apabila kedua-dua carian memulangkan antara muka yang berbeza, peraturan itu melakukan sesuatu. Apabila ia memulangkan antara muka yang sama, peraturan itu sepadan lebih luas daripada yang dimaksudkan, dan itulah kegagalan yang secara senyap menghantar seluruh subnet melalui terowong yang dimaksudkan untuk satu aplikasi.

Catat keutamaan peraturan dan perkhidmatan pemilik dalam tiket, bersama dua alamat ujian. Orang seterusnya kemudian mempunyai pasangan yang boleh dihasilkan semula dan bukan penerangan gejala, dan boleh menyatakan dalam satu minit sama ada penghalaan dasar masih berkuat kuasa.

Artikel berkaitan