James Bottomleys tilfeldige Sider

en av De siste erfaringene Fra Linux Rørleggere Conference overbeviste meg om at hvis du vil være en del av en ekte Åpen kildekode WebRTC-basert peer to peer audio/video-interaksjon, trenger du en internett-adresse som ikke ligger bak EN NAT. I virkeligheten fungerer protokollen fortsatt så lenge du kan kontakte en stun-server for å fortelle deg hva din eksterne adresse er og muligens en turn-server for å proxy pakkene hvis begge endepunktene Er NATed, men alt dette søker eksterne servere tar tid som de av dere som klaget over ekkotesten funnet. Løsningen på Alt Dette er å koble Over IPv6 som har en adresseplass som er stor nok til å støtte hver enhet på planeten som har sin egen adresse. Alle Moderne Linux-distribusjoner støtter IPv6 ut Av boksen, så sjansene er at du faktisk ved et uhell har brukt det uten å merke seg, noe som er en av Skjønnhetene Til IPv6 autoconfiguration (det skal bare fungere).

men jeg har nylig flyttet, og så mistet min fiber internett-tilkobling til kabel, men kabel som kom Med En IPv6-adresse, så dette er min historie om å få alt til å fungere. Hvis du ikke bryr deg om protokollens grunnleggende, kan du hoppe ned til hvordan. Denne guiden er også fokusert på en» dual stack » konfigurasjon (en som har Både IPv6 og IPv4 adresser). Rene IPv6-konfigurasjoner er mulige, men fordi enkelte deler av internett fortsatt Bare Er IPv4, er de ikke komplette med mindre Du setter Opp En IPv4-innkapslende bro.

Grunnleggende Om IPv6

IPv6 har vært en moden protokoll i lang tid nå, så jeg antok feilaktig at det ville være en masse gode HOWTOs om det. Men etter å ha lest 20 forskjellige beskrivelser av Hvordan IPv6 128 bit adresseplass fungerer og ikke mye annet, ga jeg opp i fortvilelse og leste Rfcene i stedet. Jeg antar at du har lest minst en av DISSE HOWTOS, så jeg trenger ikke å gå Inn I IPv6-adresseprefikser, suffikser, grensesnitt-Ider eller undernett, så jeg begynner der de fleste HOWTOs slutter.

Hvordan Fungerer IPv6 Bare?

I IPv4 er det en protokoll som heter dynamic host configuration protocol (DHCP), så lenge du finner EN DHCP-server, kan du få all informasjonen du trenger for å koble til (lokal adresse, router, DNS-server, tidsserver, etc). Denne tjenesten må imidlertid settes opp av Noen, Og IPv6 er utformet for å konfigurere et nettverk uten Det.

DEN første forutsetningen IPv6 StateLess Address AutoConfiguration (SLAAC) gjør er at Den er på et / 64-delnett(så hvert delnett i IPv6 inneholder 1010 ganger så mange adresser som Hele IPv4-internett). Dette betyr at siden de fleste virkelige undernett inneholder < 100 systemer, kan de ganske enkelt velge en tilfeldig adresse og være svært lite sannsynlig å kollidere med de eksisterende systemene. Faktisk er det tre nåværende måter å velge en adresse på i /64:

  1. EUI-64 (RFC 4291) basert PÅ MAC-adressen som i utgangspunktet ER MAC med en bit vendt og ff: fe plassert i midten.
  2. Stabil Privat (RFC 7217) som genererer fra en hash basert på en statisk nøkkel, grensesnitt, prefiks og en teller (telleren økes hvis det er et sammenstøt). Disse er foretrukket TIL EUI-64 som gir bort noen konfigurasjon knyttet TIL MAC-adressen (for eksempel hvilken type nettverkskort du har)
  3. Personvernutvidelsesadresser (RFC 4941) som er svært lik stabile private adresser, bortsett fra at De endres over Tid ved Hjelp Av ipv6-adresseavskrivningsmekanismen og er for klientsystemer som ønsker å bevare anonymitet.

det neste problemet I Linux er hvem konfigurerer grensesnittet? Kjernen IPv6 stabelen er faktisk designet for å gjøre det, og vil med mindre beskjed om ikke å, men de fleste av de moderne nettverkskontrollere (Som NetworkManager) er kontroll freaks og slå av kjernens auto konfigurasjon slik at de kan gjøre det selv. De har også standard til stabil privat adressering ved hjelp av en statisk hemmelig opprettholdt i filsystemet (/var/lib/NetworkManager / secret_key).

Den neste tingen å forstå Om IPv6-adresser er at De er delt inn i omfang, det viktigste er link local (unrouteable) adresser som konvensjonelt alltid har prefikset fe80:: / 64. Link local-adressen er konfigurert først ved hjelp av en av metodene ovenfor og brukes deretter til å undersøke nettverket.

Multicast og Neighbour Discovery

I Motsetning Til IPv4 Har IPv6 ingen kringkastingskapasitet, slik at all oppdagelse gjøres av multicast. Noder som kommer opp på nettverket, abonnerer på bestemte multicast-adresser, via spesielle pakker oppfanget av bryteren, og vil ikke motta noen multicast som de ikke abonnerer på. Konvensjonelt har alle link local multicast-adresser prefikset ff02:: / 64(FOR andre typer multicast-adresser, SE RFC 4291). Alle noder abonnerer på» alle noder » multicast-adressen ff02::1 og må også abonnere på sin egen forespurte node multicast-adresse på ff02::1: ffXX: XXXX der de siste 24 bitene tilsvarer de laveste 24 bitene I nodens IPv6-adresse. Dette sistnevnte er for å unngå forstyrrelsen som pleide å forekomme I IPv4 fra ARP-sendinger, fordi nå kan du målrette en bestemt delmengde av noder for adresseoppløsning.

ipv6 address resolution protocol kalles Neighbour Solicitation (Ns), beskrevet i RFC 4861 og den brukes med SLAAC beskrevet i RFC 4862, og gjøres ved å sende en multicast til nabooppfordringsadressen til noden du vil oppdage, som inneholder hele IPv6-adressen du vil vite.

når en node har valgt sin lokale linkadresse, sender den først EN ns-pakke til den valgte adressen for å se om noen svarer, og hvis ingen gjør det, antar det AT det ER OK å beholde det ellers følger det kollisjonsavviksprotokollen knyttet til sin spesielle adresseform. Når den har funnet en unik adresse, konfigurerer noden denne linken lokal adresse og ser etter en ruter. Merk at hvis Et IPv6-nettverk ikke er til stede, stopper discovery her, og derfor viser de fleste nettverksgrensesnitt alltid en link lokal IPv6-adresse.

Router Discovery

når noden har sin egen unike link lokal adresse, bruker den den til å sende UT Ruter Oppfordring (RS) pakker til» alle rutere » multicast adresse ff02::2. Hver ruter på nettverket reagerer med En Ruterannonse (RA) pakke som beskriver (blant annet) ruterenes levetid, nettverket MTU, et sett med en eller flere prefikser ruteren er ansvarlig for, ruterenes koblingsadresse og et sett med alternativflagg, inkludert m (Administrert) og O (Annen Konfigurasjon) flagg og muligens et sett MED DNS-servere.

hvert annonserte prefiks inneholder prefikset og prefikslengden, et sett med flagg inkludert a (autonom konfigurasjon) Og L (link local) og et sett med livstider. Link Lokale prefikser forteller deg hvilke globale prefikser de lokale nettverksbrukerne (det kan være flere) og om DU har lov TIL Å gjøre SLAAC på det globale prefikset (Hvis a-flagget er klart, må du spørre ruteren om en adresse ved Hjelp Av DHCPv6). Hvis ruteren har en levetid som ikke er null, kan du anta at det er en standard ruter for delnettet.

nå som noden har oppdaget en eller flere rutere, kan den konfigurere sin egen globale adresse (merk at Hver ipv6-rutbar node har minst to adresser: en link lokal og en global). Hvordan det gjør dette, avhenger av ruteren og prefiksflaggene

Global Adressekonfigurasjon

det første en node trenger å vite er om DU skal bruke SLAAC for den globale adressen Eller DHCPv6. Dette er helt bestemt Av a-flagget til et hvilket som helst link local prefiks i RA-pakken. Hvis A er satt, kan noden bruke SLAAC, og Hvis A er klar, må noden bruke DHCPv6 for å få en adresse. Hvis A er satt Og Også M (Administrert) flagget da noden kan bruke ENTEN SLAAC Eller DHCPv6 (eller begge) for å få en adresse, og Hvis m flagget er klart, men O (Andre Config) flagget er til stede da noden må bruke SLAAC, men Kan bruke DHCPv6 for å få annen informasjon om nettverket (vanligvis DNS).

når noden har en global adresse i nå trenger en standard rute. Den danner standard ruteliste fra RA-pakker som har en ikke-null router Levetid. Alle disse er konfigurert som standardruter til deres link lokale adresse MED RA spesifisert hop count. Til slutt kan noden legge til spesifikke prefiksruter fra RA-pakker med null router Levetid, men ikke koble lokale prefikser.

DHCPv6 Er en ganske kompleks konfigurasjonsprotokoll (SE RFC 8415), men den kan ikke angi enten prefikslengde (som betyr at alle oppnådde adresser er konfigurert som /128) eller ruter (disse må hentes FRA RA-pakker). Dette fører til en subtilitet av utgående adressevalg ved at Den mest spesifikke alltid er foretrukket, så hvis du konfigurerer BÅDE AV SLAAC og DHCPv6, VIL SLAAC-adressen bli lagt til som /64 og DHCPv6-adressen som /128, noe som betyr at din utgående IP-adresse alltid vil Være DHCPv6-en (selv om en ekstern enhet kjenner DIN SLAAC-adresse, vil de fortsatt kunne nå deg på den).

Hvordan: Konfigurere Din Egen Hjemmeruter

En Av tingene du tror fra ovenstående Er At IPv6 alltid automatisk konfigurerer, og mens det er sant at hvis du bare kobler den bærbare datamaskinen til ethernet-porten til et kabelmodem, vil det bare automatisk konfigurere, de fleste har et mer komplekst hjemmeoppsett som involverer en ruter, som trenger litt spesiell coaxing før det vil fungere. Det betyr at du trenger å få flere funksjoner fra DIN ISP ved hjelp av spesielle DHCPv6 forespørsler.

denne delen er skrevet fra mitt eget synspunkt: Jeg har et ganske komplekst IPv4-nettverk som har et helt åpent, men båndbredde begrenset (til usikre klienter) wifi-nettverk, og flere beskyttede interne nettverk (en for laboratoriet mitt, en for telefonene mine og en for husholdningenes videokameraer), så jeg trenger minst 4 subnett for å gi hver enhet i mitt hjem En IPv6-adresse. Jeg bruker Også OpenWRT som ruterdistribusjon, så All IPv6-konfigurasjonsinformasjon er svært spesifikk for Den (selv om det bør bemerkes at Ting Som NetworkManager også kan gjøre alt dette hvis du er forberedt på å grave i dokumentasjonen).

Prefiks Delegasjon

Siden DHCPv6 bare deler ut en / 128-adresse, er dette ikke tilstrekkelig fordi DET ER ip-adressen til ruteren selv. For å bli en ruter må du be om delegering av En Del Av IPv6-adresseområdet via Identity Association For Prefix Delection (Ia_pd) – alternativet Til DHCPv6. Når dette er gjort ruteren IP-adressen vil bli antatt AV ISP å være ruten for alle delegerte prefikser. Subtiliteten her er at hvis du vil ha mer enn ett delnett, må du be om det spesifikt (klienten må spesifisere den nøyaktige prefikslengden den leter etter) og siden det er en prefikslengde, og standard delnett skal være / 64, hvis du ber om en prefikslengde på 64, har du bare ett delnett. Hvis du ber om 63, har du 2 og så videre. Problemet er hvordan vet DU hvor mange subnett ISP er villig til å gi deg? Dessverre er det ingen måte å finne dette på (jeg måtte gjøre et internett-søk for å oppdage AT MIN ISP, Comcast, var villig til å delegere en prefikslengde på 60, noe som betyr 16 delnett). Hvis søk ikke forteller deg hvor mye INTERNETT-LEVERANDØREN din er villig til å delegere, kan du prøve å starte på 48 og jobbe deg til 64 i trinn på 1 for å se hva den største delegasjonen du kan komme unna med (Det har vært rapporter om At Internett-Leverandører låser deg ved din første delegerte prefikslengde, så ikke start på 64). Den endelige finessen er at prefikset du er delegert, kanskje ikke er det samme prefikset som adressen din ruteren oppnådde (min nåværende comcast-konfigurasjon har ruteren min på 2001:558:600a:… men mitt delegerte prefiks er 2601:600:8280:66d0:/60). Du kan kjøre odhcp6c manuelt med – p-alternativet hvis DU må undersøke DIN ISP for å finne ut hvilken størrelse prefiks du kan få.

Konfigurere Ruteren For Prefiksdelegering

I OpenWRT-termer styres ruteren WAN DHCP(v6) – konfigurasjonen av /etc/default/network. Du har allerede ET WAN-grensesnitt (sannsynligvis kalt ‘wan’) For DHCPv4, slik at du bare legger til et ekstra wan6-grensesnitt for å få en Ekstra IPv6 og bli dual stack. I min konfigurasjon ser dette ut som

config interface 'wan6' option ifname '@wan' option proto 'dhcpv6' option reqprefix 60

den lille odditeten er ifname: @wan forteller bare config å bruke samme ifname som’ wan ‘ – grensesnittet. Å navngi det på denne måten er viktig hvis wan er en bro, men det er god praksis uansett. Det andre alternativet ‘reqprefix’ forteller DHCPv6 å be om en / 60 prefiks delegering.

Utdeling Av Delegerte Prefikser

dette viser seg å være bemerkelsesverdig enkelt. For det første må du tilordne et delegert prefiks til hvert av de andre grensesnittene på ruteren, men du kan gjøre dette uten å legge til et Nytt OpenWRT-grensesnitt for hver av dem. Mitt interne IPv4-nettverk har alle statiske adresser, så du legger til tre direktiver til hvert grensesnitt:

config interface 'lan' ... interface designation (bridge for me) option proto 'static' ... ipv4 addresses option ip6assign '64' option ip6hint '1' option ip6ifaceid '::ff'

ip6assign ‘ N ‘ betyr at du er a / n-nettverk (så dette er alltid /64 for meg) og ip6hint ‘N’ betyr bruk N som subnet-id og ip6ifaceid ‘s’ betyr bruk S Som IPv6-suffikset (dette er standard til ::1 så hvis du ER OK med det, utelat dette direktivet). Så gitt jeg har et 2601:600:8280:66d0::/60 prefiks, vil den globale adressen til dette grensesnittet være 2601:600:8280:66d1:: ff. Nå syretesten, hvis du har dette riktig, bør denne globale adressen være pingbar fra hvor Som Helst På IPv6 internett (hvis Det ikke er det, er det sannsynligvis et brannmurproblem, se nedenfor).

Annonsering Som En Ruter

bare å få delegert et delegert prefiks på et lokalt rutergrensesnitt er utilstrekkelig . Nå må du få ruteren til å svare På Ruteroppfordringer på ff02:: 2 og eventuelt Gjøre DHCPv6. Dessverre Har OpenWRT to mekanismer for å gjøre dette, vanligvis begge installert: odhcpd og dnsmasq. Det jeg fant var at ingen av mine direktiver i/etc/config / dhcp ville tre i kraft før jeg deaktiverte odhcpd helt

/etc/init.d/odhcpd stop/etc/init.d/odhcpd disable

og siden jeg bruker dnsmasq mye andre steder (delt DNS for interne/eksterne nettverk), passet det meg bra. Jeg vil først beskrive hvilke alternativer du trenger i dnsmasq og for det andre hvordan du kan oppnå dette ved å bruke oppføringer I OpenWRT / etc / config / dhcp-filen (jeg finner dette nyttig fordi det alltid er lurt å sjekke Hva OpenWRT har satt i /var/etc/dnsmasq.conf fil).

det første dnsmasq-alternativet du trenger er ‘enable-ra’, som er en global parameter som instruerer dnsmasq til å håndtere ruterannonser. Den neste parameteren du trenger er per-grensesnittet ‘ra-param’ som spesifiserer de globale ruterannonseparametrene og må vises en gang for hvert grensesnitt du vil annonsere på. Endelig tillater alternativet ‘dhcp-range’ mer detaljert konfigurasjon av TYPEN RA-flagg og Valgfri DHCPv6.

SLAAC Eller DHCPv6 (eller begge)

på mange måter er dette et spørsmål om personlig valg. Hvis DU tillater SLAAC, kan verter som vil bruke personvernutvidelsesadresser (Som Android-telefoner) gjøre det, noe som er bra. Hvis Du også tillater DHCPv6-adressevalg, vil du få en liste over adresser tildelt verter, og dnsmasq vil GJØRE DNS-oppløsning for dem (selv om DET kan GJØRE DNS for SLAAC-adresser forutsatt at det blir fortalt om dem). En spesiell tag ‘constructor’ finnes for alternativet ‘dhcp-range’ som forteller den å konstruere den medfølgende adressen (FOR ENTEN RA eller DHCPv6) Fra IPv6 global prefiks for det angitte grensesnittet, som er hvordan du sender ut våre delegerte prefiksadresser. Modusene for ‘dhcp-range’ er ‘ra-only’ for å forby DHCPv6 helt, ‘slaac’ for å tillate DHCPv6-adressevalg og ‘ra-stateless’ for å forby DHCPv6-adressevalg, men tillate Annen DHCPv6-konfigurasjonsinformasjon.

Basert på prøving og feiling (og til slutt undersøke skripting i / etc / init.OpenWRT-alternativene som kreves for å oppnå de ovennevnte dnsmasq-alternativene er

config dhcp lan option interface lan option start 100 option limit 150 option leasetime 1h option dhcpv6 'server' option ra_management '1' option ra 'server'

med ‘ra_management’ som nøkkelalternativ med ‘ 0 ‘ som betyr SLAAC med DHCPv6-alternativer, ‘1’ som betyr SLAAC med full DHCPv6, ‘2’ som betyr Bare DHCPv6 og ‘3’ som betyr BARE SLAAC. En Annen openwrt oddity er at det ikke ser ut til å være en måte å sette leieavtalen på: det er alltid standard til enten statisk eller ::1000 til ::ffff.

Brannmurkonfigurasjon

en av tingene som reiser folk opp er At Linux har to helt separate brannmurer: En For IPv4 og En For IPv6. Hvis du noen gang har skrevet noen tilpassede regler for dem, er sjansene du gjorde det I OpenWRT / etc / firewall.brukerfil og du brukte kommandoen iptables, noe som betyr at du bare la reglene Til IPv4-brannmuren. For Å legge til Samme regel For IPv6 må du duplisere den ved hjelp av ip6tables-kommandoen. Et annet betydelig problem, hvis du bruker en tilkoblingssporing for portknock-deteksjon som jeg er, er At Linux-tilkoblingssporing har problemer med IPv6 multicast, så pakker som går ut til en multicast, men kommer tilbake som unicast (som de fleste oppdagelsesprotokollene gjør) får feil conntrack-tilstand. For å fikse dette måtte jeg til slutt ha EN INNGANGSREGEL som bare aksepterte Alle ICMPv6 Og DHCPv6 (udp-porter 546 og 547 ). De andre brannmurhensynene er at nå har alle sin EGEN IP-adresse, det er ikke nødvendig Å NAT (OpenWRT kan overtales til å ta vare på dette automatisk, men hvis Du dupliserer IPv4-reglene manuelt, må DU ikke duplisere nat-reglene). Den endelige er sannsynligvis mer anvendelig for meg: mitt wifi-grensesnitt er designet for å være en forlengelse av det lokale internett, og alle maskiner som kobler seg til det, forventes å kunne beskytte seg selv, siden de vil migrere til slike fiendtlige miljøer som flyplass wifi, og dermed gjør jeg fullstendig eksponering av wifi-tilkoblede enheter til det generelle internett for alle porter, inkludert portprober. For mine interne enheter har jeg EN RELATERT, ETABLERT regel for å sikre at de ikke er probed siden de ikke er laget for å migrere fra det interne nettverket.

nå problemene Med OpenWRT: siden DU vil HA NAT På IPv4, men Ikke På IPv6, må du ha to separate wan-soner for Dem: hvis du prøver å kombinere dem (som jeg først gjorde), Vil OpenWRT legge Til En IPv6-ctstate UGYLDIG regel som forhindrer Nabooppdagelse i å fungere på grunn Av conntrack-problemene Med IPv6 multicast, så mine wan-soner er (vel, dette er en løgn fordi brannmuren min nå er håndlaget, men dette er det jeg sjekket jobbet før jeg satte den håndlagde brannmuren på plass):

config zone option name 'wan' option network 'wan' option masq '1' ...config zone option name 'wan6' option network 'wan6' ...

og rutingsreglene for lan-sonen (fullt tilgjengelig) er

config forwarding option src 'lan' option dest 'wan'config forwarding option src 'lan' option dest 'wan6'config forwarding option src 'wan6' option dest 'lan'

Å Sette den sammen: Få Klientene IPv6 Tilkoblet

Nå som du har ruteren konfigurert, bør alt bare fungere. Hvis det gjorde det, bør ditt bærbare wifi-grensesnitt nå ha en global IPv6-adresse

ip -6 address show dev wlan0

hvis det kommer tilbake tomt, må Du aktivere IPv6 på distribusjonen din. Hvis Den bare har en link local-adresse (fe80:: prefiks), Er IPv6 aktivert, Men ruteren annonserer ikke (mistenker brannmurproblemer med oppdagelsespakker eller dnsmasq-feilkonfigurasjon). Hvis du ser en global adresse, er du ferdig. Nå bør du kunne gå til https://testv6.com og sikre en 10/10 score.

den siste biten i puslespillet er å foretrekke Din Nye IPv6-tilkobling når DNS tilbyr Et Utvalg Av IPv4-eller IPv6-adresser. Alle Moderne Linux-klienter bør foretrekke IPv6 når de er tilgjengelige hvis de er koblet til et dual stack-nettverk, så prøv … www.google.com Og se En IPv6-adresse du er ferdig med. Hvis ikke, må Du komme inn I den mørke verden Av IPv6-adressemerking (RFC 6724) og gai.conf.

Konklusjon

Å Legge Til IPv6 i og eksisterende IPv4-oppsett er for øyeblikket ikke en enkel plug in and go-operasjon. Men forutsatt at du forstår en håndfull forskjeller mellom de to protokollene, er det heller ikke et uoverstigelig problem. Jeg har også glattet over mange av problemene du kan støte på MED DIN ISP. Noen har rapportert at Deres Internett-Leverandører bare deler Ut En IPv6-adresse uten prefiksdelegasjon, i så fall tror jeg å finne en ny ISP ville være klokest. Andre rapporterer at INTERNETT-LEVERANDØREN bare vil delegere ett / 64 prefiks, slik at valget ditt her er enten å bare kjøre ett subnett (sannsynligvis tilstrekkelig for mange hjemmenettverk), eller subnett på større enn /64 og forby SLAAC, som definitivt ikke er en anbefalt konfigurasjon. Men forutsatt AT INTERNETT-LEVERANDØREN din er rimelig, bør dette blogginnlegget i det minste hjelpe deg med å komme i gang.

Write a Comment

Din e-postadresse vil ikke bli publisert.