Sesuatu aplikasi mengikat pada alamat VPN, dan sambungan tetap keluar melalui laluan lalai biasa. Tiada apa yang gagal dalam bind; ia melakukan tepat apa yang dilakukan oleh bind. Mengikat socket pada alamat tempatan memilih alamat sumber yang kernel letakkan dalam pengepala. Ia tidak memasang laluan, dan ia tidak mencipta peraturan dasar yang menghantar paket yang membawa sumber itu ke terowong tertentu.

Selebihnya runbook ini ialah urutan semakan yang saya gunakan, bersama arahan yang menghasilkan setiap pemerhatian.

Apa yang sebenarnya ditentukan oleh bind

Bind memberikan alamat tempatan kepada socket. Kernel kemudian menjalankan carian laluan yang sama seperti yang akan dijalankannya jika tidak, kecuali peraturan dasar mengubah jadual mana yang dibaca oleh carian itu.

Itulah sebabnya paket boleh keluar dengan alamat sumber VPN pada antara muka fizikal. Di sebelah sana ia tiba dari julat peribadi yang rangkaian tidak pernah jangkakan pada laluan itu, trafik balik tiada laluan untuk kembali, dan sambungan tergantung atau ditetapkan semula.

Rujukan socket IP Linux mendokumenkan semantik bind. Separuh penghalaan tinggal dalam ip-rule dan ip-route, dan kedua-duanya halaman manual berasingan atas sebab tertentu.

Sahkan alamat itu milik ruang nama ini

Alamat yang boleh anda ikat mesti wujud pada antara muka di dalam ruang nama rangkaian tempat aplikasi berjalan. Alamat rakan, alamat gateway, atau alamat yang hanya wujud dalam ruang nama lain tidak boleh diikat, dan panggilan gagal dengan EADDRNOTAVAIL.

ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>

Jalankan ketiga-tiganya dalam konteks yang sama seperti aplikasi: ruang nama yang sama, dan pengguna yang sama jika boleh diperoleh. Gambar rajah net30 lama bukan bukti alamat mana yang diberikan topologi semasa anda kepada klien. Baca antara muka yang benar-benar aktif.

Baca carian untuk sumber dan destinasi itu

Satu arahan menjawab soalan yang tidak dijawab oleh bind:

ip route get 203.0.113.10 from 10.8.0.2
ip rule show

Baris pertama mencetak laluan yang akan diambil oleh paket dari sumber itu ke destinasi itu, termasuk antara muka keluar dan sumber pilihan. Jika ia menamakan antara muka fizikal, bind dan laluan tidak bersetuju, dan paket akan keluar dengan sumber yang laluan itu tidak boleh kembali kepadanya.

Kemudian ip rule show memberitahu anda sama ada mana-mana peraturan akan memilih jadual lain. Keutamaan penting di sini, kerana peraturan pertama yang sepadan menang, dan peraturan yang menangkap segala-galanya di atas peraturan anda menjadikan peraturan anda tidak kelihatan.

Pasang peraturan dasar hanya jika itu reka bentuknya

Penghalaan berasaskan sumber ialah reka bentuk yang disengajakan, bukan pembaikan untuk satu aplikasi. Jika pemilik dasar mahu trafik dari subnet terowong menggunakan terowong, peraturan itu milik konfigurasi pemilik tersebut, bukan arahan sekali sahaja pada komputer riba anda.

Bentuk yang boleh dilaksanakan ialah jadual khusus dengan laluan lalai melalui terowong, ditambah peraturan yang menghantar julat sumber VPN ke jadual itu. Tambah pengecualian yang diperlukan oleh reka bentuk, kerana jadual yang mengandungi hanya lalai terowong akan menangkap destinasi yang sepatutnya kekal setempat atau boleh dicapai melalui laluan fizikal.

ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2

Batalkan dengan ip rule del dan ip route flush table 100. Apa-apa yang ditambah dengan cara ini hilang semasa but semula melainkan pengurus menulisnya, yang sekali gus menjadi sifat keselamatan dan sebab untuk tidak menyimpan satu-satunya salinan dalam sejarah shell anda.

Sahkan dengan tiga pemerhatian

Catat sumber yang diminta oleh aplikasi, laluan yang dipilih oleh carian, dan sumber yang benar-benar dilihat oleh pelayan.

Ketiga-tiganya boleh tidak bersetuju, dan setiap percanggahan menunjuk ke tempat yang berbeza. Tangkapan pada antara muka terowong membuktikan paket keluar dengan sumber yang betul. Tangkapan pada antara muka fizikal membuktikan ia keluar melalui jalan yang salah. Pandangan sebelah pelayan ialah satu-satunya yang membuktikan laluan dari hujung ke hujung.

Jika aplikasi menawarkan pilihan ikat-ke-peranti atau mod penghalaan setiap aplikasi, anggap ia sebagai mekanisme berbeza dengan kekangan berbeza. Tetapan yang kelihatan serupa tidak semuanya berakhir dengan keputusan kernel yang sama.

Artikel berkaitan