Satu hos awam untuk VPN dan web: cara membahagikan peranan
Satu IP awam boleh menamatkan terowong, menyediakan HTTPS dan mencapai dua LAN peribadi. Tentukan dahulu siapa pemilik alamat, setiap port dan dasar penghantaran.
Satu mesin boleh memenuhi ketiga-tiga keperluan sekali gus: menamatkan terowong, menjawab HTTPS dan menghantar antara dua LAN peribadi. Sama ada ia munasabah bergantung pada tiga perkara yang boleh anda putuskan di atas kertas: siapa pemilik alamat awam, siapa pemilik setiap pasangan port dan protokol, dan proses mana yang dibenarkan menghantar paket. Jika betul, hos kongsi itu tidak istimewa. Jika salah, anda akan menghabiskan hujung minggu dengan perkhidmatan yang bermula bersih dan tidak pernah menjawab.
Yang berikut ialah prosedur keputusan, bukan helaian pembinaan. Setiap langkah berakhir dengan pemeriksaan yang membuktikan peranan yang baru anda tambah benar-benar terasing.
Pilih pemilik alamat sebelum port
Titik akhir terowong dan pelayan web boleh berkongsi kernel; berkongsi satu alamat, port dan protokol pada masa yang sama ialah perkara yang gagal. WireGuard biasanya mengambil UDP 51820, OpenVPN mengambil UDP 1194 atau TCP 443, dan pelayan web mengambil TCP 443. Pasangan yang menyakitkan ialah OpenVPN melalui TCP 443 di sebelah HTTPS, kerana kedua-duanya mahukan soket yang sama dan kernel memberikannya kepada yang mengikat dahulu. Hanya demultiplekser di hadapan, seperti sslh atau proksi yang memahami TLS, membenarkan mereka berkongsi port itu, dan ia menambah komponen yang kegagalannya kelihatan sama seperti masalah tembok api.
Lihat pemilik sebelum mengubah apa-apa: ss -lntup mencetak alamat tempatan, port dan proses setiap soket yang mendengar. Dua baris yang menunjukkan 0.0.0.0:443 bermakna perkhidmatan kedua tidak pernah mengikat, semeriah mana pun skrip init-nya. Jambatan juga mengalihkan pemilik. Apabila eth0 menyertai br0, IP berpindah ke br0 dan setiap peraturan tembok api yang menamakan eth0 berhenti sepadan, jadi ikat perkhidmatan pada jambatan dan sahkan dengan ip -br addr.
Peraturan pemilikan yang sama menjelaskan kejutan yang muncul dengan mesin maya. Pelayan terowong yang berjalan di dalam tetamu pada LAN yang sama mengekalkan alamat tetamu, jadi sambungan yang ditujukan kepada alamat hos itu sendiri kekal pada hos dan terowong tetamu tidak pernah melihatnya, apa pun yang dikatakan profil klien.
Laluan antara dua LAN atau NAT satu sisi
Dua LAN yang tidak dapat melihat satu sama lain boleh masing-masing mendail hos awam, yang kemudian menghantar antara terowong. Reka bentuk berhalakan itu memerlukan tiga perkara: penghantaran dihidupkan, laluan ke setiap awalan jauh dan dasar penghantaran yang membenarkan transit melaluinya. sysctl -w net.ipv4.ip_forward=1 meliputi yang pertama, ip route add 10.20.0.0/24 dev wg1 yang kedua, dan baris nftables seperti nft add rule inet filter forward iifname "wg0" oifname "wg1" accept yang ketiga.
NAT sumber lebih mudah dipasang dan lebih sukar dinyahpepijat. Penyamaran menulis semula alamat klien, jadi sisi jauh melihat hab dan bukan hos sebenar, dan peraturan akses serta lognya tidak lagi berguna untuk atribusi. Apabila kedua-dua rangkaian milik anda, laluan. Apabila satu sisi milik pihak ketiga yang tidak akan menambah laluan balik, NAT ialah pilihan yang keluar minggu ini. Walau apa pun, tuliskan pelan alamat, kerana dua /24 yang bertindih tidak boleh dilalukan oleh sebarang konfigurasi.
Tiada apa-apa tentang bertindak sebagai pintu keluar internet untuk komputer riba menghalang kotak yang sama daripada menamatkan terowong masuk. Hanya alamat yang bertindih menghalangnya, dan itulah sebabnya pelan alamat ialah dokumen yang penting.
Uji pemisahan apabila dua peranan dihentikan
Ujian yang berguna ialah penolakan: hentikan dua peranan dan sahkan yang ketiga masih menjawab. Permintaan web harus selesai apabila perkhidmatan terowong mati, dan jabat tangan terowong harus selesai apabila pelayan web dihentikan. Jika kedua-duanya hanya berfungsi apabila semuanya berjalan, anda mempunyai kebergantungan tidak sengaja, seperti jadual tembok api kongsi, laluan tersesat atau nama yang menunjuk ke alamat yang salah.
Tiga arahan menjadikan ujian itu konkrit. curl -sk --resolve example.test:443:203.0.113.10 https://example.test/ membuktikan pendengar tempatan menjawab tanpa DNS luar, wg show pada klien membuktikan jabat tangan selesai, dan tcpdump -ni any port 51820 pada hab memisahkan masalah penghalaan daripada masalah kunci. Jabat tangan yang tidak pernah muncul dalam tangkapan mati sebelum hos: tembok api pembekal, alamat awam yang salah atau peraturan NAT di laluan.
Ulangi penolakan untuk LAN yang dihantar. Dengan satu rakan terputus, ping merentas hab harus gagal; apabila disambung semula, ping harus pulih tanpa menyentuh peraturan. Ping yang pulih hanya selepas terowong dimulakan semula menunjuk kepada dasar dan bukan ketercapaian, dan itu pembetulan yang berbeza.
Kekalkan set peraturan boleh dibaca semasa anda menolak peranan. nft list ruleset harus menunjukkan satu peraturan penerimaan bagi setiap arah yang benar-benar anda perlukan, dan rantai penghantaran yang menerima segala-galanya bukan pemisahan, ia demo yang berfungsi.
Talian akses IPv6 sahaja dan perkhidmatan IPv4
Sesetengah talian akses hanya memberikan ketercapaian IPv6, dan perkhidmatan masih perlu diterbitkan melalui IPv4. Terowong itu sendiri bergerak melalui keluarga yang masih melalukan trafik, manakala perkhidmatan yang diterbitkan duduk pada alamat di dalam terowong. Ini membalikkan andaian biasa dan memecahkan pemantauan secara senyap: peraturan tembok api atau pemeriksaan masa operasi yang ditulis untuk laluan IPv4 kini mengawasi antara muka yang tidak membawa apa-apa.
Uji setiap keluarga secara berasingan dengan curl -4 dan curl -6, kerana satu permintaan yang berjaya tidak mengatakan apa-apa tentang laluan yang tidak anda cuba. Pemilikan port tidak berubah antara keluarga, tetapi pendengarnya berubah: ss -lntup menyenaraikan soket IPv4 dan IPv6 sebagai baris berasingan, dan 0.0.0.0:443 tidak meliputi [::]:443 melainkan proses itu meminta soket dual-stack.
Perkhidmatan yang menjawab pada satu keluarga dan menolak pada yang lain biasanya masalah pendengar, bukan penghalaan. Sebelum mengisytiharkan reka bentuk selesai, sahkan setiap peranan memiliki alamat atau port sendiri, penghantaran dihidupkan dan dibenarkan, dan setiap peranan masih menjawab apabila dua yang lain dihentikan.