Bulan lalu dua orang meminta hasil yang bertentangan daripada saya: seorang mahu IPv6 diliputi VPN, seorang lagi mahu pencetak pejabat terus berfungsi. Satu laluan ::/0 tidak dapat memberikan kedua-duanya sendiri. Sama ada laluan itu tergolong di dalam terowong bergantung pada tiga syarat, dan syarat pertama mengecualikannya untuk kebanyakan hujung keluar komersial. Jika hujung keluar tidak membawa IPv6, penghalaan laluan lalai ke situ menyembunyikan trafik anda dalam terowong yang tidak ada tempat untuk menghantarnya.

Tiga syarat menentukan jawapannya

Laluan lalai ialah satu baris, ::/0, dan ia sepadan dengan mana-mana destinasi IPv6 tanpa laluan yang lebih khusus (RFC 4291). Memasangnya mudah. Memutuskan sama ada anda patut melakukannya bergantung pada tiga syarat.

Syarat satu: hujung keluar yang anda sambung mempunyai IPv6 yang berfungsi dan bersedia meneruskannya. Syarat dua: klien anda boleh mengekalkan laluan ke titik akhir terowong, yang biasanya terletak dalam julat yang akan anda halakan. Syarat tiga: anda boleh menamakan destinasi IPv6 setempat yang mesti kekal di luar terowong.

Setiap syarat gagal dengan caranya sendiri, sebab itu meneka memakan masa satu malam. Syarat satu yang gagal memberi anda kesunyian dan jadual laluan yang kelihatan betul. Syarat dua yang gagal membunuh jabat tangan beberapa saat selepas bermula. Syarat tiga yang gagal meninggalkan terowong yang berfungsi dan rakan sekerja yang tidak puas hati di pencetak.

What you seeDecision
Exit answers IPv6 probes, no local IPv6 devices to protectRoute ::/0 into the tunnel
Exit answers IPv6 probes, printer or NAS reachable by a global addressRoute ::/0, then give those prefixes a route of their own
Exit is IPv4-only inside the tunnelDo not route ::/0; block IPv6 on the client
Endpoint is reached over IPv6 and sits inside ::/0Install a host route for the endpoint first

Adakah hujung keluar benar-benar membawa IPv6?

Antara muka terowong dengan alamat IPv6 tidak membuktikan apa-apa tentang sebelah sana. Banyak profil komersial hanya IPv4 di dalam: pelayan memberi anda alamat v4 dan membuang semua yang lain. Pasang laluan lalai daripada AllowedIPs di atasnya dan kernel akan dengan senang hati menghantar IPv6 ke antara muka yang pasangannya tidak pernah melihatnya.

Uji dari klien semasa terowong aktif. ping -6 -c 3 2001:4860:4860::8888 dan ip -6 route get 2001:4860:4860::8888 menjawab soalan berbeza: sama ada balasan kembali, dan peranti mana yang dipilih kernel. Apabila yang kedua menamakan terowong anda dan yang pertama tidak mengembalikan apa-apa, masalahnya pada hujung keluar, bukan laluan.

Jika anda menguruskan hujung keluar sendiri, ujian klien boleh lulus dan laluannya masih boleh berakhir buntu. Sahkan net.ipv6.conf.all.forwarding=1 pada get laluan dan firewalnya menerima paket yang diteruskan keluar dari terowong. Paket yang dihalakan dengan betul ke hujung keluar yang enggan meneruskan kelihatan tepat seperti pepijat penghalaan dari sisi klien.

Bolehkah klien mengekalkan laluannya ke titik akhir?

Inilah kes yang menangkap saya pada komputer riba dengan titik akhir WireGuard hanya IPv6. Alamat titik akhir ialah alamat global biasa, jadi ia jatuh dalam ::/0. Halakan seluruh awalan ke antara muka dan paket jabat tangan akan mengejar diri mereka sendiri masuk ke terowong yang masih mereka cuba bina. Terowong tidak pernah naik, dan tiada apa dalam output klien mengatakan mengapa.

wg-quick mengendalikan ini pada Linux. Ia memperoleh laluan daripada AllowedIPs, memasangnya dalam jadualnya sendiri dan menambah peraturan dasar supaya trafik ke titik akhir diselesaikan dahulu melalui jadual utama: peraturan suppress_prefixlength 0 yang anda temui dalam ip -6 rule. Sebab itu wg-quick up berjaya di tempat ip -6 route add default dev wg0 yang ditulis tangan memutuskan anda.

Periksa kedua-dua keadaan dengan ip -6 route get <endpoint-v6>, sebelum dan selepas menaikkan terowong. Jika jawapannya berubah ke peranti terowong anda, anda telah membuang laluan yang diperlukan terowong. Apabila anda menulis laluan sendiri, tambah laluan hos ke titik akhir melalui get laluan asal, atau sambung ke titik akhir melalui IPv4 dan biarkan IPv6 kepada muatan.

Apa yang mesti kekal di luar terowong?

Laluan yang lebih khusus mengalahkan laluan lalai, jadi awalan pada pautan atau julat ULA dengan laluannya sendiri terus berfungsi tanpa usaha tambahan. Inilah sebab senyap mengapa begitu banyak persediaan IPv4 terowong penuh bertahan: awalan LAN lebih khusus daripada laluan lalai dan tidak pernah masuk ke terowong.

Ia rosak apabila peranti setempat boleh dicapai melalui alamat global, yang normal bagi pencetak yang diberi awalan awam oleh penghala yang sama, NAS atau televisyen. Alamat itu sepadan dengan ::/0 dan bukan yang lain, jadi ia berpindah ke terowong bersama yang lain dan hilang.

Tentukan mengikut destinasi, bukan protokol. Jika dua atau tiga hos setempat penting, beri awalan mereka laluan keluar melalui antara muka fizikal, atau keluarkan daripada set yang dirundingkan. Jika senarai terus membesar, jawapan jujurnya ialah split tunneling untuk IPv6 dengan senarai pengecualian bertulis, bukan laluan lalai yang anda terus tampal.

Jika jawapannya tidak, sekatlah

Membiarkan IPv6 tanpa laluan bukan sama dengan membiarkannya bersendirian. Hos dengan laluan lalai IPv6 yang berfungsi terus menggunakannya semasa terowong membawa IPv4, jadi trafik keluar di sebelah VPN dan setiap perkhidmatan yang mengutamakan IPv6 melihat alamat sebenar anda. Itu kebocoran, bukan terowong berpecah.

Pilih satu dan catat yang mana anda pilih. Halakan laluan lalai dan terima pertukaran di atas, atau lumpuhkan IPv6 sepanjang tempoh terowong. Meninggalkan awalan daripada AllowedIPs tidak cukup dengan sendirinya, kerana sistem pengendalian menyimpan laluan lalainya sendiri. Pada Linux versi kasarnya ialah sysctl -w net.ipv6.conf.all.disable_ipv6=1; versi lebih halus menjatuhkan IPv6 di luar terowong dengan peraturan firewall. Klien telefon mempunyai togol sekat IPv6 yang jelas yang melakukan tugas yang sama.

Sahkan seperti kebocoran

Naikkan terowong dan baca keadaan daripada mempercayai togol. ip -6 route show default sepatutnya menunjukkan satu laluan lalai, dan ip -6 route get untuk destinasi di luar LAN anda sepatutnya menamakan peranti terowong. Ulang kedua-duanya selepas pemutusan: laluan lalai yang hidup lebih lama daripada terowong ialah pepijat yang anda cari.

Kemudian uji arah bertentangan. Daripada hos di rangkaian setempat, capai klien pada alamat IPv6 setempatnya. Jika itu berhenti berfungsi, syarat tiga tidak pernah dipenuhi, apa pun yang didakwa jadual laluan ketika itu.

Tulis hasilnya di tempat orang seterusnya akan menemuinya: awalan mana yang kekal setempat, mengapa, dan apa yang klien lakukan selepas pemutusan. Dua baris dalam runbook menyelamatkan jurutera seterusnya daripada menemui semula gelung titik akhir pada tengah malam.

Artikel berkaitan