Prefiks hos WireGuard: mengapa satu alamat berfungsi dan yang lain tidak
Sesuatu /32 pada antara muka ialah prefiks hos yang sah dan hanya menghalakan alamat itu. Tambah laluan yang tersirat oleh AllowedIPs, kemudian semak laluan balik.
Terowong aktif, handshake berlaku setiap dua minit, dan tepat satu alamat di sebelah sana menjawab. Ping ke alamat terowong rakan berfungsi; apa-apa di belakangnya tidak. Seseorang membaca konfigurasi antara muka, melihat prefiks hos dan membuat kesimpulan bahawa mask itu salah. Melebarkannya kepada /24 membetulkan ping untuk seketika dan kemudian merosakkan perkara lain. Prefiks itu tidak pernah menjadi punca, dan laluan yang hilang bukanlah laluan yang dikawal oleh mask.
Apa yang sebenarnya dicipta oleh prefiks antara muka
Di Linux, menetapkan alamat pada antara muka mencipta laluan bersambung untuk prefiks itu. Jika anda tetapkan prefiks hos, laluan bersambung meliputi satu alamat. Jika anda tetapkan /24, ia meliputi 256, dan setiap satunya kini dianggap boleh dicapai melalui pautan itu.
ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1
Prefiks hos ialah pilihan yang benar-benar normal untuk terowong titik ke titik, kerana terdapat tepat satu rakan di hujung yang lain. Perintah ketiga ialah yang menjawab soalan pengguna: ia menyatakan antara muka mana yang akan digunakan oleh kernel untuk destinasi itu, dan ia tidak akan menunjukkan apa-apa yang berguna jika tiada laluan yang sepadan.
Itulah keseluruhan penjelasan bagi gejala itu. Satu alamat menjawab kerana terdapat laluan bersambung untuknya, atau kerana senarai dibenarkan rakan kebetulan memasukkannya. Semua yang lain tiada laluan dan digugurkan sebelum WireGuard terlibat. Terowong kekal sihat sepanjang masa, itulah sebabnya pembilang handshake terus kelihatan meyakinkan.
AllowedIPs ialah dua peraturan di bawah satu nama
Senarai dibenarkan bagi setiap rakan dalam WireGuard melakukan dua kerja serentak, dan sintaks konfigurasi membuatnya kelihatan seperti satu. Pada arah masuk, ia membenarkan alamat sumber mana yang boleh dikemukakan oleh rakan. Pada arah keluar, ia memilih rakan mana yang menerima paket, dengan mencari padanan paling spesifik.
Tiada satu pun daripada kedua-dua kerja itu ialah penghalaan. Kernel masih perlu memutuskan bahawa paket itu tergolong pada antara muka terowong sebelum WireGuard melihatnya, dan keputusan itu datang daripada jadual penghalaan. Entri rakan dengan senarai dibenarkan yang luas tidak memasang laluan dengan sendirinya.
Itulah sebabnya konfigurasi boleh kelihatan lengkap dan berkelakuan tidak simetri. Klien menghantar ke sebelah sana kerana laluan wujud, dan balasan tidak pernah tiba kerana senarai dibenarkan sebelah sana tidak membenarkan sumber klien, atau kerana sebelah sana tiada laluan balik. Kedua-dua arah ialah keputusan berasingan dengan mod kegagalan berasingan. Mencatat yang mana satu anda uji ialah separuh diagnosis.
Dari mana datangnya laluan
Jika anda menggunakan wg-quick, laluan dijana untuk anda daripada senarai dibenarkan setiap rakan, kecuali anda menetapkan Table = off dan mengambil alih kawalan sendiri. Itulah tingkah laku yang didokumenkan oleh alat itu, dan itulah sebabnya konfigurasi tanpa direktif laluan yang jelas masih berfungsi.
sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0
Bandingkan senarai dibenarkan dengan laluan yang benar-benar wujud. Rakan yang membenarkan seluruh subrangkaian tetapi hanya menghasilkan laluan hos bermakna pembantu itu tidak pernah berjalan, atau anda mengurus antara muka secara langsung dengan wg dan ip, dan dalam hal itu tiada apa-apa yang menjana laluan untuk anda.
Apabila anda mengurusnya secara manual, laluan itu satu baris dan bentuknya jelas: destinasi melalui antara muka, tanpa gateway kerana pautan itu titik ke titik. Menambahnya bukan penyelesaian sementara untuk prefiks yang buruk; ia ialah separuh yang hilang daripada reka bentuk yang memilih untuk mengurus penghalaan sendiri.
Prefiks yang lebih luas tidak menambah entri rakan
Pembetulan yang menggalakkan ialah menukar alamat kepada /24 supaya laluan bersambung meliputi LAN pelayan. Ia kelihatan berfungsi, dan sebab ia kelihatan berfungsi ialah laluan bersambung kini sepadan, bukan kerana WireGuard mempelajari sesuatu yang baharu.
Apa yang juga anda lakukan ialah menuntut keseluruhan julat sebagai boleh dicapai secara terus melalui pautan itu, termasuk alamat yang dimiliki oleh rakan lain atau LAN yang sebenarnya berada di belakang pelayan. Trafik ke alamat tersebut kini masuk ke terowong, dan sama ada ia keluar di sebelah sana bergantung pada penghalaan dan senarai dibenarkan pelayan itu sendiri.
Sisi kriptografi tidak terjejas dalam apa jua keadaan. WireGuard masih memerlukan entri dalam senarai dibenarkan yang meliputi destinasi untuk memilih rakan, dan sebelah sana masih memerlukan entri yang meliputi sumber anda untuk menerimanya. Prefiks antara muka yang lebih luas tidak dapat menyediakan kedua-duanya.
Sahkan kedua-dua arah sebelum mengubah apa-apa
Kerjakan kedua-dua hujung secara berasingan dan catat apa yang dikatakan oleh setiap satu. Pada klien laluan dan entri rakan; pada pelayan imej cermin serta laluan baliknya sendiri:
ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10
Tangkapan ialah yang menyelesaikan pertikaian tentang arah. Jika paket keluar muncul pada antara muka terowong dan pelayan tidak merekod apa-apa, hujung jauh menolaknya, biasanya kerana sumber anda berada di luar senarai dibenarkannya. Jika tiada apa-apa yang muncul langsung, laluan itu hilang atau menunjuk ke tempat lain.
Kemudian betulkan hujung yang paling sempit. Entri dalam senarai dibenarkan di sebelah pelayan untuk alamat klien anda dan entri di sebelah klien untuk subrangkaian destinasi ialah bentuk yang normal, dan ia membiarkan prefiks antara muka tidak terganggu. Luaskan prefiks hanya jika pelan alamat benar-benar mahu subrangkaian dikongsi pada pautan itu, dan lakukan sebagai perubahan pelan dan bukan sebagai langkah penyahpepijatan.