James Bottomley random Pages

una dintre experiențele recente ale Conferinței instalatorilor Linux m-a convins că, dacă doriți să faceți parte dintr-o adevărată interacțiune audio/video bazată pe WebRTC bazată pe peer to peer, aveți nevoie de o adresă de internet care nu se află în spatele unui NAT. În realitate, protocolul funcționează în continuare atâta timp cât puteți contacta un server de asomare pentru a vă spune care este adresa dvs. externă și, eventual, un server de viraj pentru a proxy pachetele dacă ambele puncte finale sunt Natate, dar toate acestea caută servere externe necesită timp ca aceia dintre voi care s-au plâns de testul echo găsit. Soluția la toate acestea este conectarea prin IPv6, care are un spațiu de adrese suficient de mare pentru a susține fiecare dispozitiv de pe planetă având propria adresă. Toate distribuțiile Linux moderne acceptă IPv6 din cutie, astfel încât șansele sunt că l-ați folosit accidental fără să observați vreodată, ceea ce este una dintre frumusețile autoconfigurării IPv6 (ar trebui să funcționeze doar).

cu toate acestea, m-am mutat recent și mi-am pierdut conexiunea la internet prin fibră la cablu, dar cablu care a venit cu o adresă IPv6, deci aceasta este povestea mea de a face totul să funcționeze. Dacă nu vă pasă cu adevărat de elementele de bază ale protocolului, puteți sări la cum. Acest ghid este, de asemenea, axat pe o configurație „dual stack” (una care are atât adrese IPv6, cât și adrese IPv4). Configurațiile IPv6 Pure sunt posibile, dar deoarece unele părți ale Internetului sunt încă numai IPv4, acestea nu sunt complete decât dacă configurați o punte de încapsulare IPv4.

elementele de bază ale IPv6

IPv6 a fost un protocol matur pentru o lungă perioadă de timp acum, așa că am presupus în mod eronat că ar fi o sarcină de bun HOWTOs despre el. Cu toate acestea, după ce am citit 20 de descrieri diferite despre modul în care funcționează spațiul de adrese IPv6 128 și nu prea mult, am renunțat la disperare și am citit în schimb RFC-urile. Voi presupune că ați citit cel puțin unul dintre aceste HOWTOS, așa că nu trebuie să intru în prefixe de adrese IPv6, sufixe, ID-uri de interfață sau subrețele, așa că voi începe de unde se termină majoritatea HOWTOs.

cum funcționează IPv6?

în IPv4 există un protocol numit Dynamic Host configuration protocol (DHCP), astfel încât, atâta timp cât puteți găsi un server DHCP, puteți obține toate informațiile de care aveți nevoie pentru a vă conecta (adresa locală, router, server DNS, server de timp, etc). Cu toate acestea, acest serviciu trebuie să fie configurat de cineva și IPv6 este proiectat pentru a configura o rețea fără ea.

prima presupunere IPv6 StateLess address AutoConfiguration (SLAAC) face este că este pe o /64 subrețea (astfel încât fiecare subrețea în IPv6 conține 1010 ori mai multe adrese ca întregul Internet IPv4). Aceasta înseamnă că, deoarece majoritatea subrețelelor reale conțin <100 de sisteme, ele pot alege pur și simplu o adresă aleatorie și este foarte puțin probabil să se ciocnească cu sistemele existente. De fapt, există trei moduri actuale de a alege o adresă în /64:

  1. EUI-64 (RFC 4291) bazat pe adresa MAC, care este practic MAC-ul cu un bit răsturnat și FF:fe plasat în mijloc.
  2. privat stabil (RFC 7217) care generează dintr-un hash bazat pe o cheie statică, interfață, prefix și un contor (contorul este incrementat dacă există o ciocnire). Acestea sunt preferate celor EUI-64 care oferă orice configurație asociată adresei MAC (cum ar fi ce tip de placă de rețea aveți)
  3. adrese de extensie de Confidențialitate (RFC 4941) care sunt foarte asemănătoare cu adresele private stabile, cu excepția faptului că se schimbă în timp folosind mecanismul de depreciere a adreselor IPv6 și sunt pentru sistemele client care doresc să păstreze anonimatul.

următoarea problemă în Linux este cine configurează interfața? Stiva Kernel IPv6 este de fapt proiectat pentru a face acest lucru, și va excepția cazului în care a spus să nu, dar cele mai multe dintre controlerele de rețea moderne (cum ar fi NetworkManager) sunt nebuni de control și opriți configurația automată a kernel-ului, astfel încât acestea să poată face ei înșiși. De asemenea, acestea sunt implicite pentru adresarea privată stabilă folosind un secret static menținut în sistemul de fișiere (/var/lib/NetworkManager/secret_key).

următorul lucru de înțeles despre adresele IPv6 este că acestea sunt împărțite în domenii, cea mai importantă fiind adresele locale de legătură (nerutabile) care au în mod convențional întotdeauna prefixul fe80::/64. Adresa locală de legătură este configurată mai întâi folosind una dintre metodele de mai sus și apoi utilizată pentru a sonda rețeaua.

Multicast și Neighbour Discovery

spre deosebire de IPv4, IPv6 nu are capacitate de difuzare, astfel încât toate descoperirile se fac prin multicast. Nodurile care apar în rețea se abonează la anumite adrese multicast, prin pachete speciale interceptate de switch și nu vor primi niciun multicast la care nu sunt abonați. În mod convențional, toate adresele multicast locale link au prefixul ff02::/64 (pentru alte tipuri de adrese multicast vezi RFC 4291). Toate nodurile se abonează la adresa multicast” toate nodurile ” ff02:: 1 și, de asemenea, trebuie să se aboneze la propria adresă multicast nod solicitată la ff02::1:ffXX:XXXX unde ultimii 24 de biți corespund celor mai mici 24 de biți ai adresei IPv6 a nodului. Aceasta din urmă este de a evita perturbarea care a avut loc în IPv4 din emisiunile ARP, deoarece acum puteți viza un subset specific de noduri pentru rezoluția adresei.

protocolul de rezoluție a adresei IPV6 se numește solicitare vecină (ns), descris în RFC 4861 și este utilizat cu SLAAC descris în RFC 4862 și se face prin trimiterea unui multicast la adresa de solicitare vecină a nodului pe care doriți să îl descoperiți conținând adresa IPv6 completă pe care doriți să o cunoașteți, un nod cu adresa potrivită răspunde cu adresa stratului de legătură (MAC) într-un pachet de publicitate vecină (NA).

odată ce un nod și-a ales adresa locală de legătură, trimite mai întâi un pachet NS la adresa aleasă pentru a vedea dacă cineva răspunde și dacă nimeni nu o face presupune că este OK să o păstreze altfel urmează protocolul de evitare a coliziunii asociat cu forma sa particulară de adresă. Odată ce a găsit o adresă unică, nodul configurează această adresă locală de legătură și caută un router. Rețineți că, dacă o rețea IPv6 nu este prezentă, discovery se oprește aici, motiv pentru care majoritatea interfețelor de rețea afișează întotdeauna o adresă IPv6 locală de legătură.

Router Discovery

odată ce nodul are propria adresă locală de legătură unică, îl folosește pentru a trimite pachete de solicitare a routerului (RS) la adresa multicast „toate routerele” ff02::2. Fiecare router din rețea răspunde cu un pachet de publicitate pentru Router (RA) care descrie (printre altele) durata de viață a routerului, MTU-ul rețelei, un set de unul sau mai multe prefixe pentru care routerul este responsabil, adresa de legătură a routerului și un set de steaguri de opțiuni, inclusiv steagul M (gestionat) și o (altă configurație) și, eventual, un set de servere DNS.

fiecare prefix anunțat conține prefixul și lungimea prefixului, un set de steaguri, inclusiv a (configurație autonomă) și L (link local) și un set de vieți. Link prefixele locale vă spun ce prefixe globale utilizatorii rețelei locale (pot exista mai mulți) și dacă vi se permite să faceți SLAAC pe prefixul global (dacă steagul A este clar, trebuie să cereți routerului o adresă folosind DHCPv6). Dacă routerul are o durată de viață diferită de zero, puteți presupune că este un router implicit pentru subrețea.

acum că nodul a descoperit unul sau mai multe routere, acesta își poate configura propria adresă globală (rețineți că fiecare nod rutabil IPv6 are cel puțin două adrese: o legătură locală și una globală). Cum se face acest lucru depinde de router și prefix steaguri

Global Address Configuration

primul lucru pe care un nod trebuie să știe este dacă să folosească SLAAC pentru adresa globală sau DHCPv6. Acest lucru este determinat în întregime de steagul a al oricărui prefix Local link din pachetul RA. Dacă A este setat, atunci nodul poate folosi SLAAC și dacă A este clar, atunci nodul trebuie să utilizeze DHCPv6 pentru a obține o adresă. Dacă A este setat și, de asemenea, steagul M (gestionat), atunci nodul poate utiliza fie SLAAC, fie DHCPv6 (sau ambele) pentru a obține o adresă și dacă steagul M este clar, dar steagul O (alte Config) este prezent, atunci nodul trebuie să utilizeze SLAAC, dar poate utiliza DHCPv6 pentru a obține alte informații despre rețea (de obicei DNS).

odată ce nodul are o adresă globală în acum are nevoie de un traseu implicit. Formează lista de rute implicită din pachetele RA care au o durată de viață a routerului diferită de zero. Toate acestea sunt configurate ca rute implicite la adresa lor locală de legătură cu numărul de hamei specificat RA. În cele din urmă, nodul poate adăuga rute prefix specifice din pachetele RA cu zero durate de viață ale routerului, dar prefixe locale fără legătură.

DHCPv6 este un protocol de configurare destul de complex (vezi RFC 8415), dar nu poate specifica nici lungimea prefixului (adică toate adresele obținute sunt configurate ca /128), nici rutele (acestea trebuie obținute din pachetele RA). Acest lucru duce la o subtilitate a selecției adresei de ieșire prin faptul că cea mai specifică este întotdeauna preferată, deci dacă configurați atât prin SLAAC, cât și prin DHCPv6, adresa SLAAC va fi adăugată ca /64 și adresa DHCPv6 ca /128, ceea ce înseamnă că adresa dvs. IP de ieșire va fi întotdeauna DHCPv6 (deși dacă o entitate externă vă cunoaște adresa SLAAC, ei vor putea totuși să vă contacteze).

Cum: Configurarea propriului Router de acasă

unul dintre lucrurile pe care le-ați crede din cele de mai sus este că IPv6 configurează întotdeauna automat și, deși este adevărat că, dacă pur și simplu conectați laptopul la portul ethernet al unui modem de cablu, acesta se va configura automat, majoritatea oamenilor au o configurare mai complexă la domiciliu care implică un router, care are nevoie de o anumită coaxare specială înainte de a funcționa. Asta înseamnă că trebuie să obțineți funcții suplimentare de la ISP-ul dvs. folosind solicitări speciale DHCPv6.

această secțiune este scrisă din punctul meu de vedere: Am o rețea IPv4 destul de complexă, care are o rețea wifi complet deschisă, dar cu lățime de bandă limitată (la clienți neîncrezători) și mai multe rețele interne protejate (una pentru laboratorul meu, una pentru telefoanele mele și una pentru camerele video de uz casnic), așa că am nevoie de cel puțin 4 subrețele pentru a oferi fiecărui dispozitiv din casa mea o adresă IPv6. De asemenea, folosesc OpenWRT ca distribuție a routerului meu, astfel încât toate informațiile de Configurare IPv6 sunt foarte specifice acestuia (deși trebuie remarcat faptul că lucruri precum NetworkManager pot face toate acestea dacă sunteți pregătit să săpați în documentație).

delegarea prefixului

deoarece DHCPv6 distribuie doar o adresă /128, acest lucru nu este suficient, deoarece este adresa IP a routerului în sine. Pentru a deveni un router, trebuie să solicitați delegarea unei părți din spațiul de adrese IPv6 prin opțiunea Identity Association for Prefix Delection (Ia_pd) a DHCPv6. Odată ce se face acest lucru, adresa IP a routerului va fi presupusă de ISP ca fiind ruta pentru toate prefixele delegate. Subtilitatea aici este că, dacă doriți mai mult de o subrețea, trebuie să o solicitați în mod specific (clientul trebuie să specifice lungimea exactă a prefixului pe care îl caută) și, deoarece este o lungime a prefixului, iar subrețeaua dvs. implicită ar trebui să fie /64, dacă solicitați o lungime a prefixului de 64, aveți o singură subrețea. Dacă solicitați 63 Aveți 2 și așa mai departe. Problema este cum știi cât de multe subrețele ISP este dispus să vă dea? Din păcate, nu există nicio modalitate de a găsi acest lucru (a trebuit să fac o căutare pe internet pentru a descoperi că ISP-ul meu, Comcast, era dispus să delege o lungime de prefix de 60, adică 16 subrețele). Dacă căutarea nu vă spune cât de mult ISP-ul dvs. este dispus să delege, puteți încerca să începeți de la 48 și să vă deplasați la 64 în trepte de 1 pentru a vedea cu ce cea mai mare delegație puteți scăpa (au existat rapoarte despre ISP-uri care vă blochează la prima lungime a prefixului delegat, deci nu începeți la 64). Subtilitatea finală este că prefixul pe care l-ați delegat poate să nu fie același prefix cu adresa obținută de routerul dvs. (configurația mea curentă comcast are routerul meu la 2001:558:600A:… dar prefixul meu delegat este 2601:600:8280:66d0:/60). Notă puteți rula odhcp6c manual cu opțiunea-P dacă trebuie să sondeze ISP-ul pentru a afla ce dimensiune de prefix puteți obține.

configurarea routerului pentru delegarea prefixului

în termeni OpenWRT, configurația routerului WAN DHCP(v6) este controlată de /etc/default/network. Veți avea deja o interfață WAN (probabil numită ‘wan’) pentru DHCPv4, deci pur și simplu adăugați o interfață suplimentară ‘wan6’ pentru a obține un IPv6 suplimentar și a deveni Dual stack. În configurația mea acest lucru arata ca

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

ușoară ciudățenie este ifname: @wan pur și simplu spune config să folosească același ifname ca și interfața ‘wan’. Denumirea în acest fel este esențială dacă wan-ul dvs. este un pod, dar oricum este o practică bună. Cealaltă opțiune ‘reqprefix’ îi spune DHCPv6 să solicite delegarea prefixului a /60.

predarea prefixelor delegate

acest lucru se dovedește a fi remarcabil de simplu. În primul rând, trebuie să atribuiți un prefix delegat fiecăreia dintre celelalte interfețe de pe router, dar puteți face acest lucru fără a adăuga o nouă interfață OpenWRT pentru fiecare dintre ele. Rețeaua mea IPv4 internă are toate adresele statice, deci adăugați trei directive la fiecare dintre interfețe:

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

ip6assign ‘ n ‘ înseamnă că sunteți o rețea /n (deci aceasta este întotdeauna /64 pentru mine) și ip6hint ‘n’ înseamnă utilizarea N ca id de subrețea și ip6ifaceid ‘s’ înseamnă utilizarea S ca sufix IPv6 (aceasta este implicită la ::1 deci, dacă sunteți în regulă cu asta, omiteți această directivă). Deci, având în vedere că am un prefix 2601:600:8280:66d0::/60, adresa globală a acestei interfețe va fi 2601:600:8280:66d1::ff. Acum, testul acid, dacă aveți acest drept, Această adresă globală ar trebui să poată fi pingabilă de oriunde pe internetul IPv6 (dacă nu este, este probabil o problemă de firewall, a se vedea mai jos).

publicitate ca un Router

pur și simplu obtinerea delegat un prefix delegat pe o interfață router locală este insuficientă . Acum aveți nevoie pentru a obține router-ul pentru a răspunde la solicitările Router pe ff02::2 și opțional face DHCPv6. Din păcate, OpenWRT are două mecanisme pentru a face acest lucru, de obicei ambele instalate: odhcpd și dnsmasq. Ceea ce am descoperit a fost că niciuna dintre directivele mele din /etc/config/dhcp nu va intra în vigoare până când am dezactivat odhcpd complet

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

și din moment ce folosesc dnsmasq pe scară largă în altă parte (split DNS pentru rețele interne/externe), asta mi s-a potrivit bine. Voi descrie în primul rând ce opțiuni aveți nevoie în dnsmasq și în al doilea rând cum puteți realiza acest lucru folosind intrări în fișierul OpenWRT /etc/config/dhcp (mi se pare util pentru că este întotdeauna înțelept pentru a verifica ceea ce OpenWRT a pus în /var/etc/dnsmasq.fișier conf).

prima opțiune dnsmasq de care aveți nevoie este ‘enable-ra’, care este un parametru global care instruiește dnsmasq să gestioneze reclamele routerului. Următorul parametru de care aveți nevoie este per-interfața ‘ra-param’ care specifică parametrii globali de publicitate ai routerului și trebuie să apară o dată pentru fiecare interfață pe care doriți să faceți publicitate. În cele din urmă opțiunea ‘dhcp-range’ permite configurarea mai detaliată a tipului de steaguri RA și DHCPv6 opțional.

SLAAC sau DHCPv6 (sau ambele)

în multe privințe, aceasta este o chestiune de alegere personală. Dacă permiteți SLAAC, gazdele care doresc să utilizeze adrese de extensie de confidențialitate (cum ar fi telefoanele Android) pot face acest lucru, ceea ce este un lucru bun. Dacă permiteți și selectarea adresei DHCPv6, veți avea o listă de adrese atribuite gazdelor, iar dnsmasq va face rezoluția DNS pentru ele (deși poate face DNS pentru adresele SLAAC, cu condiția să li se spună despre ele). Există o etichetă specială ‘constructor’ pentru opțiunea ‘dhcp-range’ care îi spune să construiască adresa furnizată (fie pentru RA, fie pentru DHCPv6) din prefixul Global IPv6 al interfeței specificate, care este modul în care transmiteți adresele noastre de prefix delegate. Modurile pentru ‘ dhcp-range ‘sunt’ numai ra ‘pentru a interzice DHCPv6 în întregime,’ slaac ‘pentru a permite selectarea adresei DHCPv6 și’ ra-apatrid ‘ pentru a interzice selectarea adresei DHCPv6, dar permite alte informații de configurare DHCPv6.

bazat pe încercare și eroare (și în cele din urmă examinarea scripting în /etc/init.d / dnsmasq) opțiunile OpenWRT necesare pentru realizarea opțiunilor dnsmasq de mai sus sunt

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'

cu ‘ra_management’ ca opțiune cheie cu ‘0’ însemnând SLAAC cu opțiuni DHCPv6, ‘1’ însemnând SLAAC cu DHCPv6 complet, ‘2’ însemnând doar DHCPv6 și ‘3’ însemnând doar SLAAC. O altă ciudățenie OpenWRT este că nu pare să existe o modalitate de a seta intervalul de închiriere: întotdeauna implicit fie numai static, fie ::1000 la ::ffff.

configurare Firewall

unul dintre lucrurile care îi împiedică pe oameni este faptul că Linux are două firewall-uri complet separate: unul pentru IPv4 și unul pentru IPv6. Dacă ați scris vreodată reguli personalizate pentru ele, șansele sunt că ați făcut-o în Openwrt /etc/firewall.fișier utilizator și ați folosit comanda iptables, ceea ce înseamnă că ați adăugat doar regulile la firewall-ul IPv4. Pentru a adăuga aceeași regulă pentru IPv6, trebuie să o duplicați folosind comanda ip6tables. O altă problemă semnificativă, dacă utilizați o urmărire a conexiunii pentru detectarea loviturilor de port ca mine, este că urmărirea conexiunii Linux are dificultăți cu IPv6 multicast, astfel încât pachetele care ies la un multicast, dar revin ca unicast (așa cum fac majoritatea protocoalelor de descoperire) obțin starea conntrack greșită. Pentru a remedia acest lucru, în cele din urmă a trebuit să am o regulă de intrare care să accepte toate ICMPv6 și DHCPv6 (porturile udp 546 și 547 ). Celelalte considerații ale firewall-ului sunt că acum toată lumea are propria adresă IP, nu este nevoie să NAT (OpenWRT poate fi convins să aibă grijă de acest lucru automat, dar dacă duplicați manual Regulile IPv4, nu duplicați Regulile NAT). Cel final este probabil mai aplicabil pentru mine: interfața mea wifi este concepută pentru a fi o extensie a internetului local și se așteaptă ca toate mașinile care se conectează la acesta să se poată proteja, deoarece vor migra către medii ostile precum airport wifi, astfel fac expunerea completă a dispozitivelor conectate wifi la internetul general pentru toate porturile, inclusiv sondele portuare. Pentru dispozitivele mele interne, am o regulă legată, stabilită, pentru a mă asigura că nu sunt probate, deoarece nu sunt proiectate să migreze din rețeaua internă.

acum problemele cu OpenWRT: din moment ce doriți NAT pe IPv4, dar nu pe IPv6, trebuie să aveți două zone wan separate pentru ele: dacă încercați să le combinați (așa cum am făcut mai întâi), atunci OpenWRT va adăuga o regulă nevalidă IPv6 –ctstate, care va împiedica descoperirea vecinului să funcționeze din cauza problemelor conntrack cu IPv6 multicast, deci zonele mele wan sunt (bine, aceasta este o minciună, deoarece firewall-ul meu este acum artizanal, dar asta am verificat lucrat înainte de a pune firewall-ul artizanal în loc):

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

și regulile de rutare pentru zona lan (complet accesibil) sunt

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

punerea împreună: Conectarea clienților IPv6

acum că aveți routerul configurat, totul ar trebui să funcționeze. Dacă a făcut-o, interfața dvs. wifi laptop ar trebui să aibă acum o adresă IPv6 globală

ip -6 address show dev wlan0

dacă aceasta revine goală, trebuie să activați IPv6 pe distribuția dvs. Dacă are doar o adresă locală de legătură (prefix fe80::), IPv6 este activat, dar routerul dvs. nu face publicitate (probleme suspecte de firewall cu pachete de descoperire sau configurare greșită dnsmasq). Dacă vedeți o adresă globală, ați terminat. Acum ar trebui să puteți merge la https://testv6.com și să vă asigurați un scor 10/10.

piesa finală a puzzle-ului preferă noua conexiune IPv6 atunci când DNS oferă o gamă de adrese IPv4 sau IPv6. Toți clienții Linux moderni ar trebui să prefere IPv6 atunci când sunt disponibili dacă sunt conectați la o rețea cu stivă dublă, așa că încercați … dacă faceți ping, să zicem, www.google.com și a vedea o adresă IPv6 ați terminat. Dacă nu, trebuie să intrați în lumea tulbure a etichetării adreselor IPv6 (RFC 6724) și gai.conf.

concluzie

adăugarea IPv6 și configurarea IPv4 existentă nu este în prezent un simplu plug in și go operație. Cu toate acestea, cu condiția să înțelegeți câteva diferențe între cele două protocoale, nu este nici o problemă insurmontabilă. De asemenea, am glosat multe dintre problemele pe care le-ați putea întâmpina cu ISP-ul dvs. Unii oameni au raportat că ISP-urile lor distribuie doar o adresă IPv6 fără delegare de prefix, caz în care cred că găsirea unui nou ISP ar fi cea mai înțeleaptă. Alții raportează că ISP-ul va delega doar un prefix /64, astfel încât alegerea dvs. aici este fie să rulați o singură subrețea (probabil suficientă pentru o mulțime de rețele de domiciliu), fie subrețea la mai mare de /64 și să interzică SLAAC, care cu siguranță nu este o configurație recomandată. Cu toate acestea, cu condiția ca ISP-ul dvs. să fie rezonabil, această postare pe blog ar trebui cel puțin să vă ajute să începeți.

Write a Comment

Adresa ta de email nu va fi publicată.