Tiga lonjakan WireGuard sampai ke rangkaian yang tidak mempunyai alamat awam, dan kemudian mesin tengah berhenti menjawab pada port yang sepatutnya didengarnya. Terowong ke hadapan masih berfungsi, hos jauh masih bertindak balas, dan hanya pelayan tengah sendiri menjadi senyap dari luar. Gabungan itu mengelirukan semata-mata kerana ia disebabkan sendiri: lonjakan tengah mematuhi jadual penghalaannya sendiri, dan jadual itu menghantar balasannya ke arah yang salah.

Rantaian yang berfungsi sehingga anda bercakap dengan kotak tengah

Ambil rantaian ilustrasi: klien A sampai ke pelayan B pada UDP 500, dan B meneruskan ke pelayan C pada UDP 500. C hanya menerima trafik daripada alamat rakan sejawatnya yang tunggal, yang menjadikannya daun dan memastikan tingkah lakunya kekal mudah. B bukan daun, dan segala yang menarik tentang kegagalan ini berlaku di situ.

Perbezaan ini penting kerana peranan daun dan tengah menarik ke arah yang bertentangan. Daun boleh menghantar semuanya ke satu terowong tanpa akibat, kerana tiada apa-apa lain bergantung padanya. Lonjakan tengah secara serentak merupakan titik akhir untuk klien dan klien ke arah sisi jauh, dan kedua-dua tugas itu mahu penghalaan yang berbeza.

Mengapa balasan keluar melalui terowong

Pada B, antara muka yang menghadap C membawa AllowedIPs = 0.0.0.0/0 bersama laluan lalai yang sepadan. Oleh itu setiap paket yang dihasilkan B masuk ke terowong itu, kecuali sesuatu yang lebih khusus diberi keutamaan.

Paket dari A yang dialamatkan ke B tiba dan diterima, kerana B ialah destinasi dan penghantaran setempat berlaku dahulu. Balasannya ialah paket baharu yang dijana secara setempat dan ditujukan ke alamat awam A, dan destinasi itu sepadan dengan laluan lalai ke dalam terowong. C menerimanya, tidak memiliki alamat itu, dan menggugurkannya.

Gejalanya dibaca seperti masalah tembok api atau ketidakpadanan kunci, dan kedua-duanya tidak benar di sini. Tangkapan pada terowong ke arah C menunjukkan balasan menuju arah yang salah. Satu pemerhatian itu menjimatkan lebih banyak masa daripada berapa banyak pun pembacaan konfigurasi, jadi catatkannya sebelum mula menukar kunci. Sesiapa yang belum melihat tangkapan itu akan menganggap terowong itu sendiri rosak.

Pembaikan sempit: peraturan dasar yang sepadan dengan port sumber

Balasan daripada soket pendengar B keluar dengan port sumber 500. Peraturan dasar boleh memadankannya dan menghantar paket itu kembali ke jadual biasa:

ip rule add sport 500 table main priority 100
ip rule add sport 8080 table main priority 101

Peraturan dasar dirujuk mengikut susunan keutamaan, dan jadual utama terletak pada 32766, jadi peraturan pada 100 ditanya sebelum laluan lalai terowong berpeluang bercakap. Tambah satu entri bagi setiap port yang mesti kekal boleh dicapai dari luar dan tidak lebih, supaya trafik yang dimajukan terus menggunakan terowong yang dibina untuknya.

Kenali had helah ini. Pemilih sport sepadan dengan paket yang dijana secara setempat, yang meliputi tepat kes balasan dan sengaja tidak meliputi trafik yang B hanya memajukan untuk orang lain. Perkhidmatan yang dihoskan di belakang B masih memerlukan balasannya sendiri, dan berpura-pura sebaliknya menghasilkan pembaikan yang berfungsi untuk perkhidmatan pertama dan gagal untuk yang kedua.

Berikan peraturan itu pemilik

Peraturan yang ditaip pada prompt hilang pada kali seterusnya antara muka dibina semula. Dalam persediaan WireGuard, letakkan di tempat antara muka dicipta dan dialihkan:

PostUp = ip rule add sport 500 table main priority 100
PostDown = ip rule del sport 500 table main priority 100

Jika NetworkManager, cangkuk pengedaran atau titik masuk kontena memiliki antara muka itu, pasangan itu milik pemilik tersebut dan bukan fail yang disunting dengan tangan. Periksa peraturan berkesan selepas sambung semula, bukan hanya selepas permulaan pertama, kerana permulaan pertama ialah kes yang sentiasa berfungsi.

Bandingkan alternatif dengan jujur

Peraturan port sumber ialah salah satu daripada empat jalan keluar, dan yang paling sempit antaranya. Ia mempunyai kelebihan tidak menyentuh dasar terowong sama sekali, dan itulah sebabnya ia cenderung bertahan daripada perubahan kemudian. Pembaikan sempit juga gagal dengan kuat apabila ia berhenti terpakai, manakala pengecualian luas terus berfungsi secara senyap lama selepas alasannya hilang. Perbezaan itu lebih penting daripada keanggunan apabila orang lain memiliki kotak itu dua tahun dari sekarang.

ApproachWhat it costsWhere it breaks
Source-port policy ruleOne rule per exposed portAnything B forwards rather than originates
Destination exception routeA route pinned to specific client addressesClients whose address changes
Stop full-tunnelling on BLoses the catch-all path toward CDesigns that depend on it
Split into two tunnelsMore interfaces and more policyNothing, at the cost of complexity

Sahkan dari kedua-dua hujung setelah anda memilih. Dari A, mulakan sambungan ke port B dan biarkan ia sibuk seketika. Pada B, minta kernel mewajarkan laluan balasan dengan sesuatu seperti ip route get <address-of-A> sport 500, dan sahkan ia menamakan antara muka WAN dan bukan terowong. Selepas itu, periksa bahawa sesuatu di belakang C masih menjawab melalui rantaian, yang membuktikan pengecualian itu kekal sempit dan bukan menjadi jalan pintas. Akhir sekali, catat port itu dalam nota reka bentuk, atau pengendali seterusnya akan menemukannya semula pada perkhidmatan lain.

Artikel berkaitan