Dual-stack na VPN: ang kliyente ang pumipili ng pamilya ng address, hindi ikaw
Isang pangalan, dalawang pamilya, dalawang magkaibang landas. Maaaring malusog ang tunel at mabigo pa rin ang kahilingan, dahil pinili ng kliyente ang kandidatong hindi mo kailanman na-route.
Buhay ang tunel, naglo-load ang mga IPv4 na site, at isang hostname ang nag-time out. Ang agad na konklusyon ay sira ang VPN o mali ang mga kredensyal, at kadalasan ay wala sa dalawa ang totoo. Nagbalik ang pangalan ng parehong IPv4 at IPv6 na address, pumili ang aplikasyon ng isa, at isa lang sa mga kandidatong iyon ang may gumaganang landas. Ang kliyente ang gumawa ng desisyon sa pagpili; hindi lang talaga sakop ng tunel ang pinili nito.
Ang pagpili ay hindi pangako ng saklaw
Ang default na pagpili ng address, na inilarawan sa RFC 6724, ang nagtatakda kung aling pares ng pinagmulan at destinasyon ang pipiliin ng host kapag may ilang available. Dinadagdagan ito ng Happy Eyeballs ng estratehiya sa koneksyon: nagsisimula ito ng mga pagtatangka sa dalawang pamilya at pinapanatili ang unang sumagot, para hindi maghintay ang user sa pag-time out ng sirang pamilya.
Wala sa mga mekanismong ito ang gumagawa ng ruta. Kung IPv4 lang ang dinadala ng tunel mo, lehitimong destinasyon pa rin ang kandidatong AAAA na maaaring subukan ng kliyente, at lumilitaw ang pagkabigo bilang mabagal na pag-load at hindi bilang error, dahil umatras ang browser. Mabagal na site ang iniuulat ng user, hindi sirang site, at namamana ng tiket sa suporta ang kalabuan na iyon. Reproduhin ito gamit ang fixed na pamilya at magiging tiyak ang ulat.
Dahil sa pag-atras na iyon kaya hindi pare-pareho ang sintomas sa mga aplikasyon. Itinatago ng browser ang pagkaantala; ang command-line na kliyente na may fixed na pamilya ay agad na ipinapakita sa iyo ang tunay na pagkabigo.
Alamin kung aling pamilya ang aktwal na ginamit ng kahilingan
Magsimula sa pangalan, hindi sa tunel. Tanungin ang dalawang uri ng rekord at itala kung ano ang bumalik:
dig +short A example.com
dig +short AAAA example.com
curl -4 -sS -o /dev/null -w '%{http_code}\n' https://example.com
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://example.comKung nagtagumpay ang v4 na kahilingan at nabigo ang v6 na kahilingan, nai-reproduci mo ang problema sa anyong maaari mong i-debug. Kung pareho silang nagtagumpay mula sa shell at nabigo pa rin ang browser, tingnan ang sariling resolver ng aplikasyon o isang naka-cache na sagot bago hawakan ang tunel.
Itago ang pamilya at destinasyon sa iyong mga tala. Ang tiket na nagsasabing hindi naglo-load ang site sa VPN ay walang makapagbe-verify, samantalang ang tiket na nagsasabing nabigo ang AAAA at gumagana ang A ay tumutukoy sa partikular na ruta.
Suriin ang ruta para sa pamilyang iyon
Para sa pamilyang nabigo, tanungin ang kernel kung aling landas ang gagamitin nito at ihambing ito sa mga naka-configure na address ng tunel. Sa Linux, ip -6 route get para sa destinasyon ay ipinapakita ang interface at pinagmulan na pipiliin.
Pagkatapos ay suriin ang tunel mismo. Ang mga peer ng WireGuard ay may listahan ng pinapayagang IP, at ang entry para sa 0.0.0.0/0 ay walang sinasabi tungkol sa IPv6. Kung walang prefix na IPv6 ang listahan ng peer, walang dahilan ang kliyente na magpadala ng AAAA na trapiko sa tunel, at lumalabas ang packet sa kung ano ang gagawin ng host kung hindi.
Ang mga patakaran ng firewall at patakaran ng NAT ay karapat-dapat sa parehong pagsusuri sa bawat pamilya. Ang patakarang isinulat para sa IPv4 ay hindi sumasaklaw sa IPv6 sa anumang platform, at ito ang pinakakaraniwang dahilan kung bakit gumagana ang isang pamilya at hindi ang isa.
Huwag i-disable ang IPv6 para gawing simple ang screenshot
Ang pagpatay sa IPv6 sa buong sistema ay magpapawala ng sintomas at iiwan kang walang diagnosis. Sinisira rin nito ang anumang destinasyong IPv6 lamang, at itinatago ang parehong bug para sa susunod na aplikasyon. Kung talagang hindi dapat gumamit ng IPv6 ang isang makina, iyon ay sadyang patakaran na may may-ari at pagsubok. Ang pagpatay nito habang may insidente ay wala sa dalawa.
Magpasya kung ano ang dapat gawin ng kliyente sa pamilya at i-configure ito nang tahasan: dalhin ito sa tunel, o harangan ito sa paraang sinusuportahan para hindi kailanman mag-alok ang pagpili ng hindi maabot na kandidato. Pareho silang lehitimong disenyo. Ang pandaigdigang pag-disable ay wala sa dalawa, dahil hindi ito disenyo.
Ano ang ilalagay sa tiket
Itala ang apat na bagay: ang hostname, ang pamilyang nabigo, ang rutang pinili ng kernel, at ang resulta ng kahilingang partikular sa pamilya. Sapat ang set na iyon para ma-reproduce ng iba ang pagkabigo nang hindi hinuhulaan kung alin sa dalawang landas ang ibig mong sabihin.
Ang mga patakaran sa pagpili ng address ng RFC 6724 ay nagpapaliwanag kung bakit mas pinili ng kliyente ang kandidatong pinili nito, at ipinapaliwanag ng RFC 8305 ang pag-uugali ng karera na nagtago ng pagkaantala. Wala sa kanila ang magro-route ng packet para sa iyo, at iyon ang bahaging dapat gawin ng tunel.