Multi-IP, urządzenia klienckie (RFC)
Oto moje przemyślenia odnośnie implementacji powyższych funkcji, które były ostatnio omawiane na liście. Aby zrobić to dobrze potrzebna będzie nie mała rewolucja.
Należy rozdzielić adresy od komputerów oraz połączyć urządzenia z komputerami w jeden byt. Obecnie mamy tabele nodes i netdevices. Ja proponuję je połączyć w jedną:
CREATE TABLE devices ( -- początek zawiera standardowe pola z oryginalnej tabeli id int(11) NOT NULL auto_increment, name varchar(32) NOT NULL DEFAULT '', location varchar(255) NOT NULL DEFAULT '', description text NOT NULL DEFAULT '', producer varchar(64) NOT NULL DEFAULT '', model varchar(32) NOT NULL DEFAULT '', serialnumber varchar(32) NOT NULL DEFAULT '', ports int(11) NOT NULL DEFAULT '0', purchasetime int(11) NOT NULL DEFAULT '0', guaranteeperiod tinyint unsigned DEFAULT '0', shortname varchar(32) NOT NULL DEFAULT '', nastype int(11) NOT NULL DEFAULT '0', clients int(11) NOT NULL DEFAULT '0', secret varchar(60) NOT NULL DEFAULT '', community varchar(50) NOT NULL DEFAULT '', channelid int(11) DEFAULT NULL, -- teraz dodajemy to co było w nodes creationdate int(11) NOT NULL DEFAULT '0', moddate int(11) NOT NULL DEFAULT '0', creatorid int(11) NOT NULL DEFAULT '0', modid int(11) NOT NULL DEFAULT '0', lastonline int(11) NOT NULL DEFAULT '0', access tinyint(1) NOT NULL DEFAULT '1', warning tinyint(1) NOT NULL DEFAULT '0', -- dodajemy pole właściciela (NULL dla urządzeń "szkieletowych") ownerid int(11) DEFAULT NULL );
W tej tabeli będą wszelkie urządzenia szkieletu sieci oraz klienckie, czy to komputer, router, switch, czy bramka. Można jeszcze ewentualnie dodać pole 'type' określające właśnie co to za urządzenie. Powiązania wszystkich urządzeń między sobą przenosimy do tabeli 'netlinks', która do tej pory zawierała tylko połączenia urządzeń "szkieletowych". Pytanie odnośnie pól access i warning, czy blokowanie/ostrzeganie robimy per-urządzenie, czy per-adres? Ja bym zostawił jak tutaj, a samo blokowanie to jest sprawa na osobną rewolucję.
Jeżeli chodzi o interfejs to Urządzeniach Sieciowych nie zmienia się w zasadzie nic, w klientach mamy Listę urządzeń zamiast Listy komputerów.
Adresy urządzeń (w tym i komputerów) przenosimy do tabeli 'ipaddresses' ('nodes' też by mogło być, bo to w końcu coś więcej niż sam adres):
CREATE TABLE nodes ( id int(11) NOT NULL auto_increment, deviceid int(11) NOT NULL DEFAULT '0', -- ID urządzenia -- teraz pola które były w nodes mac varchar(20) NOT NULL DEFAULT '', ipaddr int(16) unsigned NOT NULL DEFAULT '0', ipaddr_pub int(16) unsigned NOT NULL DEFAULT '0', passwd varchar(32) NOT NULL DEFAULT '', creationdate int(11) NOT NULL DEFAULT '0', moddate int(11) NOT NULL DEFAULT '0', creatorid int(11) NOT NULL DEFAULT '0', modid int(11) NOT NULL DEFAULT '0', -- i najważniejsze pole 'nodetypeid' int(11) DEFAULT NULL );
Czyli już możemy do każdego urządzenia dopisać kilka adresów, teraz ważne jest żeby zdefiniować do czego dany adres służy i jak ma być traktowany przez backend. Tzn. czy ma być brany pod uwagę przy generowaniu DHCP, firewalla, tc
CREATE TABLE nodetypes ( id int(11) NOT NULL auto_increment, name varchar(64) NOT NULL DEFAULT '', description text NOT NULL DEFAULT '', chkmac tinyint(1) DEFAULT NULL, halfduplex tinyint(1) DEFAULT NULL, nas tinyint(1) DEFAULT NULL, dhcp tinyint(1) DEFAULT NULL, -- i tu dodać inne potrzebne flagi, jak np. firewall, tc, ident, ewx, ether, których listę należy zdefiniować dokładniej. Można by także zastąpić je wszystkie jednym polem 'flags', ale wtedy backend będzie miał trudniej (wolniej) parsować jego zawartość. Innym rozwiązaniem byłoby zastosowanie sumy binarnej, tak jak jest zrobione z typami kont. );
Myślałem, żeby łączyć nodes z nodetypes relacją jeden-do-wielu, ale takie komplikowanie nie będzie nam potrzebne. W sieciach używa się raczej ograniczonej liczby typów, poza tym typy będą definiowane przez użytkownika. Od strony interfejsu rozbudowuje nam się formularz dotyczący urządzeń klienckich, gdzie będzie wiele adresów do jednego urządzenia. Oraz dodajemy Konfiguracja -> Typy adresów IP, gdzie będzie można definiować nodetypes.
Nie uwzględniłem tutaj przypisywania klas adresowych do klientów/urządzeń. Jeśli ktoś ma pomysł na to, to ewentualnie możemy przedyskutować.
On Wed, 07 Apr 2010 12:12:57 +0200, "A.L.E.C" alec@alec.pl wrote:
Nie uwzględniłem tutaj przypisywania klas adresowych do klientów/urządzeń. Jeśli ktoś ma pomysł na to, to ewentualnie możemy przedyskutować.
Moze po prostu zalozyc, ze zawsze przypisywana jest siec i operowac tylko maska - /32 dla pojedynczego itd. - uniknie sie rozdzialenia adres/siec.
Przy okazji mozna by jeszcze jedna rzecz zmienic - definiowanie ilosci portow - osobno dla portow przewodowych i osobno bezprzewodowych.
Dnia 2010-04-07, śro o godzinie 12:12 +0200, A.L.E.C pisze:
Oto moje przemyślenia odnośnie implementacji powyższych funkcji, które były ostatnio omawiane na liście. Aby zrobić to dobrze potrzebna będzie nie mała rewolucja.
[...]
Adresy urządzeń (w tym i komputerów) przenosimy do tabeli 'ipaddresses' ('nodes' też by mogło być, bo to w końcu coś więcej niż sam adres):
CREATE TABLE nodes ( id int(11) NOT NULL auto_increment, deviceid int(11) NOT NULL DEFAULT '0', -- ID urządzenia -- teraz pola które były w nodes mac varchar(20) NOT NULL DEFAULT '', ipaddr int(16) unsigned NOT NULL DEFAULT '0', ipaddr_pub int(16) unsigned NOT NULL DEFAULT '0', passwd varchar(32) NOT NULL DEFAULT '', creationdate int(11) NOT NULL DEFAULT '0', moddate int(11) NOT NULL DEFAULT '0', creatorid int(11) NOT NULL DEFAULT '0', modid int(11) NOT NULL DEFAULT '0', -- i najważniejsze pole 'nodetypeid' int(11) DEFAULT NULL );
Skoro już jest w planach niemała rewolucja to ja chciałbym zasugerować że wielkimi krokami zbliża się ipv6 i chyba to była by niezła okazja aby porzucić przechowywanie adresów jako int'y.
A.L.E.C pisze:
Adresy urządzeń (w tym i komputerów) przenosimy do tabeli 'ipaddresses' ('nodes' też by mogło być, bo to w końcu coś więcej niż sam adres):
CREATE TABLE nodes ( id int(11) NOT NULL auto_increment, deviceid int(11) NOT NULL DEFAULT '0', -- ID urządzenia -- teraz pola które były w nodes mac varchar(20) NOT NULL DEFAULT '', ipaddr int(16) unsigned NOT NULL DEFAULT '0', ipaddr_pub int(16) unsigned NOT NULL DEFAULT '0', passwd varchar(32) NOT NULL DEFAULT '', creationdate int(11) NOT NULL DEFAULT '0', moddate int(11) NOT NULL DEFAULT '0', creatorid int(11) NOT NULL DEFAULT '0', modid int(11) NOT NULL DEFAULT '0', -- i najważniejsze pole 'nodetypeid' int(11) DEFAULT NULL );
Jak wspomniał już ktoś wcześniej można byłoby zrobić obsługę IPv6, czyli przechowywać adresy IP jako INT (w postgresie to będzie NUMERIC(64)). Adresy IPv6 byłyby przechowywane w sposób klasyczny, a adresy IPv4 można zapisywać w formacie ipv4 compat (http://www.ietf.org/rfc/rfc1933.txt).
Do tego można dodać pole określającą długość bitową maski sieci i mamy z głowy problem przypisywania zakresów IP do urządzeń.
Przeniósłbym też pole 'mac' do tabeli 'devices'.
Czyli już możemy do każdego urządzenia dopisać kilka adresów, teraz ważne jest żeby zdefiniować do czego dany adres służy i jak ma być traktowany przez backend. Tzn. czy ma być brany pod uwagę przy generowaniu DHCP, firewalla, tc
CREATE TABLE nodetypes ( id int(11) NOT NULL auto_increment, name varchar(64) NOT NULL DEFAULT '', description text NOT NULL DEFAULT '', chkmac tinyint(1) DEFAULT NULL, halfduplex tinyint(1) DEFAULT NULL, nas tinyint(1) DEFAULT NULL, dhcp tinyint(1) DEFAULT NULL, -- i tu dodać inne potrzebne flagi, jak np. firewall, tc, ident, ewx, ether, których listę należy zdefiniować dokładniej. Można by także zastąpić je wszystkie jednym polem 'flags', ale wtedy backend będzie miał trudniej (wolniej) parsować jego zawartość. Innym rozwiązaniem byłoby zastosowanie sumy binarnej, tak jak jest zrobione z typami kont. );
Tutaj sugerowałbym użycie pola 'flags' i sum binarnych.
Grzegorz Chwesewicz wrote:
Przeniósłbym też pole 'mac' do tabeli 'devices'.
Nie, zdecydowanie do adresu należy mac, a dokładniej do interfejsu do którego przypisujesz adres.
[Wednesday, 07 April 2010], A.L.E.C napisał(a):
Adresy urządzeń (w tym i komputerów) przenosimy do tabeli 'ipaddresses' ('nodes' też by mogło być, bo to w końcu coś więcej niż sam adres):
Skoro tak - przydalaby sie historia jakie adres IP jaki klient posiadal - nawet usuniecie klienta nie powinno kasowac historii posiadanych przez niego IP.
W dniu 7 kwietnia 2010 19:10 użytkownik Jaroslaw Dziubek yaro@perfect.net.pl napisał:
[Wednesday, 07 April 2010], A.L.E.C napisał(a):
Adresy urządzeń (w tym i komputerów) przenosimy do tabeli 'ipaddresses' ('nodes' też by mogło być, bo to w końcu coś więcej niż sam adres):
Skoro tak - przydalaby sie historia jakie adres IP jaki klient posiadal - nawet usuniecie klienta nie powinno kasowac historii posiadanych przez niego IP.
To ja bym proponował przy okazji pamiętania IP zapamiętać MAC jaki był związany z tym IP. Bo wyobraźmy sobie np. taką sytuację: kasujemy usera bo zrezygnował z usług w naszej sieci. Giną informacje o jego kompie, zostaje tylko ślad po jego nazwie (o ile się nie mylę), a np. za tydzień po tym usunięciu danych mamy do wyjaśnienia jakiś incydent w sieci. "Studiowanie" logów opiera się m.in. o MAC-adresy. Skąd to teraz wziąć? Trzeba by było prowadzić jakiś ręczny rejestr IP-MAC a tak mielibyśmy gotową ściągę w lms-ie. Być może wymyśliłem abstrakcyjny przypadek - ale wydaje mi się, że to by była przydatna funkcja.
-- pozdrawiam gips
To ja bym proponował przy okazji pamiętania IP zapamiętać MAC jaki był związany z tym IP. Bo wyobraźmy sobie np. taką sytuację: kasujemy usera bo zrezygnował z usług w naszej sieci. Giną informacje o jego kompie, zostaje tylko ślad po jego nazwie (o ile się nie mylę), a np. za tydzień po tym usunięciu danych mamy do wyjaśnienia jakiś incydent w sieci. "Studiowanie" logów opiera się m.in. o MAC-adresy. Skąd to teraz wziąć? Trzeba by było prowadzić jakiś ręczny rejestr IP-MAC a tak mielibyśmy gotową ściągę w lms-ie. Być może wymyśliłem abstrakcyjny przypadek - ale wydaje mi się, że to by była przydatna funkcja.
To nie jest abstrakcyjny przypadek. Podobnie jak przechowywanie adresów ip używanych przez klientów już usuniętych jest po prostu potrzebny, nawet jeśli daje się stałe adresy ip klientowi to informacje o tym kto ich używał trzeba trzymać kilka lat (retencja danych) każdy sobie radzi jak może teraz ja wpisuję taką informacje do notatek i jak jest potrzeba przeszukuje notatki usuniętych klientów ale nie jest to rozwiązanie profesjonalne :_) tają informację powinienem znaleźć przy adresie ip
pozdrawiam
To nie jest abstrakcyjny przypadek. Podobnie jak przechowywanie adresów ip używanych przez klientów już usuniętych jest po prostu potrzebny, nawet jeśli daje się stałe adresy ip klientowi to informacje o tym kto ich używał trzeba trzymać kilka lat (retencja danych) każdy sobie radzi jak może teraz ja wpisuję taką informacje do notatek i jak jest potrzeba przeszukuje notatki usuniętych klientów ale nie jest to rozwiązanie profesjonalne :_) tają informację powinienem znaleźć przy adresie ip
Fakt przydałoby się natomiast radius accounting zalatwia sprawe wysmienicie :) Masz kto gdzie z jakim ip i bodajze chyba nawet z jakim maciem się łączył i na jaki okres czasu, i te informacje pozostają nawet po usunieciu loginu. Ale fakt faktem takie cos w lmsie byłoby wygodniejsze.
Fakt przydałoby się natomiast radius accounting zalatwia sprawe wysmienicie :) Masz kto gdzie z jakim ip i bodajze chyba nawet z jakim maciem się łączył i na jaki okres czasu, i te informacje pozostają nawet po usunieciu loginu. Ale fakt faktem takie cos w lmsie byłoby wygodniejsze
Nie wiem czy reszcie grupy się spodoba ale mi od początku brakowało jednej rzeczy tak jak log kto kiedy i jaki IP miał (z data od do) także brakowało mi historii włączeń/wyłaczeń warnings-ów access aby mieć pełen obraz tego co dzieje się z klientem i co klient kombinuje tabela radius accounting dawała by pełną historię co sie ostatnio działo.
I ostatnia rzecz internet jak wszyscy wiemy jest bardzo uzależniający wciągu kilku miesięcy mam juz któryś przypadek uzależnienia od netu w swojej sieci :/ przychodzi do mnie taki rodzic i prosi o zrobienie czasówki tj najczęściej tak by net działał od np. 08:00:00 do 20:00:00 wpisujemy godziny ewentualnie także dni i reszte robią skrypty.. czyli w nejwęższym wypadku 4 pola, opcja: właczona/wyłączona, godzina: start, godzina stop, dni tyg.
P.S. Marzenie ścietej głowy :)
POzdrawiam Marcin S.
Tzw kontrola rodzicielska... mozna i tak ale lepiej dodatkowo zarobic na sprzedaży takowej aplikacji zainteresowanym. Nie wiem jak duzo masz siec, ale rozwiazanie utrzymywane po stronie operatora, jest malo skalowalne i moze stworzyc problemy w dalekiej przyszlosci, przy kilku kilkunastu tysiacach. przeladowanie firewalla routera nie jest za dobre ale wszystko zalezy od tego kto jak ma siec skonfigurowaną. Nie lepiej zmienic haslo do PPPoE i dać tylko rodzicom, aby mogli wpisywac je gdy chca pozwolic synkowi/corce skorzystac z neta? Jeżeli masz router kliencki ktory terminuje sesje pppoe mozesz na nim zablokowac neta i stworzyc polaczenie pptp ktore bedzie dawalo neta.
Pozdrawiam
uczestnicy (9)
-
A.L.E.C
-
Dariusz kowalczyk
-
Grzegorz Chwesewicz
-
Jaroslaw Dziubek
-
Marcin S.
-
Mariusz Kropiwnicki
-
Michał "gaco" Gacek
-
Paweł Gabryszak
-
Sarenka