Konfiguracja DDNS dla OpenDNS

Ludzkość w dalszym ciągu siedzi na przestarzałym już od prawie 20 lat protokole IPv4. Nie widać, też by w najbliższym czasie coś miało się w tej kwestii zmienić. Można, co prawda, wykupić sobie stały adres IP ale to kosztuje, no i płacimy za coś co powinniśmy mieć w standardzie, gdyby ludzie w końcu zaczęli korzystać z IPv6. Niemniej jednak, by te wszystkie nasze maszyny podłączyć jakoś do sieci, potrzebne nam są prywatne adresy IP + NAT lub też dynamicznie zmieniające się adresy publiczne. Bywają też przypadki, że mamy przydzielane dynamicznie adresy z puli prywatnej, np. w wyniku dbania o prywatność w sieciach WiFi przez generowanie sobie przy każdym połączeniu losowego adresu MAC. Zwykle w takiej sytuacji zmienia nam się adres zewnętrzny (publiczny), który wskazuje na jeden z adresów naszego ISP. Taki zmieniający się adres powoduje problemy przy konfiguracji poszczególnych usług sieciowych, np. gdy w grę wchodzi konfiguracja filtra DNS, który jest zapewniany przez OpenDNS. By tego typu niedogodności rozwiązać, możemy posłużyć się DDNS (dynamic DNS). Za każdym razem, gdy adres IP ulega zmianie, klient DDNS informuje o tym fakcie skonfigurowane usługi. W tym artykule przyjrzymy się nieco bliżej temu mechanizmowi.

Równoważenie ruchu łącz kilku ISP (load balancing)

Podłączenie pojedynczego komputera do sieci raczej nie stanowi żadnego problemu dla przeciętnego użytkownika linux'a. Wystarczy jedynie skonfigurować kilka parametrów i możemy oglądać swoje ulubione serwisy www. Co jednak w przypadku, gdy mamy do dyspozycji kilka łącz internetowych? Jedną z opcji jest używanie łącza tego ISP, które jest lepsze gabarytowo, a pozostałe łącza trzymać na wypadek awarii tego pierwszego. Nie jest to zbytnio satysfakcjonujące rozwiązanie, zwłaszcza w przypadku, gdy tym providerom płacimy za świadczone nam usługi. W taki sposób płacimy, np. za dwa łącza, a korzystamy z jednego w danej chwili. W linux'ie obsługa wielu łącz różnych ISP jest dość skomplikowana. By taki mechanizm zaimplementować sobie, trzeba stworzyć kilka tablic routingu. Następnie ruch sieciowy musi zostać oznaczony w iptables i przekierowany do tych tablic przez kernel. Przy odrobienie wysiłku jesteśmy jednak w stanie zaprojektować sobie load balancer, który będzie równoważył obciążenie łącza między kilku ISP. Dodatkowo, jeśli jedno z łączy nam nawali, to automatycznie zostaniemy przełączeni na drugie łącze (failover). W tym artykule postaramy się zaprojektować taki właśnie mechanizm.

Statystyki routera w OpenWRT (collectd, rrdtool)

Domowe routery WiFi chodzą zwykle 24 godziny na dobę. Ich moc obliczeniowa, choć zwykle niewielka, czasem się marnuje. Mając router z OpenWRT, możemy przerobić go tak, by zbierał różnego rodzaju dane dla statystyki. Te dane mogą pochodzić z różnych źródeł i nie koniecznie muszą one dotyczyć samego routera. Tego typu funkcjonalność mogą zapewnić nam narzędzia collectd oraz rrdtool . W tym artykule spróbujemy zaprogramować router, by zbierał pewne dane dotyczące połączenia sieciowego. Na podstawie tych informacji będą rysowane wykresy, które następnie będą udostępniane przez serwer uhttpd .

Quality of Service (QoS) w OpenWRT

Wszyscy spotkaliśmy się z sytuacją, w której z bliżej nieokreślonego powodu nie mogliśmy przeglądać stron w internecie. Niby połączenie jest, mamy też dobrej klasy ISP ale net nam muli. W olbrzymiej części przypadków winą można obarczyć sieć Peer to Peer (P2P). Przy nieodpowiedniej konfiguracji klientów tej sieci może dojść do nawiązywania całej masy połączeń w ułamku chwili. W ten sposób nawet jeśli nic aktualnie nie wysyłamy lub nie pobieramy, to i tak te połączenia same w sobie zapychają łącze, no bo przecież nawet puste pakiety w protokołach TCP/UDP zawierają nagłówki, a te już swoje ważą. Gdy sami korzystamy z łącza, to taka sytuacja nie stanowi większego problemu, bo wystarczy odpalić klienta torrent'a w wolnym czasie. Natomiast w przypadku, gdy zachodzi potrzeba wejścia na jakiś serwis www, to możemy zwyczajnie tego klienta wyłączyć. Nie jest to jednak wygodne. Jak zatem wyeliminować problemy związane z siecią P2P? Jeśli na routerze mamy wgrany firmware OpenWRT, to możemy zaimplementować na nim mechanizm QoS (Qality of Service). W ten sposób możemy nadać usługom priorytety. W niniejszym wpisie postaramy się wdrożyć takie rozwiązanie w oparciu o narzędzia iptables oraz tc .

Target MARK w iptables (sumowanie oznaczeń)

Pakiety i połączenia można oznaczać w iptables za pomocą target MARK oraz CONNMARK . Ta właściwość tego filtra jest znana chyba większość użytkowników linux'a. Z reguły nie interesujemy się zbytnio szczegółami oznaczania pakietów/połączeń, bo zwykle jest ono przeprowadzane prawidłowo. Niemniej jednak, są przypadki, w których markery nie będą ustawiane poprawnie. Chodzi o sytuacje, gdzie mamy do czynienia z kilkoma mechanizmami oznaczającymi pakiety. Dla przykładu weźmy sobie kształtowanie ruchu za pomocą narzędzia tc oraz failover czy load balancing łącza w oparciu o różne tablice routingu. W obu tych mechanizmach zwykle używa się markowania pakietów w iptables . Co się jednak dzieje z takim pakietem, gdy przechodzi przez reguły zarówno pierwszego jak i drugiego mechanizmu? To właśnie spróbujemy ustalić w tym wpisie.

Failover i load balancing w OpenWRT (mwan3)

Może się zdarzyć tak, że będziemy mieli kiedyś dostęp do łącz kilku różnych providerów internetowych. Jeśli chcielibyśmy skorzystać z internetu w takiej sytuacji, to trzeba by się zdecydować na jednego z tych dostępnych ISP. Natomiast łącze pozostałych ISP będzie niewykorzystane w tym danym momencie, a przecie nie za to im płacimy. Jeśli mamy router z OpenWRT i skonfigurowaliśmy przy tym switch tak, by mieć kilka portów WAN, to możemy korzystać z usług wielu ISP w tym samym czasie. Oczywiście, ten mechanizm działa również w przypadku, gdy ISP świadczy nam usługi za pomocą technologi LTE. Trzeba tylko odpowiednio skonfigurować modem USB do pracy na routerze. W tym artykule zostanie opisane narzędzie mwan3, za pomocą którego zaprojektujemy sobie prosty failover (łącze awaryjne) lub load balancing (równoważenie ruchu) mając do wykorzystania dwóch różnych ISP.

CUPS, czyli konfiguracja drukarki pod linux'em

Ja jestem tym szczęśliwcem, który posiada takie fajne urządzenie zwane drukarką. Bardzo umila ono życie pod warunkiem, że działa jak należy, a z tym różnie bywa, zwłaszcza pod linux'em. W debianie do obsługi drukarek używa się CUPS (Common Unix Printing System) i można powiedzieć, że radzi on sobie z tym zadaniem całkiem nieźle, przynajmniej w przypadku mojej drukarki. Drukarka, o której mowa, to dość stary model, konkretnie jest to EPSON Stylus Color 760. Potrzebne są jej odpowiednie sterowniki, które są dostępne w repozytorium debiana. Jedyne czego potrzeba do szczęścia, to skonfigurowanie demona cupsd , który będzie zarządzał tą drukarką. W tym artykule postaramy się skonfigurować to powyższe urządzenie.

Wake On LAN z etherwake pod OpenWRT

Router wyposażony w firmware OpenWRT potrafi wybudzać maszyny w sieci lokalnej. Wake On LAN (WOL) nie działa przez internet, a jedynie, jak sama nazwa sugeruje, w sieci LAN. W tym mechanizmie wykorzystywany jest broadcast, a routery nie forward'ują pakietów rozgłoszeniowych. Oczywiście, nic nie stoi na przeszkodzie, by zalogować się na router via SSH od strony WAN i wybudzić jakąś maszynę z poziomu routera. Komputery, które chcemy budzić muszą mieć odpowiednią płytę główną. Prawdopodobnie wszystkie nowsze płyty już taką właściwość posiadają. Dodatkowo, trzeba w BIOS'ie ustawić odpowiednie opcje. Ważną rzeczą jest, by nie wyłączać PC przyciskiem w obudowie (lub na zasilaczu), bo wtedy nie będzie możliwe wybudzenie maszyny, nawet po dostarczeniu jej zasilania. Wyłączenia maszyny musimy dokonać z poziomu systemu operacyjnego, tylko wtedy WOL zadziała. W tym wpisie pokażemy jak przy pomocy etherwake wybudzić określonego hosta w sieci LAN.

Drukarka sieciowa w OpenWRT (serwer wydruku)

OpenWRT daje możliwość doinstalowania całej masy aplikacji, które są w stanie realizować pewne dość wyrafinowane zadania. Jednym z takich zadań jest serwer wydruku, czyli możliwość obsługi różnego rodzaju drukarek. Jeśli nasz router posiada port USB, to taką drukarkę jesteśmy w stanie do niego podłączyć. Nawet jeśli router dysponuje tylko jednym portem USB i do tego zajętym już, to nic nie stoi na przeszkodzie, by dokupić HUB'a i rozgałęzić sobie ten pojedynczy port. Serwer wydruku ma tę zaletę, że drukarka jest udostępniana przez router w sieci domowej. W efekcie odpada nam utrzymywanie dedykowanego komputera, który zajmowałby się tylko obsługą takiej drukarki. Możemy zatem oszczędzić nieco na rachunku za prąd. W tym wpisie skonfigurujemy sobie właśnie taki serwer wydruku w oparciu o drukarkę EPSON Stylus Color 760 i oprogramowanie p910nd .

Debugowanie reguł iptables via target TRACE

Linux'owy firewall w postaci iptables może czasami mieć zdefiniowanych sporo reguł. W takim gąszczu jest czasem ciężko się odnaleźć. Bywa zwykle tak, że dodając kolejną regułę chcemy przyblokować szereg pakietów, a mimo to przechodzą one przez zaporę jak gdyby nigdy nic. W takim przypadku zaczyna się mozolne przeszukiwanie reguł w iptables i próba ustalenia, którą z nich zaakceptowała interesujący nas pakiet. Nie musimy jednak głowić się aż tak, by w miarę szybko dociec jak te reguły przez filtr przechodzą i jak są przetwarzane. Możemy skorzystać z mechanizmu śledzenia reguł, który jest wbudowany bezpośrednio w iptables . Mowa oczywiście o target TRACE . W tym artykule zobaczymy jak przy pomocy TRACE ustalić, przez które reguły i łańcuchy przechodzi pakiet.