Понеже не ми стигна времето на lightning talk-а на OpenFest, ето едно по-подробно разписване на темата ми, “Защо мразим IPv6”.
Презентацията може да се свали от тук.
Ще започна със следната статистика по темата за IPv4 адресите:
Percentage of available address space announced: 62.1
Percentage of allocated address space announced: 65.4
Percentage of available address space allocated: 95.0
(weekly routing table report от 20ти ноември 2010)
Счита се, че някъде около април 2011та година IANA ще раздаде последните си останали /8 мрежи и изведнъж ще стане страшно. Това не значи, че RIR-овете нямат още достатъчно за раздаване, а и както виждате по статистиката от раздадените адреси още не всички се announce-ват, което ни дава още съвсем прилично количество време.
Дори обаче да свършат тотално за раздаване адресите, има съществуващи решения от типа на LSN (large-scale NAT) или CGN (carrier-grade NAT), две имена за почти същото, които ще помогнат да продължи растежа на мрежата, най-вече защото повечето трафик така и така е HTTP, който минава прекрасно през всякакви NAT-ове.
И, дори и да го нямаше това, пак Internet няма да спре, защото са свършили адресите, небето няма да падне, колкото и човека да се изредят да го кажат. Така че, аман от паника и натиск да се въведе нещо, което е пълно с глупости.
Разбира се, във IPv6 има и някои неща, които (може би по случайност) са хубави:
– прилично голямо адресно пространство, което позволява и да се отдели network locator-а в първите 64 бита
– премахната фрагментацията от router-ите и PMTUD е задължителна част от протокола, т.е. няма да има начин вече (малоумни) security експерти да казват “спрете всичкото ICMP”
– Няма (нужда от) NAT. Малко хора обичат NAT-а, и при подходящи stateful firewall-и спокойно ще може да се постигне същата функционалност.
– По-добра интеграция на IPSec (което трябва да се види доколко ще е полезно/работещо)
Като почнем с проблемите обаче става интересно:
– четейки документацията, човек остава с впечатлението, че са се старали (на принципа на Intercal) да направят нещата максимално различни от IPv4, точно като проява на синдрома “Not invented here”. Вместо ARP се използва ND (протокол, който работи върху ICMPv6), по подразбиране се прави stateless address autoconfiguration и по принцип в началната конфигурация на host-овете има добавен един още един елемент – router-а, който да раздава разни неща. Т.е. началния setup изглежда по следния начин:
машината тръгва
генерира си по някакъв начин 64 бита и с тях си прави link-local адрес, който през ND проверява дали е уникален, вдига го и се join-ва в multicast група
(навсякъде broadcast-а е заменен с multicast, да се чуди човек защо)
в multicast групата чува локален router пак по ND протокола (т.нар. router advertisement), който дава prefix и още няколко параметъра, вкл. дали да си говори с dhcp сървър (два бита, дали да иска адрес от него, и/или да иска и други параметри)
нататъка според двата бита решава как да си говори с dhcp сървър
Понеже dhcp-то се счита от IPv6 хората за нещо срамно, поддръжката му и работата му са бая странни и даже има разширение (още експериментално) да се раздава и DNS сървър от router-а (т.е. нека да омажем нещата колкото ни е възможно). Поради всичките тия неща на HAR миналата година открихме как най-лесно се раздават IPv6 адреси на nameserver-и чрез писането им на листи и лепенето им по разни стени.
Изобщо като цяло поне за мен го няма principle of least surprise. Би трябвало да се вземе в предвид как много хора са правили IPv4 мрежи, имат идея как работят и че принципите в тях не случайно са станали такива след прилично дебъгване и доизпипване.
– стари грешки – бяха направили задължителен т.нар. Type 0 routing header (т.е. source routing), добре, че преди около година се сетиха да го махнат. Source routing-а е прекрасен начин за реализация на tcp spoofing атаки.
– Като цяло има малко свързаност все още, особено в България – ако сте краен клиент е почти невъзможно да получите IPv6 свързаност вкъщи директно от доставчика си, не само защото те не са го подкарали навсякъде, а и защото крайните router-чета, които повечето хора ползват вкъщи просто не го поддържат. Всъщност има две причини да има IPv6 свързаност в България – едната е ентусиазма на разни хора, другата е, че в изискванията на Софийския Университет за Internet доставчик това е задължително условие и така бяха успели да накарат БТК да подкарат някаква такава свързаност.
– Липсва v6-only съдържание, с малки изключения (някои академични неща).
– IPv6 свързаността в почти всички случаи е с по-ниско качество от IPv4 – разчита се твърде много на тунели, тези тунели минават през всякакви странни места и винаги имат някакъв overhead. Всъщност, знам само за един случай, в който е валидно обраното – един доставчик, дето по една и съща тръба доставял v4 и v6 и за v6 нямало shaper-и. Като добавка, повечето router-и (особено тия, които Cisco прави) имат по-ниска производителност на IPv6 пакети.
Тази причина е основната да не виждам смисъл да подкарвам за моя проект IPv6 свързаност.
– Има и разни други неща, които слава богу (на сървърите) бяха преборени от здравия разум (например да няма PI адреси и multihoming да се прави като на всяка машина се дават по един адрес от всяка мрежа, към която сте свързани и чрез SHIM6 и черна магия машините да избират от кой адрес с кого да си комуникират, т.е. да изнесем routing-а от router-ите).
Като цяло, deployment-а на IPv6 се дължи на една сериозна група ентусиасти и на маркетингов натиск от тях и техни сподвижници. За момента нито е лесно и удобно, нито е особено смислено за повечето хора. Когато стане достатъчно лесно и удобно да се подкара и стане достатъчно нормална част от internet-а, може да се мисли по въпроса, но дотогава просто не си струва.
бележка: още съм скапан от openfest и разни други работи, така че може да не съм обяснил нещо достатъчно точно, ако имате въпроси/изяснявания, коментирайте.