Klien OpenVPN mendail satu alamat, pelayan menjawab dari alamat lain, dan terowong tidak pernah naik. Log pelayan menunjukkan paket tiba dan tangkapan menunjukkan balasan keluar, jadi kegagalan itu disalahkan pada klien. Pada hos dengan beberapa antara muka, atau beberapa alamat pada satu antara muka, kedua-dua pihak tidak bersetuju alamat mana yang digunakan. Balasan itu sah pada lapisan IP, namun banyak klien membuang datagram yang sumbernya bukan alamat yang mereka hubungi.

Apa yang klien lihat apabila sumber berubah

Socket UDP yang tidak diikat pada alamat tempatan tertentu tidak mempunyai sumber tetap, jadi kernel memilih satu semasa menghantar. Pilihan itu datang daripada carian laluan ke arah alamat klien, dan sumbernya menjadi alamat antara muka yang dipilih oleh carian itu. Pada mesin dengan satu antara muka pilihan itu tidak kelihatan; pada hos dengan alamat pengurusan, alamat awam dan alamat sekunder pada kad rangkaian yang sama, ia bergantung pada metrik dan dasar penghalaan. Penghalaan berasaskan dasar menjadikan ketidakserasian lebih mungkin, bukan kurang, kerana peraturan boleh memilih pautan atas yang tidak pernah dicapai klien. Laluan lalai yang dipelajari daripada satu pembekal serta peraturan sumber yang menunjuk ke pembekal lain sudah cukup untuk menghasilkannya.

Klien yang menapis balasan, dan penjejakan sambungan yang menjangka empat tuple tepat serta sumber, akan membuang balasan tanpa mesej yang berguna. Terowong kemudian tamat masa seolah-olah tiada apa yang tiba, dan itulah sebabnya ini tersilap dianggap masalah tembok api di sebelah klien. Tangkapan yang diambil hanya pada pelayan mengesahkan kesilapan itu dan bukannya menjelaskannya, kerana balasan itu benar-benar keluar. Bandingkan sumber balasan dengan alamat yang didail klien sebelum mengubah apa-apa yang lain.

Apa yang sebenarnya dilakukan pilihan multihome

Direktif ditulis multihome dalam fail konfigurasi dan --multihome pada baris arahan, dan ia membuatkan pelayan UDP menjawab dari alamat yang dicapai oleh paket klien. Kernel menyerahkan alamat tujuan asal sebagai data sampingan semasa menerima, dan OpenVPN menggunakan nilai itu sebagai sumber balasan. Oleh itu pelayan yang mendengar pada alamat kad liar, local 0.0.0.0 untuk IPv4 atau padanan IPv6-nya, berkelakuan seolah-olah setiap klien telah mencapai pendengar khusus. Klien yang masuk melalui alamat awam menerima balasan dari alamat awam, dan klien pada alamat dalaman menerimanya dari alamat itu. Tiada apa-apa lain pada laluan paket bergerak: laluan, peraturan penapis dan konfigurasi terowong kekal tepat seperti sebelumnya.

Sifat terakhir inilah yang menjadikan pilihan itu selamat ditambah pada pelayan yang berfungsi, dan ia juga sebab mengapa pilihan itu tidak dapat membaiki penapis yang hanya membenarkan satu alamat. Paket itu masih perlu diterima pada laluan yang dilaluinya, jadi pembetulan sumber mengubah asal balasan dan tidak lebih daripada itu. Ia juga hanya untuk UDP: pendengar TCP tidak mengalami masalah ini dalam bentuk yang sama, kerana sambungan dikenal pasti oleh empat tuple dan bukan oleh alamat sumber balasan.

Bila alamat tempatan tetap ialah nilai lalai yang salah

Sebelum menggunakan pilihan itu, periksa sama ada pelayan mengikat satu alamat tempatan tertentu, kerana pendengar yang terikat sentiasa menjawab dari alamat itu. Itu betul untuk penggunaan dengan satu antara muka dan salah sebaik sahaja klien menggunakan lebih daripada satu alamat secara sah. Jika ikatan itu disengajakan, tentukan sama ada pelayan patut menerima trafik pada alamat tambahan. Membuang ikatan meningkatkan pendedahan, jadi antara muka dan rangkaian sumber yang dibenarkan mesti dikuatkuasakan oleh perkhidmatan dan penapis, bukan hanya oleh alamat ikatan.

Rujukan OpenVPN mengehadkan pilihan itu kepada pelayan UDP, mencatat pemprosesan tambahan pada laluan paket, dan merekodkan platform yang menyokongnya. Sahkan perkara itu pada keluaran yang dipasang sebelum merancang berdasarkannya. Di tempat yang tidak disokong, mengikat alamat tertentu atau membaiki laluan balik ialah alternatifnya, dan kedua-duanya perubahan yang lebih sempit daripada yang kelihatan pada pandangan pertama. Mendengar pada kad liar juga mempunyai kesan di luar balasan: pelayan pada semua alamat boleh dicapai dari setiap rangkaian yang hos disambungkan, dan itu mungkin bukan pendedahan yang dimaksudkan sesiapa.

Buktikan sumber balasan dari luar

Uji dari luar pelayan, dan catat alamat serta pengangkutan tepat yang digunakan klien sebelum menangkap apa-apa. Tiga pemeriksaan di bawah menjawab tiga soalan berbeza, dan urutannya penting.

tcpdump -ni any udp port 1194
ss -lunp 'sport = :1194'
ip route get 203.0.113.10 from 198.51.100.20

Tangkapan menunjukkan alamat sumber pada balasan, dan itulah fakta yang menjadi asas seluruh artikel. Senarai socket menunjukkan apa yang sebenarnya diikat oleh pelayan, kerana pendengar kad liar dan pendengar tertentu kelihatan sama dalam fail konfigurasi dan berkelakuan berbeza pada rangkaian. Carian laluan menunjukkan sumber yang akan dipilih kernel untuk aliran itu, dan itu menjelaskan tangkapan sebelum anda mengubah apa-apa. Ulangi ketiga-tiganya untuk IPv4 dan IPv6 secara berasingan, kerana ia pendengar berasingan dan carian berasingan, dan entri kad liar untuk satu keluarga tidak mengatakan apa-apa tentang yang lain.

Penghalaan, penemuan dan penapisan kekal berasingan

Memelihara sumber balasan tidak memasang laluan keluar, tidak mengemas kini DNS dinamik, dan tidak membuatkan satu keluarga alamat menerima yang lain. Pada pelayan dengan beberapa pautan atas, laluan balik bagi setiap sumber mesti dipersetujui secara sengaja, jika tidak balasan keluar melalui antara muka yang tidak pernah dibenarkan oleh penapis klien. Begitu juga, alamat baharu selepas perubahan awalan mesti sampai kepada klien melalui penemuan dan aliran sambung semula yang disokong, bukan melalui rekod lama.

Biarkan pemeriksaan identiti pelayan dan pengesahan sijil tepat seperti adanya, kerana alamat yang berubah tidak mewajarkan menerima rakan yang belum disahkan. Jika balasan kini keluar dari sumber yang dimaksudkan dan terowong masih gagal, anggap masalah sumber sudah selesai dan teruskan. Ralat seterusnya yang diperhatikan milik penghalaan, penapisan atau pengesahan, dan menukar pendengar lagi tidak akan mencapainya. Tuliskan sumber balasan dalam tiket di sebelah alamat yang didail klien, supaya orang seterusnya dapat memeriksa fakta yang sama dengan satu arahan.

Artikel berkaitan