Kas IPv6-liiklus peaks käima VPN-i kaudu või otse?
Otsustage, kas ::/0 kuulub tunnelisse, kolme tingimuse põhjal: väljundi tugi, lõpp-punkti kättesaadavus ja ainult kohalikud võrgud.
Kaks inimest palusid minult eelmisel kuul vastupidiseid tulemusi: üks tahtis, et VPN kataks IPv6, teine tahtis, et kontori printer jätkaks tööd. Üks tee ::/0 ei suuda mõlemat üksi pakkuda. Kas see tee kuulub tunnelisse, sõltub kolmest tingimusest ja esimene välistab selle enamiku kommertslike väljundite puhul. Kui väljund IPv6-t ei kanna, peidab vaiketee sinna suunamine teie liikluse tunnelisse, kus seda pole kuhugi saata.
Vastuse otsustavad kolm tingimust
Vaikimisi tee on üks rida, ::/0, ja see sobib iga IPv6-sihtkohaga, millel pole täpsemat teed (RFC 4291). Selle paigaldamine on lihtne. Otsus, kas peaksite, taandub kolmele tingimusele.
Tingimus üks: väljundil, millega ühendute, on töötav IPv6 ja see on valmis seda edasi suunama. Tingimus kaks: teie klient suudab hoida tee tunnelilõpp-punktini, mis asub tavaliselt vahemikus, mida kavatsete suunata. Tingimus kolm: suudate nimetada kohalikud IPv6-sihtkohad, mis peavad jääma tunnelist välja.
Iga tingimus ebaõnnestub omal moel ja seetõttu maksab oletamine terve õhtu. Ebaõnnestunud tingimus üks annab teile vaikuse ja marsruuditabeli, mis näeb õige välja. Ebaõnnestunud tingimus kaks tapab käepigistuse mõni sekund pärast algust. Ebaõnnestunud tingimus kolm jätab töötava tunneli ja rahulolematu kolleegi printeri juurde.
| What you see | Decision |
|---|---|
| Exit answers IPv6 probes, no local IPv6 devices to protect | Route ::/0 into the tunnel |
| Exit answers IPv6 probes, printer or NAS reachable by a global address | Route ::/0, then give those prefixes a route of their own |
| Exit is IPv4-only inside the tunnel | Do not route ::/0; block IPv6 on the client |
Endpoint is reached over IPv6 and sits inside ::/0 | Install a host route for the endpoint first |
Kas väljund tõesti kannab IPv6?
Tunneliliides IPv6-aadressiga ei tõesta teise poole kohta midagi. Paljud kommertsprofiilid on seestpoolt ainult IPv4: server annab teile v4-aadressi ja viskab kõik muu ära. Paigaldage selle peale vaikimisi tee kohast AllowedIPs ja tuum saadab hea meelega IPv6 liidesesse, mille partner seda kunagi ei näe.
Testige kliendist, kui tunnel töötab. ping -6 -c 3 2001:4860:4860::8888 ja ip -6 route get 2001:4860:4860::8888 vastavad eri küsimustele: kas vastus tuleb tagasi ja millise seadme tuum valis. Kui teine nimetab teie tunnelit ja esimene ei tagasta midagi, on probleem väljundis, mitte tees.
Kui haldategi väljundit ise, võib klienditest läbida ja tee võib ikkagi ummiktee lõppeda. Kinnitage net.ipv6.conf.all.forwarding=1 lüüsil ja et selle tulemüür võtab vastu tunnelist edastatud pakette. Korralikult marsruuditud pakett väljundisse, mis keeldub edastamast, näeb kliendi poolelt välja täpselt nagu marsruutimisviga.
Kas klient suudab hoida tee lõpp-punktini?
See on juhtum, mis tabas mind sülearvutil, mille WireGuard lõpp-punkt oli ainult IPv6. Lõpp-punkti aadress on tavaline globaalne aadress, seega jääb see ::/0 sisse. Suunake kogu prefiks liidesesse ja käepigistuspaketid ajavad enda taga tunnelisse, mida nad alles püüavad ehitada. Tunnel ei tõuse kunagi ja miski kliendi väljundis ei ütle, miks.
wg-quick lahendab selle Linuxis. See tuletab marsruudid AllowedIPs-st, paigaldab need oma tabelisse ja lisab poliitikareegli, et liiklus lõpp-punkti lahendataks kõigepealt põhitabeli kaudu: reegel suppress_prefixlength 0, mille leiate ip -6 rule-st. Seetõttu õnnestub wg-quick up seal, kus käsitsi kirjutatud ip -6 route add default dev wg0 teid ära lõikab.
Kontrollige mõlemat olekut ip -6 route get <endpoint-v6> abil, enne ja pärast tunneli tõstmist. Kui vastus muutub teie tunneliseadmeks, olete eemaldanud tee, mida tunnel vajab. Kui kirjutate marsruudid ise, lisage host-marsruut lõpp-punktini algse lüüsi kaudu või ühenduge lõpp-punktiga IPv4 kaudu ja jätke IPv6 kandevõimele.
Mis peab jääma tunnelist välja?
Täpsemad marsruudid võidavad vaikimisi tee, seega lingil olev prefiks või ULA-vahemik oma marsruudiga töötab edasi ilma lisapingutuseta. See on vaikne põhjus, miks nii paljud täistunneliga IPv4-seadistused püsivad: LAN-prefiksid on vaikimisi teest täpsemad ega lähe kunagi tunnelisse.
See puruneb, kui kohalik seade on kättesaadav globaalse aadressi kaudu, mis on tavaline printeri puhul, kellele sama ruuter andis avaliku prefiksi, NAS-i või televiitori puhul. Need aadressid sobivad ::/0-ga ega millegi muuga, seega liiguvad need koos kõige muuga tunnelisse ja kaovad.
Otsustage sihtkoha, mitte protokolli järgi. Kui kaks või kolm kohalikku hosti on olulised, andke nende prefiksidele tee füüsilisest liidesest välja või eemaldage need läbiräägitud komplektist. Kui nimekiri kasvab edasi, on aus vastus IPv6 jaoks osaline tunnel kirjaliku erandite nimekirjaga, mitte vaikimisi tee, mida pidevalt lappite.
Kui vastus on ei, blokeerige see
IPv6 marsruudita jätmine pole sama, mis selle rahule jätmine. Töötava IPv6 vaiketee korral kasutab host seda edasi, kui tunnel kannab IPv4, seega liiklus lahkub VPN-i kõrvalt ja iga teenus, mis eelistab IPv6, näeb teie tegelikku aadressi. See on leke, mitte osaline tunnel.
Valige üks ja kirjutage üles, millise valisite. Suunake vaikimisi tee ja nõustuge ülaltoodud kompromissidega või lülitage IPv6 tunneli kestmise ajaks välja. Prefiksi väljajätmine AllowedIPs-st ei piisa üksi, sest operatsioonisüsteem hoiab oma vaikimisi teed. Linuxis on töötlemata versioon sysctl -w net.ipv6.conf.all.disable_ipv6=1; peenem versioon viskab IPv6 tulemüürireegliga tunnelist välja. Telefonikliendid on varustatud selgesõnalise IPv6 blokeerimise lülitiga, mis teeb sama tööd.
Kontrollige seda nagu leket
Tõstke tunnel ja lugege olekut, selle asemel et lülitile loota. ip -6 route show default peaks näitama ühte vaikimisi teed ja ip -6 route get peaks LAN-ist väljaspool oleva sihtkoha puhul nimetama tunneliseadet. Korrake mõlemat pärast ühenduse katkestamist: tunnelist üle elav vaikimisi tee on viga, mida otsisite.
Seejärel testige teist suunda. Kohaliku võrgu hostist jõudke kliendini tema kohaliku IPv6-aadressi kaudu. Kui see lakkab töötamast, ei olnud tingimus kolm kunagi täidetud, ükskõik mida marsruuditabel siis väitis.
Kirjutage tulemus sinna, kust järgmine inimene selle leiab: millised prefiksid jäävad kohalikuks, miks ja mida klient pärast ühenduse katkestamist teeb. Kaks rida runbookis säästavad järgmise inseneri lõpp-punkti silmuse keskööl uuesti avastamisest.