náhodné stránky Jamese Bottomleyho

jedna z nedávných zkušeností konference Linux Plumbers mě přesvědčila, že pokud chcete být součástí skutečné interakce peer to peer audio/video založené na open source WebRTC, potřebujete internetovou adresu, která není za NAT. V realitě, protokol stále funguje, pokud se můžete obrátit na omračující server, aby vám řekl, Jaká je vaše externí adresa, a případně obrátit server na proxy pakety, pokud jsou oba koncové body NATed, ale to vše hledá externí servery vyžaduje čas jako ti z vás, kteří si stěžovali na test echo nalezeno. Řešením toho všeho je připojení přes IPv6, které má dostatečně velký adresní prostor, aby podporovalo každé zařízení na planetě s vlastní adresou. Všechny moderní linuxové distribuce podporují IPv6 po vybalení z krabice, takže je pravděpodobné, že jste ji skutečně omylem použili, aniž byste si toho všimli, což je jedna z krás automatické konfigurace IPv6(má to prostě fungovat).

nedávno jsem se však přestěhoval, a tak jsem ztratil připojení k vláknovému internetu na kabel, ale kabel, který přišel s adresou IPv6, takže toto je můj příběh o tom, jak to všechno funguje. Pokud se opravdu nestaráte o Základy protokolu, můžete přeskočit na how. Tato příručka je také zaměřena na konfiguraci“ dual stack “ (která má adresy IPv6 i IPv4). Čisté konfigurace IPv6 jsou možné, ale protože některé části internetu jsou stále pouze IPv4, nejsou úplné, pokud nenastavíte IPv4 zapouzdřovací most.

základy IPv6

IPv6 je již dlouhou dobu vyspělým protokolem, takže jsem mylně předpokládal, že o tom bude spousta dobrých návodů. Po přečtení 20 různých popisů toho, jak funguje bitový adresový prostor IPv6 128 a nic jiného, jsem se však v zoufalství vzdal a místo toho jsem si přečetl RFC. Předpokládám, že jste si přečetli alespoň jednu z těchto návodů, takže nemusím jít do předpon adres IPv6, přípon, ID rozhraní nebo podsítí, takže začnu tam, kde končí většina návodů.

jak funguje IPv6?

v IPv4 existuje protokol s názvem dynamic host configuration protocol (DHCP), takže pokud najdete DHCP server, můžete získat všechny informace, které potřebujete k připojení (Místní adresa, router, DNS server, časový server atd.). Tuto službu však musí někdo nastavit a IPv6 je navržen tak, aby konfiguroval síť bez ní.

první předpoklad IPv6 bez státní adresy AutoConfiguration (SLAAC) je, že je v podsíti /64 (takže každá podsíť v IPv6 obsahuje 1010 krát tolik adres než celý IPv4 internet). To znamená, že protože většina reálných podsítí obsahuje <100 systémů, mohou jednoduše zvolit náhodnou adresu a je velmi nepravděpodobné, že by se střetly se stávajícími systémy. Ve skutečnosti existují tři současné způsoby výběru adresy v /64:

  1. EUI-64 (RFC 4291) na základě MAC adresy, která je v podstatě MAC s jedním bitem převráceným a ff: fe umístěným uprostřed.
  2. stabilní privátní (RFC 7217), které generují z hash na základě statického klíče, rozhraní, předpony a čítače (počítadlo se zvýší, pokud dojde ke střetu). Ty jsou upřednostňovány před těmi EUI-64, které rozdávají jakoukoli konfiguraci spojenou s MAC adresou (například jaký typ síťové karty máte)
  3. adresy rozšíření ochrany osobních údajů (RFC 4941), které jsou velmi podobné stabilním soukromým adresám, s výjimkou toho, že se v průběhu času mění pomocí mechanismu odstraňování adres IPv6 a jsou určeny pro klientské systémy, které chtějí zachovat anonymitu.

dalším problémem v Linuxu je, kdo konfiguruje rozhraní? Zásobník IPv6 jádra je skutečně navržen tak, aby to udělal, a pokud to neřekne, ale většina moderních síťových řadičů (jako je NetworkManager) jsou ovládacími zrůdy a vypínají automatickou konfiguraci jádra, aby to mohli udělat sami. Jsou také výchozí pro stabilní privátní adresování pomocí statického tajemství udržovaného v souborovém systému (/var/lib / NetworkManager / secret_key).

další věc, kterou je třeba pochopit o IPv6 adresách, je to, že jsou rozděleny do rozsahů, nejdůležitější jsou lokální (nepřehledné) adresy, které obvykle mají vždy předponu fe80:: / 64. Místní adresa odkazu je nejprve nakonfigurována pomocí jedné z výše uvedených metod a poté použita k sondování sítě.

Multicast a neighbor Discovery

na rozdíl od IPv4 nemá IPv6 žádnou vysílací schopnost, takže veškeré zjišťování se provádí pomocí multicastu. Uzly přicházející do sítě se přihlašují k určitým adresám vícesměrového vysílání prostřednictvím speciálních paketů zachycených přepínačem a neobdrží žádné vícesměrové vysílání, ke kterému nejsou přihlášeni. Obvykle mají všechny lokální vícesměrové adresy link předponu ff02:: / 64 (pro jiné typy vícesměrových adres viz RFC 4291). Všechny uzly se přihlašují k multicastové adrese“ všechny uzly “ ff02:: 1 a také se musí přihlásit k odběru své vlastní Vyžádané adresy multicastu uzlu na ff02:: 1: ffXX: XXXX, kde posledních 24 bitů odpovídá nejnižším 24 bitům IPv6 adresy uzlu. Tím se zabrání narušení, ke kterému došlo v IPv4 z vysílání ARP, protože nyní můžete zacílit na konkrétní podmnožinu uzlů pro rozlišení adresy.

protokol IPV6 address resolution protocol se nazývá Neighbor Solicitation (NS), popsaný v RFC 4861 a používá se s SLAAC popsaným v RFC 4862, a provádí se odesláním multicastu na adresu neighbor solicitation uzlu, který chcete objevit, obsahující úplnou adresu IPv6, kterou chcete znát, uzel s odpovídající adresou odpoví svou adresou link layer (MAC) v paketu Neighbor advertising (NA).

jakmile uzel zvolí svou lokální adresu odkazu, nejprve vyšle NS paket na zvolenou adresu, aby zjistil, zda někdo odpoví, a pokud to nikdo neudělá, předpokládá, že je v pořádku ji ponechat, jinak se řídí protokolem pro zabránění kolizi spojeným s jeho konkrétní formou adresy. Jakmile najde jedinečnou adresu, uzel nakonfiguruje tuto místní adresu odkazu a vyhledá směrovač. Všimněte si, že pokud síť IPv6 není přítomna, discovery se zde zastaví, což je důvod, proč většina síťových rozhraní vždy zobrazuje místní adresu IPv6.

Router Discovery

jakmile má uzel svou vlastní jedinečnou lokální adresu odkazu, použije ji k odeslání paketů routeru Solicitation (RS)na adresu“ všechny směrovače “ multicast ff02:: 2. Každý router v síti reaguje paketem Ra (Routerová reklama), který mimo jiné popisuje životnost routeru, síťový MTU, sadu jedné nebo více předpon, za které router odpovídá, adresu odkazu routeru a sadu příznaků voleb včetně příznaku M (Managed) a O (Other Configuration) a případně sadu serverů DNS.

každá inzerovaná předpona obsahuje předponu a délku předpony, sadu příznaků včetně a (autonomní konfigurace) a L (místní propojení) a sadu životnosti. Odkaz místní předpony vám řeknou, jaké globální předpony mají uživatelé místní sítě (může jich být více) a zda máte povoleno dělat SLAAC na globální předponě (pokud je příznak a jasný, musíte požádat směrovač o adresu pomocí DHCPv6). Pokud má router nenulovou životnost, můžete předpokládat, že se jedná o výchozí směrovač podsítě.

nyní, když uzel objevil jeden nebo více směrovačů, může nakonfigurovat svou vlastní globální adresu (všimněte si, že každý směrovatelný uzel IPv6 má alespoň dvě adresy: místní odkaz a globální). Jak to dělá, závisí na vlajkách routeru a prefixu

Globální konfigurace adresy

první věc, kterou uzel potřebuje vědět, je, zda použít SLAAC pro globální adresu nebo DHCPv6. To je zcela určeno příznakem a jakékoli místní předpony odkazu v paketu RA. Pokud je nastaven A, pak uzel může použít SLAAC a pokud je a jasné, pak uzel musí použít DHCPv6 k získání adresy. Pokud je nastaven příznak A a také příznak M (Managed), pak uzel může použít buď SLAAC nebo DHCPv6 (nebo obojí) k získání adresy a pokud je příznak M jasný, ale příznak o (Other Config) je přítomen, pak uzel musí použít SLAAC, ale může použít DHCPv6 k získání dalších informací o síti (obvykle DNS).

jakmile má uzel globální adresu, nyní potřebuje výchozí trasu. Tvoří výchozí seznam tras z paketů RA, které mají nenulovou životnost routeru. Všechny z nich jsou konfigurovány jako výchozí trasy na jejich odkaz místní adresu s RA zadaný počet hop. Nakonec může uzel přidat konkrétní prefixové trasy z paketů RA s nulovou životností routeru, ale bez propojení místních předpon.

DHCPv6 je poměrně složitý konfigurační protokol (viz RFC 8415), ale nemůže specifikovat ani délku předpony (což znamená, že všechny získané adresy jsou konfigurovány jako /128), ani trasy (tyto musí být získány z RA paketů). To vede k jemnosti výběru odchozí adresy v tom, že nejkonkrétnější je vždy upřednostňována, takže pokud nakonfigurujete jak pomocí SLAAC, tak DHCPv6, adresa SLAAC bude přidána jako / 64 a adresa DHCPv6 jako /128, což znamená, že vaše odchozí IP adresa bude vždy DHCPv6 (i když externí entita zná vaši adresu SLAAC, stále vás na ní bude moci oslovit).

Jak: Konfigurace vlastního domácího routeru

jedna z věcí, které byste si z výše uvedeného mysleli, je, že IPv6 se vždy automaticky konfiguruje, a i když je pravda, že pokud jednoduše připojíte notebook do ethernetového portu kabelového modemu, automaticky se nakonfiguruje, většina lidí má složitější domácí nastavení zahrnující router, který potřebuje nějaké speciální přemlouvání, než bude fungovat. To znamená, že musíte získat další funkce od vašeho ISP pomocí speciálních požadavků DHCPv6.

tato část je napsána z mého pohledu: Mám poměrně složitou síť IPv4, která má zcela otevřenou, ale omezenou šířku pásma (nedůvěryhodným klientům) wifi síť a několik chráněných interních sítí (jedna pro moji laboratoř, jedna pro mé telefony a jedna pro domácí videokamery), takže potřebuji alespoň podsítí 4, aby každému zařízení v mém domě poskytla adresu IPv6. Také používám OpenWRT jako distribuci routeru, takže všechny informace o konfiguraci IPv6 jsou pro něj velmi specifické (i když je třeba poznamenat, že věci jako NetworkManager mohou také udělat vše, pokud jste připraveni kopat do dokumentace).

Prefix delegace

vzhledem k tomu, DHCPv6 rozdává pouze / 128 adresu, to není dostačující, protože je to IP adresa samotného routeru. Chcete-li se stát routerem, musíte požádat o delegování části adresního prostoru IPv6 pomocí volby Identity Association for Prefix Delection (IA_PD) DHCPv6. Jakmile to provedete, IP adresa routeru bude ISP považována za trasu pro všechny delegované předpony. Jemnost je, že pokud chcete více než jednu podsíť, musíte o ni konkrétně požádat (klient musí zadat přesnou délku předpony, kterou hledá) a protože je to Délka předpony a vaše výchozí podsíť by měla být / 64, pokud požadujete délku předpony 64, máte pouze jednu podsíť. Pokud požádáte 63 máte 2 a tak dále. Problém je v tom, jak víte, kolik podsítí je ISP ochoten vám dát? Bohužel neexistuje žádný způsob, jak to najít (musel jsem hledat na internetu, abych zjistil, že můj ISP, Comcast, byl ochoten delegovat délku předpony 60, což znamená 16 podsítí). Pokud Vám vyhledávání neřekne, kolik je váš ISP ochoten delegovat, můžete zkusit začít na 48 a pracovat na 64 v krocích po 1, abyste zjistili, s jakou největší delegací se můžete dostat pryč (objevily se zprávy o tom, že vás ISP uzamknou při vaší první delegované délce předpony, takže nezačínejte na 64). Konečná jemnost je, že předpona, kterou jste delegovali, nemusí být stejná předpona jako adresa, kterou router získal (moje aktuální konfigurace comcast má můj router v 2001: 558: 600a:… ale moje delegovaná předpona je 2601: 600: 8280: 66d0:/60). Poznámka: můžete spustit odhcp6c ručně s volbou-P, pokud máte sondovat ISP zjistit, jakou velikost předpony můžete získat.

konfigurace routeru pro delegování prefixů

z hlediska OpenWRT je konfigurace routeru WAN DHCP (v6) řízena /etc/default/network. Pro DHCPv4 již budete mít rozhraní WAN (pravděpodobně nazývané „wan“), takže jednoduše přidáte další rozhraní „wan6“, abyste získali další IPv6 a stali se duálním zásobníkem. V mé konfiguraci to vypadá jako

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

mírná zvláštnost je název ifname: @wan jednoduše řekne config použít stejný ifname jako‘ wan ‚ rozhraní. Pojmenování tímto způsobem je nezbytné, pokud je váš wan mostem, ale stejně je to dobrá praxe. Druhá možnost „reqprefix“ říká DHCPv6 požádat o delegování předpony a / 60.

rozdávání delegovaných předpon

se ukazuje jako pozoruhodně jednoduché. Nejprve musíte každému z vašich dalších rozhraní na routeru přiřadit delegovanou předponu, ale můžete to udělat bez přidání nového rozhraní OpenWRT pro každé z nich. Moje interní síť IPv4 má všechny statické adresy, takže ke každému rozhraní přidáte tři směrnice:

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

ip6assign‘ N ‚znamená, že jste síť a /N (takže je to pro mě vždy /64) a ip6hint‘ N ‚znamená použít N jako ID podsítě a ip6ifaceid‘ S ‚ znamená použít S jako příponu IPv6 (toto je výchozí:: 1, takže pokud jste s tím v pořádku, vynechte tuto směrnici). Takže vzhledem k tomu, že mám předponu 2601:600:8280:66d0::/60, globální adresa tohoto rozhraní bude 2601: 600: 8280:66d1:: ff. Nyní acid test, pokud máte toto právo, tato globální adresa by měla být pingovatelná odkudkoli na internetu IPv6 (pokud tomu tak není, je to pravděpodobně problém brány firewall, viz níže).

reklama jako směrovač

pouhé získání delegované předpony na lokálním rozhraní routeru je nedostatečné . Nyní je třeba, aby váš směrovač reagoval na žádosti routeru na ff02:: 2 a volitelně DHCPv6. OpenWRT má bohužel dva mechanismy, obvykle oba nainstalované: odhcpd a dnsmasq. Zjistil jsem, že žádná z mých směrnic v /etc/config / dhcp by se neprojevila, dokud jsem zcela nezakázal odhcpd

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

a protože používám dnsmasq značně jinde (split DNS pro interní / externí sítě), To mi vyhovovalo. Popíšu nejprve, jaké možnosti potřebujete v dnsmasq a za druhé, jak toho můžete dosáhnout pomocí položek v souboru OpenWRT / etc/config / dhcp (považuji to za užitečné, protože je vždy moudré zkontrolovat, co OpenWRT vložil do souboru /var / etc / dnsmasq.conf).

první možnost dnsmasq, kterou potřebujete, je „enable-ra“, což je globální parametr, který dává dnsmasq pokyn ke zpracování reklam routeru. Dalším parametrem, který potřebujete, je „ra-param“, který určuje parametry reklamy globálního routeru a musí se objevit jednou pro každé rozhraní, na kterém chcete inzerovat. Nakonec volba „dhcp-range“ umožňuje podrobnější konfiguraci typu Ra vlajek a volitelného DHCPv6.

SLAAC nebo DHCPv6 (nebo obojí)

v mnoha ohledech je to otázka osobní volby. Pokud povolíte SLAAC, mohou tak učinit hostitelé, kteří chtějí používat adresy rozšíření soukromí (jako telefony Android), což je dobrá věc. Pokud také povolíte výběr adresy DHCPv6, budete mít seznam adres přiřazených hostitelům a dnsmasq pro ně provede rozlišení DNS (i když to může udělat DNS pro adresy SLAAC za předpokladu, že se o nich dozví). Pro volbu „dhcp-range“ existuje speciální značka „Konstruktor“, která jí říká, aby vytvořila dodanou adresu (pro RA nebo DHCPv6) z globální předpony IPv6 zadaného rozhraní, což je způsob, jakým rozdáváte naše delegované adresy prefixů. Režimy pro „dhcp-range „jsou“ ra-only“, které zcela zakazují DHCPv6, „slaac“ umožňují výběr adresy DHCPv6 a „ra-bez státní příslušnosti“ zakazují výběr adresy DHCPv6, ale umožňují další informace o konfiguraci DHCPv6.

na základě pokusů a omylů (a nakonec zkoumání skriptování v / etc / init.d / dnsmasq) Možnosti OpenWRT potřebné k dosažení výše uvedených možností dnsmasq jsou

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'

s „ra_management“ jako klíčovou volbou s „0“, což znamená SLAAC s možnostmi DHCPv6, “ 1 „znamená SLAAC s plným DHCPv6,“ 2 „znamená pouze DHCPv6 a“ 3 “ znamená pouze SLAAC. Další zvláštností OpenWRT je, že se nezdá, že existuje způsob nastavení rozsahu pronájmu: vždy je výchozí buď pouze statický, nebo :: 1000 až:: ffff.

konfigurace firewallu

jednou z věcí, která lidi zakopne, je skutečnost, že Linux má dvě zcela oddělené brány firewall: jednu pro IPv4 a druhou pro IPv6. Pokud jste pro ně někdy napsali nějaká vlastní pravidla, je pravděpodobné, že jste to udělali v OpenWRT/etc / firewall.uživatelský soubor a použili jste příkaz iptables, což znamená, že jste do brány firewall IPv4 přidali pouze pravidla. Chcete-li přidat stejné pravidlo pro IPv6, musíte jej duplikovat pomocí příkazu ip6tables. Dalším významným problémem, pokud používáte sledování připojení pro detekci klepání portů jako já, je to, že sledování připojení Linuxu má potíže s IPv6 multicast, takže pakety, které jdou ven do multicastu, ale vrátí se jako unicast (jako většina protokolů discovery), dostanou špatný stav conntrack. Chcete-li to opravit, nakonec jsem musel mít vstupní pravidlo jen přijímat všechny ICMPv6 a DHCPv6 (UDP porty 546 a 547). Další úvahy brány firewall spočívají v tom, že nyní má každý svou vlastní IP adresu, není třeba NAT (OpenWRT lze přesvědčit, aby se o to postaral automaticky, ale pokud duplikujete pravidla IPv4 ručně, neopakujte pravidla NAT). Ten poslední je pro mě pravděpodobně použitelnější: Moje wifi rozhraní je navrženo jako rozšíření místního internetu a očekává se, že všechny stroje, které se k němu připojují, se budou moci chránit, protože budou migrovat do takových nepřátelských prostředí, jako je letiště wifi, a tak dělám kompletní expozici WiFi připojených zařízení k obecnému internetu pro všechny porty, včetně portových sond. Pro mé interní zařízení, mám související, zavedené pravidlo, aby se ujistil, že nejsou sondován, protože nejsou určeny k migraci z interní sítě.

nyní problémy s OpenWRT: vzhledem k tomu, že chcete NAT na IPv4, ale ne na IPv6, musíte mít pro ně dvě samostatné zóny wan: pokud se je pokusíte zkombinovat (jako jsem to udělal poprvé), pak OpenWRT přidá neplatné pravidlo IPv6 –ctstate, které zabrání práci Neighbor Discovery kvůli problémům s IPv6 multicast, takže moje wan zóny jsou (dobře, to je lež, protože můj firewall je nyní ručně vytvořený, ale to je to, co jsem zkontroloval, než jsem dal ručně vytvořený firewall na místo):

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

a pravidla směrování pro zónu lan (plně přístupná) jsou

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

: Připojení klientů IPv6

Nyní, když máte nakonfigurovaný router, by vše mělo fungovat. Pokud ano, vaše wifi rozhraní notebooku by nyní mělo mít globální IPv6 adresu

ip -6 address show dev wlan0

pokud se vrátí prázdná, musíte v distribuci povolit IPv6. Pokud má pouze odkaz lokální (fe80:: prefix) adresu, IPv6 je povolena, ale váš router není reklama (podezření firewall problémy s discovery pakety nebo dnsmasq nesprávné konfigurace). Pokud uvidíte globální adresu, máte hotovo. Nyní byste měli být schopni jít na https://testv6.com a zajistit skóre 10/10.

posledním kouskem skládačky je upřednostnění nového připojení IPv6, když DNS nabízí výběr adres IPv4 nebo IPv6. Všichni moderní Linuxoví klienti by měli upřednostňovat IPv6, pokud jsou k dispozici, pokud jsou připojeni k síti dual stack, takže zkuste … pokud pingujete, řekněme, www.google.com a podívejte se na adresu IPv6, kterou jste dokončili. Pokud ne, musíte se dostat do temného světa označování adres IPv6 (RFC 6724) a gai.conf.

závěr

přidání IPv6 do stávajícího nastavení IPv4 není v současné době jednoduchou operací plug in and go. Pokud však pochopíte několik rozdílů mezi těmito dvěma protokoly, není to ani nepřekonatelný problém. Také jsem glosoval mnoho problémů, se kterými se můžete setkat s vaším ISP. Někteří lidé hlásili, že jejich poskytovatelé internetových služeb rozdávají pouze jednu adresu IPv6 bez delegace předpony, v takovém případě si myslím, že nalezení nového ISP by bylo nejmoudřejší. Jiní uvádějí, že ISP bude delegovat pouze jednu předponu / 64, takže vaše volba je buď spustit pouze jednu podsíť (pravděpodobně dostačující pro mnoho domácích sítí), nebo podsíť vyšší než /64 a zakázat SLAAC, což rozhodně není doporučená konfigurace. Pokud je však váš ISP přiměřený, měl by vám tento blogový příspěvek alespoň pomoci začít.

Write a Comment

Vaše e-mailová adresa nebude zveřejněna.