Тук искам да напиша няколко думи за възхищението си от OpenWRT проекта (и дериватите му).
С две думи – OpenWRT е проект за написването на изцяло нов, Linux базиран firmware за Wi-Fi Access Point-и, като името му идва от продуктовата серия на Linksys - WRT54G, която така и така работеше с Linux, който се разпространяваше на source, поради натиск и заведено дело от страна на GNU активисти.
Понеже Linksys бе закупена от Cisco – компания доказала, че на тях не може да се разчита :), скромен набор ентусиасти започнаха да пренаписват напълно firmware-то, да е напълно free, отворено и GNU, за да се предпазят от „завои”, притеснение по-късно напълно оправдано (Linksys смени Firmware-то със затворено, базирано на vxworks и не разпространявано на source, и намалиха количеството рам и flash, и в последствие под натиска на клиентите си (оказа се, че 40% от продажбите се дължат на firmware-то с Linux – много компании купуват продукта, за да го модифицират и да му добавят нова функционалност) пуснаха отново модели с Linux, с допълнителна буква L отзад – WRT54GL, на същата цена, отново с повече RAM и Flash). Днес OpenWRT покрива огромен набор от продукти на пазара, включително такива, които никога не са имали Linux работещ на тях. Както и за огромно нещастие на Cisco (дали?) вече има прототипи работещи на 2MB RAM и 2MB Flash (тоест ще тръгнат и на продуктите на Linksys, специално „предпазени” от Linux).Аз съм фен на OpenWRT. Модифицирах оригиналния Linksys Firmware още преди да се появи OpenWRT проекта. Откакто е тук, го ползвам активно и съм изключително доволен. Той е базиран на uclinux, и използва embedded packet management система, много подобна на тази от debian (използва същите package файлове) – ipkg.Всичко е отворено, и може да се модифицира много лесно.
С OpenWRT можете да превърнете лесно евтиния си Access Point в много сериозно устройство, вършещо неща, които много скъпи устройства не могат да направят.
Ето какво постигам аз с OpenWRT:Имам един Linksys WRT54GS (8MB Flash, 16MB RAM) в къщи. Понеже имам няколко интернет доставчика, на него терминирам 4 BGP сесии – 2 пълни, и 2 само на българския Peering. Хора запознати с Cisco тук ще кажат „как на 16MB RAM се събират 2 пълни BGP сесии”? Cisco има архитектурен дефект на IOS-а – няма процеси и защитен режим, няма и memory management, поради което най-малкия chunk който може да се алокира е pool от 512 байта (на particle базираните маршрутизатори). Фрагментацията е огромна. Заради липсата на процеси, трябва да прави pooling на всичко, което се случва. Когато пристигне message по BGP (което между впрочем се обработва от друг TCP стек, а не основния, поради което имат проблеми, ако message-то е фрагментирано в няколко пакета, не е ли смешно?) то влиза в input queue, за да не бави прекалено много CPU-то и така да не вкарва jitter в packet routing-а. Периодично input queue-то се проверява, и message-тата се асоциират към BGP таблицата на BGP „процесът”. За да се намали jitter-а на пакетите (нямаме процеси, а CPU-то маршрутизира – няма как да го прави, ако е заето с друга задача), има огромни hash-ове по таблицата на BGP-то, които увеличават заетата памет около 3 пъти (имаме hash за право и за обратно търсене, за да може да се добавят и трият мрежи). Това обаче не е всичко. Периодично (на 15 секунди, пак, за да се намали jitter-а, поради дефект на архитектурата) се стартира един алгоритъм, който преглежда BGP таблицата и я прехвърля във векторната (човек ще каже, е най-сетне можем да маршрутизираме, ама не). Но това не е достатъчно. Ако имате пуснат CEF (пуснат по подразбиране на сегашните маршрутизатори и IOS), трябва да изчакате още един процес, да се стартира и да създаде hash по векторната таблица. И чак тогава вече може да се маршрутизира. Всичко това отнема време (от получаване на message до резултат в маршрутизиращата таблица – до 30 секунди) и огромно количество памет (при Cisco това значи средно 60MB на пълна BGP таблица + 1/3 защитен overhead, поради това, че не ползват защитен режим на паметта – ако някой проявява интерес, ще му обясня). Да не говорим за фрагментацията на паметта, която с течение на времето увеличава заетата памет дори още повече. В Linux тези архитектурни проблеми ги няма. Поради което процесите са по прости, работят в паралел, няма нужда от толкова hash-ове, времето за реакция е по-бързо, и пак няма jitter-и. Една пълна BGP таблица при стандартно компилиран kernel заема около 10-11MB RAM (с Kernel memory-то). Ако kernel-а се компилира с hash, става малко повече. В моя конкретен случай, аз премахнах всички мрежи с мрежова маска по-голяма от /24 и така намалих достатъчно редовете (с около 15%) че да нямам проблеми с паметта.
И така какво правя на него – този WRT54GS ми е маршрутизатор (и терминира 4 BGP сесии), firewall, switch (има 4 ethernet порта, аз съм си пуснал VLAN-и по тях и съм ги разпределил по интересен начин), Wireless Access Point (използвам и Wireless-а), VPN концентратор (на него имам OpenVPN сървър и pptp сървър, за да се свързвам от вън към домашната ми мрежа), VPN клиент (имам OpenVPN клиент отворен към офиса), IPSec сесия към друго място, и vpnc (Cisco съвместим, по-добър от оригинала, VPN клиент към трети VPN сървър). Също така на него имам DNS (използвам го като primary и secondary dns за някой неща), DHCP сървър, WEB сървър и SIP Proxy, на което съм си закачил IP телефон. Това малко устройство с 200Mhz MIPS процесор и никакви движещи се части успява да маршрутизира трафик с около 50kpps, или само 4kHz на пакет, което е много добро съотношение. То върши работа, за която ще ми трябва конфигурация на Cisco маршрутизатор за около 10000$, а ми струва само 75$. Определено се чувствам така все едно съм спестил 9925$.
С един друг тест сме замервали, че малкото устройство постига почти 8Mbit/s blowfish encryption, производителност трудна за доста комерсиални и далеч по-скъпи продукти.
На друго място, в нашия офис, използваме WRTSL54GS (модел с повече RAM, разширим flash и 300Mhz процесор, за 150$), който терминира множество IPSec тунели, върху които има качен GRE, върху който има качен OSPF и имаме full mesh машрутизация. Отделно има DNS сървър, switch, OpenVPN сървър (за VPN тунели), служи като маршрутизатор, firewall, и Wireless Access Point на офиса. Успешно си правя някой patch-ове (като модифициран DNS сървър за определени неща, load balancer на трафик, TCP over DNS tunneling и т.н.). Бих могъл да имам 2-3 такива (за сборна цена под 450$) и да споделям с VRRP външния и вътрешния IP адрес, така че да изглеждат като едно. Мога да балансиран VPN сесиите между тях, както и трафика (с GLBP) и да имам защита – ако едното отпадне, другите поемат неговата функционалност. Ако това трябва да постигна с нормален (от някой важен производител) firewall, цената почти се удвоява.
OpenWRT си има всичко – web интерфейс за неразбиращите от shell, но има и SSH, telnet и shell. В момента официално се поддържат над 1000 пакета със софтуер, а неофициално има поне още 2000. На него можете да си стартирате asterisk телефонна централа, и да обслужвате и IP телефони. Може да закачите на някой от AP-тата външни хардуери и да замервате температури, да извеждате нещо на дисплей, или да управлявате през сериен порт някой хардуер.
Ето списък с поддържаните продукти, на които този firmware може да се запали - http://wiki.openwrt.org/TableOfHardware
Автор: Делян Делчев
| Използване на помощни програми за TCP/IP< Предишна | Следваща >Какво прави VPN |
|---|

