Balasan keluar melalui LAN, bukan terowong: mengapa dan bagaimana
Permintaan yang tiba melalui terowong tidak bermakna balasan keluar melalui laluan yang sama. Linux mencari destinasi, dan subnet tempatan biasanya menang.
Perkhidmatan yang diterbitkan melalui gerbang berfungsi dari sebahagian besar internet dan gagal dari satu pejabat. Seseorang memeriksa terowong, melihat permintaan tiba dan membuat kesimpulan bahawa balasan mesti mengikut laluan yang sama kembali. Linux tidak berfungsi begitu, dan sebanyak mana pemeriksaan terowong tidak akan mengubah jawapannya. Balasan dihalakan mengikut destinasi, dan satu pemanggil yang gagal itu berada pada subnet yang sudah dicapai hos secara langsung.
Apa yang sebenarnya menentukan paket keluar
Kernel mencari laluan untuk destinasi paket, meneliti peraturan dasar mengikut susunan keutamaan dan kemudian jadual yang dipilih oleh peraturan yang sepadan. Antara muka tempat paket tiba tidak memainkan peranan, melainkan ada peraturan atau tanda yang ditulis untuk menjadikannya penting. Ini fakta penghalaan hos ini, bukan kerosakan pada terowong.
Permintaan yang diterima melalui terowong kerana itu boleh menghasilkan balasan yang keluar melalui antara muka fizikal, dan aliran menjadi satu arah tanpa mana-mana peranti melaporkan ralat. Periksa kedua-dua arah sebelum membuat kesimpulan tentang terowong. Balasan yang keluar ke arah yang salah hilang daripada pembilang terowong, itulah sebabnya kedua-dua hujung tidak bersetuju sama ada sesuatu dihantar. Perhatikan pembilang mana yang bergerak sebelum menyentuh peraturan.
Mengapa subnet tempatan menang
Hos yang mempunyai alamat pada rangkaian tempatan menyimpan laluan bersambung untuk awalan itu dalam jadual utama, dan laluan bersambung ialah padanan langsung. Apabila pemanggil datang dari subnet yang sama, carian menemui pautan tempatan sebelum terowong dipertimbangkan.
Asimetri inilah yang menjadikan diagnosis mengelirukan. Pemanggil dari internet yang lebih luas berfungsi kerana mereka tidak sepadan dengan mana-mana laluan tempatan, manakala satu-satunya pemanggil yang berkongsi awalan pejabat gagal, dan pemanggil itulah yang digunakan seseorang untuk menguji.
Liputan rakan sebaya tidak sama dengan laluan terpasang
Di sisi terowong, julat yang dibenarkan oleh rakan sebaya menerangkan apa yang boleh dihantar ke dalam terowong dan sumber mana yang diterima daripadanya. Semua itu tidak menyatakan apa-apa tentang ke mana jadual penghalaan tempatan akan menghantar paket.
Jika alat terowong memasang laluan lalai pada hos, ia boleh menyeret trafik tidak berkaitan ke dalam terowong sebagai kerosakan sampingan. Di tempat peraturan dasar sepatutnya memegang keputusan, pilihan pemasangan laluan alat itu wujud semata-mata untuk menghalangnya, dan alamat, kunci serta tetapan titik akhir kekal tepat seperti asalnya. Laluan lalai yang ditambah untuk kemudahan ialah cara biasa hos kehilangan rangkaian tempatannya sendiri.
Pilih jadual mengikut alamat sumber
Peraturan berasaskan sumber menghantar balasan dari alamat perkhidmatan ke jadual peribadi yang nilai lalainya ialah terowong, manakala segala-galanya terus menggunakan jadual utama. Pilih nombor jadual dan keutamaan yang tidak digunakan secara tempatan, dan baca peraturan sedia ada sebelum menyisipkan apa-apa. Baca peraturan hidup dan bukan fail tersimpan, kerana kedua-duanya boleh berbeza selepas but semula.
ip -6 route add default dev wg0 table 200
ip -6 rule add priority 32000 from 2001:db8:aa::20/128 lookup 200
ip -6 rule add priority 32001 from 2001:db8:aa::20/128 unreachableBaris terakhir menjadikan laluan yang hilang gagal secara kelihatan dan bukannya jatuh semula ke pautan tempatan. Sumber mesti benar-benar diberikan kepada hos, dan carian tempatan serta utama yang biasa mesti kekal pada kedudukan asalnya. Peraturan memilih jadual mengikut sumber; ia tidak membandingkan panjang awalan antara jadual.
Sahkan laluan, kemudian perkhidmatan
Tanya kernel apa yang akan dilakukannya dan bukannya membuat kesimpulan daripada tangkapan, dengan menggunakan alamat perkhidmatan sebagai pemilih sumber. Jawapan yang betul di sini menjimatkan keseluruhan surih paket.
ip -6 route get 2001:db8:bb::30 from 2001:db8:aa::20Output sepatutnya menamakan terowong. Kemudian uji sumber yang tidak anda sentuh dan pastikan ia masih mengambil pautan tempatan, supaya perubahan kekal terhad kepada satu alamat. Pemilih yang lebih luas tidak akan membuktikan apa-apa tentang aduan asal.
Apa yang tidak diperbaiki ini
Biarkan penghantaran, peraturan tembok api dan kelakuan ICMPv6 pada gerbang seperti asalnya, kerana laluan sumber tidak menggantikan mana-mana daripadanya. Mesej Packet Too Big yang hilang masih merosakkan balasan besar, jadual mana pun yang menang dalam carian. Betulkan itu sebelum menambah peraturan penghalaan, jika tidak gejala akan kekal selepas perubahan.
Pastikan model penerbitan sebelum menggunakan mana-mana daripada ini. Proksi terbalik yang membuka sambungan backend sendiri mempersembahkan sumbernya sendiri dan tidak mengekalkan pemanggil, jadi kerosakan ini tidak boleh berlaku dalam reka bentuk itu. Menggunakan peraturan di sana akan menambah pengecualian penghalaan yang tidak menyelesaikan apa-apa dan menyembunyikan punca sebenar.
Akhir sekali, tulis nombor peraturan dan jadual ke dalam pengurusan konfigurasi hos. Peraturan dasar yang ditambah dengan tangan hilang pada pembinaan semula seterusnya, dan pemanggil pejabat kembali dengan aduan yang sama.